Transit translation system (#309)

* update schemas

* update schemas

* update schemas

* schema update

* update translation

* upd
This commit is contained in:
brindosch 2016-12-04 19:32:23 +01:00 committed by redPanther
parent 3124bb8bf1
commit 8d55154164
82 changed files with 3120 additions and 1850 deletions

View File

@ -2,14 +2,14 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-photo fa-fw"></i><span lang="en" data-lang-token="main_menu_colors_conf_token">Image Processing</span></h2> <h2 class="page-header"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_colors_label_intro">Color calibration, smoothing (color transistions) and detection of blackbars.</h4> <h4 data-i18n="conf_colors_label_intro">Color calibration, smoothing (color transistions) and detection of blackbars.</h4>
</div> </div>
<hr /> <hr />
<div class="col-lg-12"> <div class="col-lg-12">
<div id='editor_container'/> <div id='editor_container'/>
<button class="btn btn-success" id='btn_submit' lang="en" data-lang-token="general_button_savesettings">Save Settings</button> <button class="btn btn-success" id='btn_submit' data-i18n="general_button_savesettings">Save Settings</button>
</div> </div>
</div> </div>

View File

@ -1,28 +1,28 @@
<div id="wrapper">
<div class="container" style="margin:20px auto;max-width:600px;"> <div class="container" style="margin:20px auto;max-width:600px;">
<center> <center>
<img src="img/hyperion/hyperionlostconnection.png" alt="Redefine ambient light!"> <img src="img/hyperion/hyperionlostconnection.png" alt="Redefine ambient light!">
<div> <div>
<h2 lang="en" data-lang-token="info_conlost_label_title">Lost connection to Hyperion service!</h2> <h2 data-i18n="info_conlost_label_title">Lost connection to Hyperion service!</h2>
<hr> <hr>
<h4 lang="en" data-lang-token="info_conlost_label_reason">Possible reasons:</h4> <h4 data-i18n="info_conlost_label_reason">Possible reasons:</h4>
<p lang="en" data-lang-token="info_conlost_label_reason1">- Hyperion restarts</p> <p data-i18n="info_conlost_label_reason1">- Hyperion restarts</p>
<p lang="en" data-lang-token="info_conlost_label_reason2">- You perform an update</p> <p data-i18n="info_conlost_label_reason2">- You perform an update</p>
<p lang="en" data-lang-token="info_conlost_label_reason3">- Hyperion isn't running</p> <p data-i18n="info_conlost_label_reason3">- Hyperion isn't running</p>
<hr> <hr>
<i class="fa fa-refresh fa-spin" style="font-size:50px"></i> <i class="fa fa-refresh fa-spin" style="font-size:50px"></i>
<h4 lang="en" data-lang-token="info_conlost_label_autorefresh">This page will be automatically refreshed.</h4> <h4 data-i18n="info_conlost_label_autorefresh">This page will be automatically refreshed.</h4>
<h4 lang="en" data-lang-token="info_conlost_label_autorecon">We reconnect again after Hyperion is available.</h4> <h4 data-i18n="info_conlost_label_autorecon">We reconnect again after Hyperion is available.</h4>
<a href="/" lang="en" data-lang-token="info_conlost_label_reload">If not, click me or reload the page</a> <a href="/" data-i18n="info_conlost_label_reload">If not, click me or reload the page</a>
</div> </div>
</center> </center>
</div> </div>
</div>
<!-- ************************************ --> <!-- ************************************ -->
<script> <script>
performTranslation();
var connectionLost = false; var connectionLost = false;
var connectionTimer; var connectionTimer;

View File

@ -1,34 +1,34 @@
<div class="container-fluid" id="content_dashboard"> <div class="container-fluid" id="content_dashboard">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span lang="en" data-lang-token="main_menu_dashboard_token">Dashboard</span></h2> <h2 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="dashboard_label_intro">The dashboard give you a quick overview about the status of Hyperion and show you the latest news of the Hyperion Blog.</h4> <h4 data-i18n="dashboard_label_intro">The dashboard give you a quick overview about the status of Hyperion and show you the latest news of the Hyperion Blog.</h4>
</div> </div>
<hr> <hr>
<div class="col-md-6 col-xxl-4"> <div class="col-md-6 col-xxl-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-info-circle fa-fw"></i> <i class="fa fa-info-circle fa-fw"></i>
<span lang="en" data-lang-token="dashboard_infobox_label_title">Information</span> <span data-i18n="dashboard_infobox_label_title">Information</span>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table borderless"> <table class="table borderless">
<tbody> <tbody>
<tr> <tr>
<td lang="en" data-lang-token="dashboard_infobox_label_currenthyp">Your Hyperion version:</td> <td data-i18n="dashboard_infobox_label_currenthyp">Your Hyperion version:</td>
<td id="currentversion">unknown</td> <td id="currentversion">unknown</td>
</tr> </tr>
<tr> <tr>
<td lang="en" data-lang-token="dashboard_infobox_label_latesthyp">Latest version:</td> <td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
<td id="latestversion">unknown</td> <td id="latestversion">unknown</td>
</tr> </tr>
<tr> <tr>
<td lang="en" data-lang-token="dashboard_infobox_label_leddevice">LED type:</td> <td data-i18n="dashboard_infobox_label_leddevice">LED type:</td>
<td id="dash_leddevice">unknown</td> <td id="dash_leddevice">unknown</td>
</tr> </tr>
<tr> <tr>
<td lang="en" data-lang-token="dashboard_infobox_label_device">Device:</td> <td data-i18n="dashboard_infobox_label_device">Device:</td>
<td id="dash_systeminfo"></td> <td id="dash_systeminfo"></td>
</tr> </tr>
</tbody> </tbody>
@ -42,14 +42,14 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-eye fa-fw"></i> <i class="fa fa-eye fa-fw"></i>
<span lang="en" data-lang-token="dashboard_componentbox_label_title">Components status</span> <span data-i18n="dashboard_componentbox_label_title">Components status</span>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th lang="en" data-lang-token="dashboard_componentbox_label_comp">Component</th> <th data-i18n="dashboard_componentbox_label_comp">Component</th>
<th lang="en" data-lang-token="dashboard_componentbox_label_status">Status</th> <th data-i18n="dashboard_componentbox_label_status">Status</th>
</tr> </tr>
</thead> </thead>
<tbody id="tab_components"> <tbody id="tab_components">
@ -62,7 +62,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-newspaper-o fa-fw"></i> <i class="fa fa-newspaper-o fa-fw"></i>
<span lang="en" data-lang-token="dashboard_newsbox_label_title">Latest blog posts</span> <span data-i18n="dashboard_newsbox_label_title">Latest blog posts</span>
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -77,3 +77,6 @@
</div> </div>
<!-- /.container-fluid --> <!-- /.container-fluid -->
<script type="text/javascript">
performTranslation('content_dashboard');
</script>

View File

@ -1,14 +1,14 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-spinner fa-fw"></i><span lang="en" data-lang-token="main_menu_effect_conf_token">Effects</span></h2> <h2 class="page-header"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_effects_label_intro">Setting up a booteffect/color that is visible after Hyperion startup. Configure a background effect/color which is active, when all capture sources are disabled (also temporarily via Kodi Watch)</h4> <h4 data-i18n="conf_effects_label_intro">Setting up a booteffect/color that is visible after Hyperion startup. Configure a background effect/color which is active, when all capture sources are disabled (also temporarily via Kodi Watch)</h4>
</div> </div>
<hr> <hr>
<div class="col-lg-12"> <div class="col-lg-12">
<div id='editor_container'></div> <div id='editor_container'></div>
<button class="btn btn-success" id='btn_submit' lang="en" data-lang-token="general_button_savesettings">Save Settings</button> <button class="btn btn-success" id='btn_submit' data-i18n="general_button_savesettings">Save Settings</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,38 +1,38 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-cogs fa-fw"></i><span lang="en" data-lang-token="main_menu_effectsconfigurator_token">Effects Configurator</span></h2> <h2 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="effectsconfigurator_label_intro">Create out of the base effects new effects that are tuned to your liking. Depending on Effect there are options like color, speed, direction and more available.</h4> <h4 data-i18n="effectsconfigurator_label_intro">Create out of the base effects new effects that are tuned to your liking. Depending on Effect there are options like color, speed, direction and more available.</h4>
</div> </div>
<hr /> <hr />
<div class="col-lg-12"> <div class="col-lg-12">
<div class="panel panel-default" > <div class="panel panel-default" >
<div class="panel-heading"> <div class="panel-heading">
<label for="effectslist" lang="en" data-lang-token="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label> <label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" /> <select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="form-group row"> <div class="form-group row">
<label for="name-input" class="col-xs-2 col-form-label" lang="en" data-lang-token="effectsconfigurator_label_effectname">Effect name:</label> <label for="name-input" class="col-xs-2 col-form-label" data-i18n="effectsconfigurator_label_effectname">Effect name:</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="text" id="name-input"> <input class="form-control" type="text" id="name-input">
</div> </div>
</div> </div>
<div id="editor_container" /> <div id="editor_container" />
</div> </div>
<div class="panel-footer"> <div class="panel-footer" id="eff_footer">
<button class="btn btn-warning" id='btn_start_test' lang="en" data-lang-token="effectsconfigurator_button_starttest">Start Effecttest</button> <button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
<button class="btn btn-warning" id='btn_stop_test' lang="en" data-lang-token="effectsconfigurator_button_stoptest">Stop Effecttest</button> <button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
<button class="btn btn-danger" id='btn_cont_test' lang="en" data-lang-token="effectsconfigurator_button_conttest">Toggle continuous testing</button> <button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
<button class="btn btn-primary pull-right" id='btn_write' lang="en" data-lang-token="effectsconfigurator_button_saveeffect">Save Effect</button> <button class="btn btn-primary pull-right" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
</div> </div>
</div> </div>
<div class="panel panel-default" > <div class="panel panel-default" >
<div class="panel-heading"> <div class="panel-heading">
<label for="effectsdellist" lang="en" data-lang-token="effectsconfigurator_label_deleffect">Effekt Delete:</label> <label for="effectsdellist" data-i18n="effectsconfigurator_label_deleffect">Delete Effect:</label>
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" /> <select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
<button class="btn btn-primary pull-right" id='btn_delete' lang="en" data-lang-token="effectsconfigurator_button_deleffect">Delete Effect</button> <button class="btn btn-primary pull-right" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -2,14 +2,14 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-camera fa-fw"></i><span lang="en" data-lang-token="main_menu_grabber_conf_token">Capturing Hardware</span></h2> <h2 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_grabber_label_intro">Hyperion supports two ways on how to get captured pictures for processing and output. The platform grabber which captures internal at the device you are running Hyperion on (best qualitiy) and the USB Grabber which gathers from a connected device the necessary pictures (more calibration work and configuration).</h4> <h4 data-i18n="conf_grabber_label_intro">Hyperion supports two ways on how to get captured pictures for processing and output. The platform grabber which captures internal at the device you are running Hyperion on (best qualitiy) and the USB Grabber which gathers from a connected device the necessary pictures (more calibration work and configuration).</h4>
</div> </div>
<hr /> <hr />
<div class="col-lg-12"> <div class="col-lg-12">
<div id='editor_container'/> <div id='editor_container'/>
<button class="btn btn-success" id='btn_submit' lang="en" data-lang-token="general_button_savesettings">Save Settings</button> <button class="btn btn-success" id='btn_submit' data-i18n="general_button_savesettings">Save Settings</button>
</div> </div>
</div> </div>

View File

@ -1,9 +1,9 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-play-circle-o fa-fw"></i><span lang="en" data-lang-token="conf_kodi_label_title">Kodi Watch</span></h2> <h2 class="page-header"><i class="fa fa-play-circle-o fa-fw"></i><span data-i18n="conf_kodi_label_title">Kodi Watch</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_kodi_label_intro">The Kodi Watcher enables you to enable and disable the screencapture depending on Kodi state. This is not limited to the same machine, you could observe also a Kodi on any other device at your network.</h4> <h4 data-i18n="conf_kodi_label_intro">The Kodi Watcher enables you to enable and disable the screencapture depending on Kodi state. This is not limited to the same machine, you could observe also a Kodi on any other device at your network.</h4>
</div> </div>
<hr /> <hr />
<div class="alert alert-info" role="alert"> <div class="alert alert-info" role="alert">
@ -13,7 +13,7 @@
<div class="col-lg-12"> <div class="col-lg-12">
<div id='editor_container'/> <div id='editor_container'/>
<button class="btn btn-success" id='btn_submit'>Save Settings</button> <button class="btn btn-success" id='btn_submit' data-i18n="general_button_savesettings">Save Settings</button>
</div> </div>
</div> </div>

View File

@ -15,7 +15,7 @@
<h4 class="modal-title">Hue Bridge</h4> <h4 class="modal-title">Hue Bridge</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<span lang="en" data-lang-token="hue_press_link_modal">Please press link button on the Hue Bridge.</span> <br /><br /> <span data-i18n="hue_press_link_modal">Please press link button on the Hue Bridge.</span> <br /><br />
<center> <center>
<span id="connectionTime"></span><br /> <span id="connectionTime"></span><br />
<img src="/img/hyperion/ring-alt.svg" /> <img src="/img/hyperion/ring-alt.svg" />
@ -29,15 +29,15 @@
<div class="container-fluid"> <div class="container-fluid">
<h2 class="page-header"><i class="fa fa-lightbulb-o fa-fw"></i><span lang="en" data-lang-token="main_menu_leds_conf_token">LED Hardware</span></h2> <h2 class="page-header"><i class="fa fa-lightbulb-o fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_leds_label_intro">The LED controller of youre choice is your way to output the led data via Raspberry PI GPIO, USB or network! Choose one, define your led layout and enjoy the light!</h4> <h4 data-i18n="conf_leds_label_intro">The LED controller of youre choice is your way to output the led data via Raspberry PI GPIO, USB or network! Choose one, define your led layout and enjoy the light!</h4>
</div> </div>
<hr> <hr>
<ul id="leds_cfg_nav" class="nav nav-tabs"> <ul id="leds_cfg_nav" class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#menu_controller" lang="en" data-lang-token="conf_leds_nav_label_ledcontroller">LED Controller</a></li> <li class="active"><a data-toggle="tab" href="#menu_controller" data-i18n="conf_leds_nav_label_ledcontroller">LED Controller</a></li>
<li><a data-toggle="tab" href="#menu_gencfg" lang="en" data-lang-token="conf_leds_nav_label_ledlayout">LED Layout</a></li> <li><a data-toggle="tab" href="#menu_gencfg" data-i18n="conf_leds_nav_label_ledlayout">LED Layout</a></li>
<li><a data-toggle="tab" href="#menu_display" lang="en" data-lang-token="conf_leds_nav_label_ledtesting">LED Testing</a></li> <li><a data-toggle="tab" href="#menu_display" data-i18n="conf_leds_nav_label_ledtesting">LED Testing</a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
@ -45,8 +45,8 @@
<div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px"> <div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading form-group" style="font-size:90%;white-space:nowrap;"> <div class="panel-heading form-group" style="font-size:90%;white-space:nowrap;">
<button id='btn_submit_controller' class="btn btn-success" style="float:right" lang="en" data-lang-token="general_button_savesettings">Save Settings</button> <button id='btn_submit_controller' class="btn btn-success" style="float:right" data-i18n="general_button_savesettings">Save Settings</button>
<label for="leddevices" lang="en" data-lang-token="conf_leds_contr_label_contrtype">Controller type:</label> <label for="leddevices" data-i18n="conf_leds_contr_label_contrtype">Controller type:</label>
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" /> <select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div> </div>
@ -55,7 +55,7 @@
<div id="huebridge" class="container-fluid" style="display:none"> <div id="huebridge" class="container-fluid" style="display:none">
<hr/> <hr/>
<button data-toggle="collapse" class="btn btn-success" data-target="#huebridge_content">Hue Bridge Setup Helper</button> <button data-toggle="collapse" class="btn btn-success" data-target="#huebridge_content" data-i18n="hue_btn_setup_helper">Hue Bridge Setup Helper</button>
<div id="huebridge_content" class="collapse"> <div id="huebridge_content" class="collapse">
<div class="introd" style="margin-top:20px;margin-bottom:20px"> <div class="introd" style="margin-top:20px;margin-bottom:20px">
With this Setup Helper you can get a new User for your Hue Bridge and you can see your Lights with the IDs for Hyperion Configuration. With this Setup Helper you can get a new User for your Hue Bridge and you can see your Lights with the IDs for Hyperion Configuration.
@ -63,15 +63,15 @@
<b>Remember:</b> This is only a helper. You have to copy and paste them in your config above. <b>Remember:</b> This is only a helper. You have to copy and paste them in your config above.
</div> </div>
<div class="col-lg-12"> <div class="col-lg-12">
<span id="ip_alert" style="display:none; color:red; font-weight: bold;" lang="en" data-lang-token="hue_failure_ip_token">Please check your IP Address.</span> <span id="ip_alert" style="display:none; color:red; font-weight: bold;" data-i18n="hue_failure_ip_token">Please check your IP Address.</span>
<span id="abortConnection" style="display:none; color:red; font-weight: bold;" lang="en" data-lang-token="hue_failure_connection_token">Connection Timeout. Please press the button in time.</span><br /> <span id="abortConnection" style="display:none; color:red; font-weight: bold;" data-i18n="hue_failure_connection_token">Connection Timeout. Please press the button in time.</span><br />
<div class="form-group"> <div class="form-group">
<label for="ip">Hue Bridge IP:</label> <label for="ip" data-i18n="hue_label_ip">Hue Bridge IP:</label>
<input type="text" class="form-control" id="ip"> <input type="text" class="form-control" id="ip">
<label for="user" lang="en" data-lang-token="hue_label_username">Hue Bridge Username:</label> <label for="user" data-i18n="hue_label_username">Hue Bridge Username:</label>
<input type="text" class="form-control" id="user" disabled> <input type="text" class="form-control" id="user" disabled>
<div id="hue_lights" class="row"></div> <div id="hue_lights" class="row"></div>
<button type="button" class="btn btn-success" id="create_user"> <i class="fa fa-floppy-o"></i><span lang="en" data-lang-token="hue_button_create_user_token"> Create User</span></button> <button type="button" class="btn btn-success" id="create_user"> <i class="fa fa-floppy-o"></i><span data-i18n="hue_button_create_user_token"> Create User</span></button>
</div> </div>
</div> </div>
</div> </div>
@ -85,9 +85,9 @@
<div id="leds_canvas"/> <div id="leds_canvas"/>
<div id="leds_controls"> <div id="leds_controls">
<button lang="en" type="button" class="btn btn-success" id="leds_toggle" lang="en" data-lang-token="conf_leds_test_button_toggleleds">toggle leds</button> <button type="button" class="btn btn-success" id="leds_toggle" data-i18n="conf_leds_test_button_toggleleds">toggle leds</button>
<button lang="en" type="button" class="btn btn-danger" id="leds_toggle_num" lang="en" data-lang-token="conf_leds_test_button_togglelednumber">toggle led numbers</button> <button type="button" class="btn btn-danger" id="leds_toggle_num" data-i18n="conf_leds_test_button_togglelednumber">toggle led numbers</button>
<button lang="en" type="button" class="btn btn-danger" id="leds_toggle_live" lang="en" data-lang-token="conf_leds_test_button_toggleliveleds">toggle live leds</button> <button type="button" class="btn btn-danger" id="leds_toggle_live" data-i18n="conf_leds_test_button_toggleliveleds">toggle live leds</button>
</div> </div>
</div> </div>
</div> </div>
@ -102,60 +102,60 @@
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1"> <div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-television fa-fw"></i><span lang="en" data-lang-token="conf_leds_layout_frame">Classic Layout (LED Frame)</span></a> <a><i class="fa fa-television fa-fw"></i><span data-i18n="conf_leds_layout_frame">Classic Layout (LED Frame)</span></a>
</h4> </h4>
</div> </div>
<div id="collapse1" class="panel-collapse collapse in"> <div id="collapse1" class="panel-collapse collapse in">
<div class="panel-body "> <div class="panel-body ">
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledstop" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_top">Top</label> <label class="col-form-label col-md-6" for="ip_cl_ledstop" style="width:170px" data-i18n="conf_leds_layout_cl_top">Top</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledstop" type="number" value="10" min="0" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledstop" type="number" value="10" min="0" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsbottom" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_bottom">Bottom</label> <label class="col-form-label col-md-6" for="ip_cl_ledsbottom" style="width:170px" data-i18n="conf_leds_layout_cl_bottom">Bottom</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsbottom" type="number" value="10" min="0" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledsbottom" type="number" value="10" min="0" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsleft" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_left">Left</label> <label class="col-form-label col-md-6" for="ip_cl_ledsleft" style="width:170px" data-i18n="conf_leds_layout_cl_left">Left</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsleft" type="number" value="6" min="0" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledsleft" type="number" value="6" min="0" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsright" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_right">Right</label> <label class="col-form-label col-md-6" for="ip_cl_ledsright" style="width:170px" data-i18n="conf_leds_layout_cl_right">Right</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsright" type="number" value="6" min="0" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledsright" type="number" value="6" min="0" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsglength" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_gaglength">Gap length</label> <label class="col-form-label col-md-6" for="ip_cl_ledsglength" style="width:170px" data-i18n="conf_leds_layout_cl_gaglength">Gap length</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsglength" type="number" value="0" min="0" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledsglength" type="number" value="0" min="0" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsgpos" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_gappos">Gap position</label> <label class="col-form-label col-md-6" for="ip_cl_ledsgpos" style="width:170px" data-i18n="conf_leds_layout_cl_gappos">Gap position</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsgpos" type="number" value="0" min="0" step="1"> <input class="form-control ledCLconstr" id="ip_cl_ledsgpos" type="number" value="0" min="0" step="1">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_position" style="width:170px" lang="en" data-lang-token="conf_leds_layout_cl_inppos">Input position</label> <label class="col-form-label col-md-6" for="ip_cl_position" style="width:170px" data-i18n="conf_leds_layout_cl_inppos">Input position</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_position" type="number" value="0" step="1"> <input class="form-control ledCLconstr" id="ip_cl_position" type="number" value="0" step="1">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_reverse" style="width:190px" lang="en" data-lang-token="conf_leds_layout_cl_reversdir">Reverse direction</label> <label class="col-form-label col-md-6" for="ip_cl_reverse" style="width:190px" data-i18n="conf_leds_layout_cl_reversdir">Reverse direction</label>
<div class="checkbox"> <div class="checkbox">
<input class="ledCLconstr" id="ip_cl_reverse" type="checkbox" value="false"></input> <input class="ledCLconstr" id="ip_cl_reverse" type="checkbox" value="false"></input>
<label></label> <label></label>
@ -165,37 +165,37 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3"> <div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3">
<h4 class="panel-title"> <h4 class="panel-title">
<a><span lang="en" data-lang-token="conf_leds_layout_advanced">Advanced settings</span></a> <a><span data-i18n="conf_leds_layout_advanced">Advanced settings</span></a>
</h4> </h4>
</div> </div>
<div id="collapse3" class="panel-collapse collapse"> <div id="collapse3" class="panel-collapse collapse">
<div class="panel-body "> <div class="panel-body ">
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledshdepth" style="width:190px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label> <label class="col-form-label col-md-6" for="ip_cl_ledshdepth" style="width:190px;max-width:200px" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledshdepth" type="number" value="8" min="1" max="100" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledshdepth" type="number" value="8" min="1" max="100" step="1"></input>
<div class="input-group-addon">%</div> <div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsvdepth" style="width:190px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_cl_vleddepth">Vertical LED depth</label> <label class="col-form-label col-md-6" for="ip_cl_ledsvdepth" style="width:190px;max-width:200px" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsvdepth" type="number" value="5" min="1" max="100" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledsvdepth" type="number" value="5" min="1" max="100" step="1"></input>
<div class="input-group-addon">%</div> <div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledsedgegap" style="width:190px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_cl_edgegap">Edge Gap</label> <label class="col-form-label col-md-6" for="ip_cl_ledsedgegap" style="width:190px;max-width:200px" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledsedgegap" type="number" value="0" min="0" max="50" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledsedgegap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon">%</div> <div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_cl_ledscornergap" style="width:190px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_cl_cornergap">Corner Gap</label> <label class="col-form-label col-md-6" for="ip_cl_ledscornergap" style="width:190px;max-width:200px" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledCLconstr" id="ip_cl_ledscornergap" type="number" value="0" min="0" max="50" step="1"></input> <input class="form-control ledCLconstr" id="ip_cl_ledscornergap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon">%</div> <div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</div> </div>
</div> </div>
</div> </div>
@ -204,7 +204,7 @@
</div> </div>
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<button id="btn_cl_generate" class="btn btn-warning" lang="en" data-lang-token="conf_leds_layout_cl_generate">Generate LED configuration</button> <button id="btn_cl_generate" class="btn btn-warning" data-i18n="conf_leds_layout_cl_generate">Generate LED configuration</button>
</div> </div>
</div> </div>
</div> </div>
@ -212,76 +212,76 @@
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2"> <div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-th fa-fw"></i><span lang="en" data-lang-token="conf_leds_layout_matrix">Matrix Configuration (LED wall)</span></a> <a><i class="fa fa-th fa-fw"></i><span data-i18n="conf_leds_layout_matrix">Matrix Configuration (LED wall)</span></a>
</h4> </h4>
</div> </div>
<div id="collapse2" class="panel-collapse collapse"> <div id="collapse2" class="panel-collapse collapse">
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_ma_ledshoriz" style="width:170px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_ma_horiz">Horizontal</label> <label class="col-form-label col-md-6" for="ip_ma_ledshoriz" style="width:170px;max-width:200px" data-i18n="conf_leds_layout_ma_horiz">Horizontal</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledMAconstr" id="ip_ma_ledshoriz" type="number" value="10" min="1" step="1"></input> <input class="form-control ledMAconstr" id="ip_ma_ledshoriz" type="number" value="10" min="1" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_ma_ledsvert" style="width:170px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_ma_vert">Vertical</label> <label class="col-form-label col-md-6" for="ip_ma_ledsvert" style="width:170px;max-width:200px" data-i18n="conf_leds_layout_ma_vert">Vertical</label>
<div class=" input-group"> <div class=" input-group">
<input class="form-control ledMAconstr" id="ip_ma_ledsvert" type="number" value="10" min="1" step="1"></input> <input class="form-control ledMAconstr" id="ip_ma_ledsvert" type="number" value="10" min="1" step="1"></input>
<div class="input-group-addon">LEDs</div> <div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_ma_cabling" style="width:170px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_ma_cabling">Cabling</label> <label class="col-form-label col-md-6" for="ip_ma_cabling" style="width:170px;max-width:200px" data-i18n="conf_leds_layout_ma_cabling">Cabling</label>
<div class=" input-group"> <div class=" input-group">
<select class="form-control ledMAconstr" id="ip_ma_cabling"> <select class="form-control ledMAconstr" id="ip_ma_cabling">
<option value="snake" lang="en" data-lang-token="conf_leds_layout_ma_optsnake">Snake</option> <option value="snake" data-i18n="conf_leds_layout_ma_optsnake">Snake</option>
<option value="parallel" lang="en" data-lang-token="conf_leds_layout_ma_optparallel">Parallel</option> <option value="parallel" data-i18n="conf_leds_layout_ma_optparallel">Parallel</option>
</select> </select>
</div> </div>
</div> </div>
<!--- <div class="form-group"> <!--- <div class="form-group">
<label class="col-form-label col-md-6" for="ip_ma_order" style="width:170px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_ma_order">Order</label> <label class="col-form-label col-md-6" for="ip_ma_order" style="width:170px;max-width:200px" data-i18n="conf_leds_layout_ma_order">Order</label>
<div class=" input-group"> <div class=" input-group">
<select class="form-control ledMAconstr" id="ip_ma_order"> <select class="form-control ledMAconstr" id="ip_ma_order">
<option value="horizontal" lang="en" data-lang-token="conf_leds_layout_ma_opthoriz">Horizontal</option> <option value="horizontal" data-i18n="conf_leds_layout_ma_opthoriz">Horizontal</option>
<option value="vertical" lang="en" data-lang-token="conf_leds_layout_ma_optvert">Vertical</option> <option value="vertical" data-i18n="conf_leds_layout_ma_optvert">Vertical</option>
</select> </select>
</div> </div>
</div> </div>
---> --->
<div class="form-group"> <div class="form-group">
<label class="col-form-label col-md-6" for="ip_ma_start" style="width:170px;max-width:200px" lang="en" data-lang-token="conf_leds_layout_ma_position">Input</label> <label class="col-form-label col-md-6" for="ip_ma_start" style="width:170px;max-width:200px" data-i18n="conf_leds_layout_ma_position">Input</label>
<div class=" input-group"> <div class=" input-group">
<select class="form-control ledMAconstr" id="ip_ma_start"> <select class="form-control ledMAconstr" id="ip_ma_start">
<option value="top-left" lang="en" data-lang-token="conf_leds_layout_ma_opttopleft">Top left</option> <option value="top-left" data-i18n="conf_leds_layout_ma_opttopleft">Top left</option>
<option value="top-right" lang="en" data-lang-token="conf_leds_layout_ma_opttopright">Top right</option> <option value="top-right" data-i18n="conf_leds_layout_ma_opttopright">Top right</option>
<option value="bottom-left" lang="en" data-lang-token="conf_leds_layout_ma_optbottomleft">Bottom left</option> <option value="bottom-left" data-i18n="conf_leds_layout_ma_optbottomleft">Bottom left</option>
<option value="bottom-right" lang="en" data-lang-token="conf_leds_layout_ma_optbottomright">Bottom right</option> <option value="bottom-right" data-i18n="conf_leds_layout_ma_optbottomright">Bottom right</option>
</select> </select>
</div> </div>
</div> </div>
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<button id="btn_ma_generate" class="btn btn-warning" lang="en" data-lang-token="conf_leds_layout_cl_generate">Generate LED configuration</button> <button id="btn_ma_generate" class="btn btn-warning" data-i18n="conf_leds_layout_cl_generate">Generate LED configuration</button>
</div> </div>
</div> </div>
</div> </div>
<div class="panel panel-primary" style="margin-bottom:5px"> <div class="panel panel-primary" style="margin-bottom:5px">
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse4"> <div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse4">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-wrench fa-fw"></i><span lang="en" data-lang-token="conf_leds_layout_generatedconf">Generated/Actual LED Configuration</span></a> <a><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_leds_layout_generatedconf">Generated/Actual LED Configuration</span></a>
</h4> </h4>
</div> </div>
<div id="collapse4" class="panel-collapse collapse"> <div id="collapse4" class="panel-collapse collapse">
<div class="panel-body"> <div class="panel-body">
<p lang="en" data-lang-token="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p> <p data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
<b><p lang="en" data-lang-token="conf_leds_layout_textf2">Don't forget to save!</p></b> <b><p data-i18n="conf_leds_layout_textf2">Don't forget to save!</p></b>
<textarea rows="25" id="ledconfig" class="form-control"></textarea> <textarea rows="25" id="ledconfig" class="form-control"></textarea>
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<button lang="en" type="button" class="btn btn-warning" id="leds_custom_updsim" lang="en" data-lang-token="conf_leds_layout_button_updsim">Update preview</button> <button type="button" class="btn btn-warning" id="leds_custom_updsim" data-i18n="conf_leds_layout_button_updsim">Update preview</button>
<button lang="en" type="button" class="btn btn-success pull-right" id="leds_custom_save" lang="en" data-lang-token="conf_leds_layout_button_savelay">Save layout</button> <button type="button" class="btn btn-success pull-right" id="leds_custom_save" data-i18n="conf_leds_layout_button_savelay">Save layout</button>
</div> </div>
</div> </div>
</div> </div>
@ -290,17 +290,17 @@
<div class="col-lg-6 col-md-12"> <div class="col-lg-6 col-md-12">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<h4 class="panel-title"><i class="fa fa-search fa-fw"></i><span lang="en" data-lang-token="conf_leds_layout_peview">LED Layout preview</span></h4> <h4 class="panel-title"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_peview">LED Layout preview</span></h4>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div id="previewcreator"><span lang="en" data-lang-token="conf_leds_layout_preview_empty">No preview requested</span></div> <div id="previewcreator"><span data-i18n="conf_leds_layout_preview_empty">No preview requested</span></div>
<div id="previewledcount"></div> <div id="previewledcount"></div>
<div class="col-lg-12 st_helper" style="padding-left:0px; padding-right:0px"> <div class="col-lg-12 st_helper" style="padding-left:0px; padding-right:0px">
<div id="leds_preview"></div> <div id="leds_preview"></div>
</div> </div>
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<button lang="en" type="button" class="btn btn-danger" id="leds_prev_toggle_num" lang="en" data-lang-token="conf_leds_test_button_togglelednumber">toggle led numbers</button> <button type="button" class="btn btn-danger" id="leds_prev_toggle_num" data-i18n="conf_leds_test_button_togglelednumber">toggle led numbers</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,17 +1,19 @@
<div class="container-fluid"> <div class="container-fluid" id="trans_conf_logging">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-play-circle-o fa-fw"></i><span lang="en" data-lang-token="conf_kodi_label_title">Log Messages</span></h2> <h2 class="page-header"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_logging_label_intro">log messages.</h4> <h4 data-i18n="conf_logging_label_intro">Area to check log messages, depending on loglevel setting you see more or less.</h4>
</div> </div>
<hr /> <hr />
<div id='editor_container'/>
<div class="col-lg-12"> <button class="btn btn-success" id='btn_submit' data-i18n="general_button_savesettings">Save Settings</button>
<div id="logmessages" style="white-space:pre"> <hr />
</div> <pre>
</div> <div id="logmessages" style="overflow:scroll;max-height:400px" />
</pre>
<button class="btn btn-primary" id='btn_pbupload' data-i18n="conf_logging_btn_pbupload">Pastebin upload</button>
<button class="btn btn-success" id='btn_autoscroll' data-i18n="conf_logging_btn_autoscroll">Auto scrolling</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -2,15 +2,14 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span lang="en" data-lang-token="main_menu_network_conf_token">Network Services</span></h2> <h2 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network Services</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="conf_network_label_intro">All network based settings could you find here.</h4> <h4 data-i18n="conf_network_label_intro">All network based settings are listed here.</h4>
</div> </div>
<hr /> <hr />
<div class="col-lg-12"> <div class="col-lg-12">
<!-- <form id="grabberConfForm"></form>-->
<div id='editor_container'/> <div id='editor_container'/>
<button class="btn btn-success" id='btn_submit'>Save Settings</button> <button class="btn btn-success" id='btn_submit' data-i18n="general_button_savesettings">Save Settings</button>
</div> </div>
</div> </div>

View File

@ -1,7 +1,7 @@
<div class="container-fluid"> <div class="container-fluid">
<h2 class="page-header"><i class="fa fa-wifi fa-fw"></i><span lang="en" data-lang-token="main_menu_remotecontrol_token">Remote Control</span></h2> <h2 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="remote_label_intro">Set an effect/color. You could also select a source manually. The Components control give the opportunity to enable/disable components of Hyprion during runtime. All changes you made here are lost after a restart.</h4> <h4 data-i18n="remote_label_intro">Set an effect/color. You could also select a source manually. The Components control give the opportunity to enable/disable components of Hyprion during runtime. All changes you made here are lost after a restart.</h4>
</div> </div>
<hr> <hr>
</div> </div>
@ -10,15 +10,15 @@
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<div class="panel panel-primary" > <div class="panel panel-primary" >
<div class="panel-heading" lang="en" data-lang-token="remote_colors_label_coloreffect">Colors/Effects</div> <div class="panel-heading" data-i18n="remote_colors_label_coloreffect">Colors/Effects</div>
<div class="panel-body"> <div class="panel-body">
<span lang="en" data-lang-token="remote_colors_label_color" style="display:inline-block">Color:</span> <span data-i18n="remote_colors_label_color" style="display:inline-block">Color:</span>
<div id="cp2" class="colorpicker-component" style="width:auto;display:inline-block;white-space:nowrap;"> <div id="cp2" class="colorpicker-component" style="width:auto;display:inline-block;white-space:nowrap;">
<input type="text" value="#00AABB" class="form-control" style="display:inline" /><span class="input-group-addon form-control" style="display:inline-block;width:auto;"><i></i></span> <input type="text" value="#00AABB" class="form-control" style="display:inline" /><span class="input-group-addon form-control" style="display:inline-block;width:auto;"><i></i></span>
</div> </div>
<div lang="en" data-lang-token="remote_effects_label_effects" style="display:inline-block;margin-left:50px;">Effect:</div> <div data-i18n="remote_effects_label_effects" style="display:inline-block;margin-left:50px;">Effect:</div>
<select id="effect_select" class="form-control" style="width:auto;display:inline-block"></select> <select id="effect_select" class="form-control" style="width:auto;display:inline-block"></select>
<button lang="en" data-lang-token="remote_colors_button_reset" type="button" class="btn btn-warning" id="reset_color" style="margin-left:20px;width:auto;display:inline-block">Reset Color/Effect</button> <button data-i18n="remote_colors_button_reset" type="button" class="btn btn-warning" id="reset_color" style="margin-left:20px;width:auto;display:inline-block">Reset Color/Effect</button>
</div> </div>
</div> </div>
@ -31,7 +31,7 @@
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="panel panel-primary" > <div class="panel panel-primary" >
<div class="panel-heading" lang="en" data-lang-token="remote_input_label_sourceselection">Source selection</div> <div class="panel-heading" data-i18n="remote_input_label_sourceselection">Source selection</div>
<div class="panel-body"> <div class="panel-body">
<p>Hyperion uses a priority system to select a source. Everything you set has a priority (Effect/Color/Platform capture/USB capture and network sources). By default, Hyperion select sources depending on priority (lowest number reflects the current active source). Now you have the opportunity to select sources on your own.</p> <p>Hyperion uses a priority system to select a source. Everything you set has a priority (Effect/Color/Platform capture/USB capture and network sources). By default, Hyperion select sources depending on priority (lowest number reflects the current active source). Now you have the opportunity to select sources on your own.</p>
<p style="font-weight:bold">Schema: NameOfSource(priority)</p> <p style="font-weight:bold">Schema: NameOfSource(priority)</p>
@ -42,7 +42,7 @@
<div class="col-lg-6"> <div class="col-lg-6">
<div class="panel panel-primary" > <div class="panel panel-primary" >
<div class="panel-heading" lang="en" data-lang-token="remote_components_label_components">Components control</div> <div class="panel-heading" data-i18n="remote_components_label_components">Components control</div>
<div class="panel-body"> <div class="panel-body">
<div id="componentsbutton"><i style="font-size:120px;padding:20px;text-align:center;display: inline-block;width: 100%;line-height: normal;" class="fa fa-cog fa-spin"></i></div> <div id="componentsbutton"><i style="font-size:120px;padding:20px;text-align:center;display: inline-block;width: 100%;line-height: normal;" class="fa fa-cog fa-spin"></i></div>
</div> </div>

View File

@ -1,113 +1,117 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<h2 class="page-header"><i class="fa fa-info fa-fw"></i><span lang="en" data-lang-token="support_label_title">Support Hyperion</span></h2> <h2 class="page-header"><i class="fa fa-info fa-fw"></i><span data-i18n="support_label_title">Support Hyperion</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="support_label_intro">Hyperion is a free non-profit software. A small team is working on it and this is why we need your steady support.</h4> <h4 data-i18n="support_label_intro">Hyperion is a free non-profit software. A small team is working on it and this is why we need your steady support.</h4>
</div> </div>
<hr> <hr>
<h3 style="font-weight: bold" lang="en" data-lang-token="support_label_spreadtheword">Spread the word</h3> <h3 style="font-weight: bold" data-i18n="support_label_spreadtheword">Spread the word</h3>
<a href="#" target="_blank" class="unlink"> <a href="#" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-facebook bg-color-fb"></i> <i class="fa fa-facebook bg-color-fb"></i>
<h4>Facebook</h4> <h4>Facebook</h4>
<p lang="en" data-lang-token="support_label_fbtext">Share our Hyperion Facebook page and get a notice when new updates are released</p> <p data-i18n="support_label_fbtext">Share our Hyperion Facebook page and get a notice when new updates are released</p>
</div> </div>
</a> </a>
<a href="#" target="_blank" class="unlink"> <a href="#" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-twitter bg-color-tw"></i> <i class="fa fa-twitter bg-color-tw"></i>
<h4>Twitter</h4> <h4>Twitter</h4>
<p lang="en" data-lang-token="support_label_twtext">Share and follow on Twitter, be always up to date with latest post about the Hyperion development</p> <p data-i18n="support_label_twtext">Share and follow on Twitter, be always up to date with latest post about the Hyperion development</p>
</div> </div>
</a> </a>
<a href="https://plus.google.com/103082579494653418604" target="_blank" class="unlink"> <a href="https://plus.google.com/103082579494653418604" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-google-plus bg-color-g"></i> <i class="fa fa-google-plus bg-color-g"></i>
<h4>Google+</h4> <h4>Google+</h4>
<p lang="en" data-lang-token="support_label_ggtext">Circle us on Google +!</p> <p data-i18n="support_label_ggtext">Circle us on Google +!</p>
</div> </div>
</a> </a>
<a href="https://www.youtube.com/channel/UCCah_idbSMqgo4UwP6R9H-A" target="_blank" class="unlink"> <a href="https://www.youtube.com/channel/UCCah_idbSMqgo4UwP6R9H-A" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-youtube bg-color-g"></i> <i class="fa fa-youtube bg-color-g"></i>
<h4>Youtube</h4> <h4>Youtube</h4>
<p lang="en" data-lang-token="support_label_yttext">Bored from pictures? Checkout our Youtube channel</p> <p data-i18n="support_label_yttext">Bored from pictures? Checkout our Youtube channel!</p>
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12"> <div class="col-xs-12">
<hr> <hr>
<h3 style="font-weight: bold" lang="en" data-lang-token="support_label_donate">Donate or bookmark our affiliate links</h3> <h3 style="font-weight: bold" data-i18n="support_label_donate">Donate or use our affiliate links</h3>
<ol> <ol>
<li lang="en" data-lang-token="support_label_affinstr1">Click on the appropriate link of your country</li> <li data-i18n="support_label_affinstr1">Click on the appropriate link of your country</li>
<li lang="en" data-lang-token="support_label_affinstr2">Everything you buy (doesnt matter what) we get a small fee based on your turnover</li> <li data-i18n="support_label_affinstr2">Everything you buy (doesnt matter what) we get a small fee based on your turnover</li>
<li lang="en" data-lang-token="support_label_affinstr3">You ALWAYS pay the same price, there is absolutely no difference. Try it out!</li> <li data-i18n="support_label_affinstr3">You ALWAYS pay the same price, there is absolutely no difference. Try it out!</li>
</ol> </ol>
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-amazon bg-color-am"></i> <i class="fa fa-amazon bg-color-am"></i>
<h4>Amazon</h4> <h4>Amazon</h4>
<ul> <ul>
<li><a href="http://www.amazon.de/?tag=hyperionproje-21" target="_blank" lang="en" data-lang-token="general_country_de">Germany</a></li> <li><a href="http://www.amazon.de/?tag=hyperionproje-21" target="_blank" data-i18n="general_country_de">Germany</a></li>
<li><a href="http://www.amazon.com/?tag=hyperionpro05-20" target="_blank" lang="en" data-lang-token="general_country_us">United States</a></li> <li><a href="http://www.amazon.com/?tag=hyperionpro05-20" target="_blank" data-i18n="general_country_us">United States</a></li>
<li><a href="http://www.amazon.co.uk/?tag=hyperionpro02-21" target="_blank" lang="en" data-lang-token="general_country_uk">United Kingdom</a></li> <li><a href="http://www.amazon.co.uk/?tag=hyperionpro02-21" target="_blank" data-i18n="general_country_uk">United Kingdom</a></li>
<li><a href="http://www.amazon.fr/?tag=hyperionpro0c-21" target="_blank" lang="en" data-lang-token="general_country_fr">France</a></li> <li><a href="http://www.amazon.fr/?tag=hyperionpro0c-21" target="_blank" data-i18n="general_country_fr">France</a></li>
<li><a href="http://www.amazon.es/?tag=hyperionpro07-21" target="_blank" lang="en" data-lang-token="general_country_es">Spain</a></li> <li><a href="http://www.amazon.es/?tag=hyperionpro07-21" target="_blank" data-i18n="general_country_es">Spain</a></li>
<li><a href="http://www.amazon.it/?tag=hyperionpro00-21" target="_blank" lang="en" data-lang-token="general_country_it">Italy</a></li> <li><a href="http://www.amazon.it/?tag=hyperionpro00-21" target="_blank" data-i18n="general_country_it">Italy</a></li>
</ul> </ul>
</div> </div>
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-shopping-cart bg-color-am"></i> <i class="fa fa-shopping-cart bg-color-am"></i>
<h4>ebay</h4> <h4>ebay</h4>
<ul> <ul>
<li><a href="http://rover.ebay.com/rover/1/707-53477-19255-0/1?pub=5575174930&toolid=10001&campid=707-53477-19255-0&customid=&mpt=9592320&mpre=http%3A%2F%2Fwww.ebay.de" target="_blank" lang="en" data-lang-token="general_country_de">Germany</a></li> <li><a href="http://rover.ebay.com/rover/1/707-53477-19255-0/1?pub=5575174930&toolid=10001&campid=707-53477-19255-0&customid=&mpt=9592320&mpre=http%3A%2F%2Fwww.ebay.de" target="_blank" data-i18n="general_country_de">Germany</a></li>
<li><a href="http://rover.ebay.com/rover/1/711-53200-19255-0/1?pub=5575174930&toolid=10001&campid=711-53200-19255-0&customid=&mpt=8091563&mpre=http%3A%2F%2Fwww.ebay.com" target="_blank" lang="en" data-lang-token="general_country_us">United States</a></li> <li><a href="http://rover.ebay.com/rover/1/711-53200-19255-0/1?pub=5575174930&toolid=10001&campid=711-53200-19255-0&customid=&mpt=8091563&mpre=http%3A%2F%2Fwww.ebay.com" target="_blank" data-i18n="general_country_us">United States</a></li>
<li><a href="http://rover.ebay.com/rover/1/710-53481-19255-0/1?pub=5575174930&toolid=10001&campid=710-53481-19255-0&customid=&mpt=9837178&mpre=http%3A%2F%2Fwww.ebay.co.uk" target="_blank" lang="en" data-lang-token="general_country_uk">United Kingdom</a></li> <li><a href="http://rover.ebay.com/rover/1/710-53481-19255-0/1?pub=5575174930&toolid=10001&campid=710-53481-19255-0&customid=&mpt=9837178&mpre=http%3A%2F%2Fwww.ebay.co.uk" target="_blank" data-i18n="general_country_uk">United Kingdom</a></li>
<li><a href="http://rover.ebay.com/rover/1/1346-53482-19255-0/1?pub=5575174930&toolid=10001&campid=1346-53482-19255-0&customid=&mpt=9890408&mpre=http%3A%2F%2Fwww.ebay.nl" target="_blank" lang="en" data-lang-token="general_country_nl">Netherlands</a></li> <li><a href="http://rover.ebay.com/rover/1/1346-53482-19255-0/1?pub=5575174930&toolid=10001&campid=1346-53482-19255-0&customid=&mpt=9890408&mpre=http%3A%2F%2Fwww.ebay.nl" target="_blank" data-i18n="general_country_nl">Netherlands</a></li>
<li><a href="http://rover.ebay.com/rover/1/709-53476-19255-0/1?pub=5575174930&toolid=10001&campid=709-53476-19255-0&customid=&mpt=9865977&mpre=http%3A%2F%2Fwww.ebay.fr" target="_blank" lang="en" data-lang-token="general_country_fr">France</a></li> <li><a href="http://rover.ebay.com/rover/1/709-53476-19255-0/1?pub=5575174930&toolid=10001&campid=709-53476-19255-0&customid=&mpt=9865977&mpre=http%3A%2F%2Fwww.ebay.fr" target="_blank" data-i18n="general_country_fr">France</a></li>
<li><a href="http://rover.ebay.com/rover/1/1185-53479-19255-0/1?pub=5575174930&toolid=10001&campid=1185-53479-19255-0&customid=&mpt=1016300&mpre=http%3A%2F%2Fwww.ebay.es" target="_blank" lang="en" data-lang-token="general_country_es">Spain</a></li> <li><a href="http://rover.ebay.com/rover/1/1185-53479-19255-0/1?pub=5575174930&toolid=10001&campid=1185-53479-19255-0&customid=&mpt=1016300&mpre=http%3A%2F%2Fwww.ebay.es" target="_blank" data-i18n="general_country_es">Spain</a></li>
</ul> </ul>
</div> </div>
<a href="https://www.paypal.me/hyperionproject/10" target="_blank" class="unlink"> <a href="https://www.paypal.me/hyperionproject/10" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-paypal bg-color-pp"></i> <i class="fa fa-paypal bg-color-pp"></i>
<h4>Paypal</h4> <h4>Paypal</h4>
<p lang="en" data-lang-token="support_label_donationpp">Donation:</p><a href="https://www.paypal.me/hyperionproject/10" target="_blank">Paypal</a> <p data-i18n="support_label_donationpp">Donation:</p><a href="https://www.paypal.me/hyperionproject/10" target="_blank">Paypal</a>
</div> </div>
</a> </a>
<a href="bitcoin:1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR?amount=0.5&label=Hyperion Donation" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-btc bg-color-btc"></i> <i class="fa fa-btc bg-color-btc"></i>
<h4>Bitcoin</h4> <h4>Bitcoin</h4>
<p lang="en" data-lang-token="support_label_btctext">Address:</p> <p data-i18n="support_label_btctext">Address:</p>
<p>1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR</p> <p>1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR</p>
</div> </div>
</a>
</div> </div>
<div class="col-xs-12"> <div class="col-xs-12">
<hr> <hr>
<h3 style="font-weight: bold" lang="en" data-lang-token="support_label_webrestitle">Information and help ressources</h3> <h3 style="font-weight: bold" data-i18n="support_label_webrestitle">Information and help ressources</h3>
<a href="https://www.hyperion-project.org" target="_blank" class="unlink"> <a href="https://www.hyperion-project.org" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-globe bg-color-wf"></i> <i class="fa fa-globe bg-color-wf"></i>
<h4 lang="en" data-lang-token="support_label_webpagetitle">Webpage</h4> <h4 data-i18n="support_label_webpagetitle">Webpage</h4>
<p lang="en" data-lang-token="support_label_webpagetext">Home of Hyperion</p> <p data-i18n="support_label_webpagetext">Home of Hyperion</p>
</div> </div>
</a> </a>
<a href="https://wiki.hyperion-project.org" target="_blank" class="unlink"> <a href="https://wiki.hyperion-project.org" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-book bg-color-wf"></i> <i class="fa fa-book bg-color-wf"></i>
<h4 lang="en" data-lang-token="support_label_wikititle">Wiki</h4> <h4 data-i18n="support_label_wikititle">Wiki</h4>
<p lang="en" data-lang-token="support_label_wikitext">The A to Z source for almost everything Hyperion related</p> <p data-i18n="support_label_wikitext">The A to Z source for almost everything Hyperion related</p>
</div> </div>
</a> </a>
<a href="https://forum.hyperion-project.org" target="_blank" class="unlink"> <a href="https://forum.hyperion-project.org" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container"> <div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-comments bg-color-wf"></i> <i class="fa fa-comments bg-color-wf"></i>
<h4 lang="en" data-lang-token="support_label_forumtitle">Forum</h4> <h4 data-i18n="support_label_forumtitle">Forum</h4>
<p lang="en" data-lang-token="support_label_forumtext">Showcases, discussions, help and more</p> <p data-i18n="support_label_forumtext">Showcases, discussions, help and more</p>
</div> </div>
</a> </a>
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript">
performTranslation('trans_support');
</script>

View File

@ -1,9 +1,9 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-download fa-fw"></i><span lang="en" data-lang-token="main_menu_update_token">Update</span></h2> <h2 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h2>
<div class="introd"> <div class="introd">
<h4 lang="en" data-lang-token="update_label_intro">This page gives you an overview of all Hyperion versions available. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4> <h4 data-i18n="update_label_intro">Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4>
</div> </div>
<hr> <hr>
<h4 id="update_currver"></h4> <h4 id="update_currver"></h4>
@ -15,9 +15,11 @@
</div> </div>
<script> <script>
performTranslation('trans_update');
for (key in parsedUpdateJSON) for (key in parsedUpdateJSON)
{ {
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-default"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+parsedUpdateJSON[key].versionnr+'</div><div class="panel-body"><p><span style="font-weight:bold;" lang="en" data-lang-token="update_label_type">Type:</span> '+ parsedUpdateJSON[key].channel +'</p><p><span style="font-weight:bold;" lang="en" data-lang-token="update_label_description">Description:</span> '+parsedUpdateJSON[key].versiondesc+'</p><hr><a class="btn btn-primary" href="'+ parsedUpdateJSON[key].versionchangelog +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;" lang="en" data-lang-token="update_button_changelog">Full changelog</span></a><button type="button" class="btn btn-warning pull-right"><i class="fa fa-download fa-fw"></i><span lang="en" data-lang-token="update_button_install">Install</span></button></div></div></div>'); $('#versionlist').append('<div class="col-lg-6"><div class="panel panel-default"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+parsedUpdateJSON[key].versionnr+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type')+'</span> '+ parsedUpdateJSON[key].channel +'</p><p><span style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+parsedUpdateJSON[key].versiondesc+'</p><hr><a class="btn btn-primary" href="'+ parsedUpdateJSON[key].versionchangelog +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right"><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
} }
$('#update_currver').append(currentVersion); $('#update_currver').append($.i18n('update_versreminder', currentVersion));
</script> </script>

View File

@ -0,0 +1,409 @@
{
"@metadata": {
"authors": [
"brindosch"
],
"project" : "Hyperion WebUI",
"locale": "de",
"last-updated": "2016-11-30",
"message-documentation": "qqq"
},
"general_country_de" : "Deutschland",
"general_country_us" : "Amerika",
"general_country_uk" : "England",
"general_country_fr" : "Frankreich",
"general_country_es" : "Spanien",
"general_country_it" : "Italien",
"general_country_nl" : "Niederlande",
"general_speech_de" : "Deutsch",
"general_speech_en" : "Englisch",
"general_comp_SMOOTHING" : "Glättung",
"general_comp_BLACKBORDER" : "Schwarze Balken Erkennung",
"general_comp_KODICHECKER" : "Kodi Überwachung",
"general_comp_FORWARDER" : "JSON/PROTO Weiterleitung",
"general_comp_UDPLISTENER" : "UDP Listener",
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
"general_comp_GRABBER" : "Plattform Aufnahme",
"general_comp_V4L" : "USB Aufnahme",
"general_button_savesettings" : "Einstellungen speichern",
"dashboard_label_intro" : "Das Dashboard zeigt dir Informationen zum Systemstatus, ob Updates verfügbar sind, den Komponentenstatus sowie die letzten Blog-Posts vom Hyperion Team.",
"dashboard_infobox_label_title" : "Information",
"dashboard_infobox_label_currenthyp" : "Deine Hyperion Version:",
"dashboard_infobox_label_latesthyp" : "Aktuellste Hyperion Version:",
"dashboard_infobox_label_leddevice" : "LED Typ:",
"dashboard_infobox_label_device" : "Systeminformation:",
"dashboard_infobox_message_updatewarning" : "Eine aktuellere Version von Hyperion ist verfügbar! (V$1)",
"dashboard_infobox_message_updatesuccess" : "Du nutzt die aktuellste Version von Hyperion.",
"dashboard_componentbox_label_title" : "Komponenten Status",
"dashboard_componentbox_label_comp" : "Komponente",
"dashboard_componentbox_label_status" : "Status",
"dashboard_newsbox_label_title" : "Die letzten Blogposts",
"dashboard_alert_message_confedit" : "Deine Hyperion Konfiguration wurde verändert. Um die Änderungen anzuwenden, starte Hyperion neu.",
"dashboard_alert_button_restarthyerion" : "Hyperion neustarten",
"main_menu_dashboard_token" : "Dashboard",
"main_menu_configuration_token" : "Konfiguration",
"main_menu_leds_conf_token" : "LED Hardware",
"main_menu_grabber_conf_token" : "Aufnahme Hardware",
"main_menu_effect_conf_token" : "Effekte",
"main_menu_colors_conf_token" : "Bildverarbeitung",
"main_menu_kodiwatch_token" : "Kodi Überwachung",
"main_menu_network_conf_token" : "Netzwerk",
"main_menu_remotecontrol_token" : "Fernbedienung",
"main_menu_effectsconfigurator_token" : "Effekt Konfigurator",
"main_menu_support_token" : "Hilfe",
"main_menu_update_token" : "Update",
"main_menu_system_token" : "System",
"main_menu_input_selection_token" : "Eingabeauswahl",
"main_menu_logging_token" : "Protokoll",
"conf_effects_label_intro" : "Stelle einen Effekt oder Farbe ein, der beim Starten sichtbar sein soll. Stelle einen Hintergrundeffekt/Farbe ein der erst sichtbar wird, wenn alle Bildquellen abgeschaltet sind (Das gilt ebenfalls für temporäres abschalten mithilfe der Kodi Überwachung).",
"conf_leds_label_intro" : "Der LED Hardware bereich ermöglicht eine Vielzahl von Ausgabemöglichkeiten über Raspberry Pi GPIO, USB oder Netzwerk. Erstelle ein LED Layout das zu deinem Aufbau passt und schon kann es losgehen!",
"conf_leds_nav_label_ledcontroller" : "LED Steuerung",
"conf_leds_nav_label_ledlayout" : "LED Layout",
"conf_leds_nav_label_ledtesting" : "LED Test",
"conf_leds_contr_label_contrtype" : "Steuerungstyp:",
"conf_leds_optgroup_RPiSPI" : "RPi SPI",
"conf_leds_optgroup_RPiPWM" : "RPi PWM",
"conf_leds_optgroup_RPiGPIO" : "RPi GPIO",
"conf_leds_optgroup_network" : "Netzwerk",
"conf_leds_optgroup_usb" : "USB",
"conf_leds_optgroup_debug" : "Debug",
"conf_leds_layout_frame" : "Klassisches Layout (Rahmen)",
"conf_leds_layout_matrix" : "Matrix Layout (LED Wand)",
"conf_leds_layout_generatedconf" : "Generierte/Aktuelle LED Konfiguration",
"conf_leds_layout_button_savelay" : "Speichere Layout",
"conf_leds_layout_button_updsim" : "Aktualisiere Vorschau",
"conf_leds_layout_peview" : "LED Layout Vorschau",
"conf_leds_layout_advanced" : "Erweiterte Optionen",
"conf_leds_layout_preview_originCL" : "Erstellt von: Klassisches Layout (Rahmen)",
"conf_leds_layout_preview_originTEXT" : "Erstellt von: Textfeld",
"conf_leds_layout_preview_originMA" : "Erstellt von: Matrix Layout (LED Wand)",
"conf_leds_layout_preview_totalleds" : "LEDs gesamt: $1",
"conf_leds_layout_preview_empty" : "Es wurde keine Vorschau angefordert",
"conf_leds_layout_cl_top" : "Oben",
"conf_leds_layout_cl_bottom" : "Unten",
"conf_leds_layout_cl_left" : "Links",
"conf_leds_layout_cl_right" : "Rechts",
"conf_leds_layout_cl_gaglength" : "Lückenlänge",
"conf_leds_layout_cl_gappos" : "Lückenposition",
"conf_leds_layout_cl_inppos" : "Einspeisepunkt",
"conf_leds_layout_cl_reversdir" : "Richtung umkehren",
"conf_leds_layout_cl_hleddepth" : "Horizontale LED Tiefe",
"conf_leds_layout_cl_vleddepth" : "Vertikale LED Tiefe",
"conf_leds_layout_cl_generate" : "Generiere LED Konfiguartion",
"conf_leds_layout_cl_edgegap" : "Rahmenabstand",
"conf_leds_layout_cl_cornergap" : "Eckabstand",
"conf_leds_layout_ma_horiz" : "Horizontal",
"conf_leds_layout_ma_vert" : "Vertikal",
"conf_leds_layout_ma_cabling" : "Verkabelung",
"conf_leds_layout_ma_optsnake" : "Schlange",
"conf_leds_layout_ma_optparallel" : "Parallel",
"conf_leds_layout_ma_order" : "Reihenfolge",
"conf_leds_layout_ma_opthoriz" : "Horizontal",
"conf_leds_layout_ma_optvert" : "Vertikal",
"conf_leds_layout_ma_position" : "Einpeisepunkt",
"conf_leds_layout_ma_opttopleft" : "Oben links",
"conf_leds_layout_ma_opttopright" : "Oben rechts",
"conf_leds_layout_ma_optbottomleft" : "Unten links",
"conf_leds_layout_ma_optbottomright" : "Unten rechts",
"conf_leds_layout_textf1" : "Das Textfeld zeigt dir dein aktuell geladenes Layout, sofern du kein neues Layout mit den Optionen oben erstellt hast. Optional kann man die Werte hier weiter bearbeiten.",
"conf_leds_layout_textf2" : "Vergiss nicht zu speichern!",
"conf_leds_test_button_toggleleds" : "LEDs",
"conf_leds_test_button_togglelednumber" : "LED Nummerierung",
"conf_leds_test_button_toggleliveleds" : "LED Echtzeitansicht",
"conf_grabber_label_intro" : "Hyperion unterstützt 2 Hauptarten wie Bilder aufgenommen werden können. Zum Einen die Plattform Aufnahme, die sich direkt am System bedient auf dem Hyperion läuft (beste Qualität). Zum Anderen die USB Aufnahme, die sich an einem angeschlossenen Gerät bedient die benötigten Informationen für die Verarbeitung und Ausgabe zu erhalten (Mehr Konfigurationsaufwand und Kalibrierung)",
"conf_colors_label_intro" : "Neben der Farbkalibrierung, gehört auch die Glättung (sanfte Farbübergänge) und die Erkennung von störenden (schwarzen) Balken zur Bildverarbeitung.",
"conf_network_label_intro" : "Alle Einstellungen zu Ports, der Weiterleitung von JSON/PROTO und Boblight sowie UDP Listener.",
"conf_kodi_label_title" : "Kodi Überwachung",
"conf_kodi_label_intro" : "Die Kodi Überwachung ermöglicht es dir abhängig von dem Kodi Status dein ambient light an oder abzuschalten. Dies ist nicht limitiert auf das selbe Gerät. Du kannst jedes Kodi in deinem lokalen Netzwerk überwachen lassen.",
"conf_logging_label_intro" : "Überprüfe die Meldungen im Prokotoll um zu erfahren was Hyperion gerade beschäftigt. Je nach eingestellter Protokoll-Stufe siehst du mehr oder weniger Informationen.",
"conf_logging_btn_pbupload" : "Protokoll hochladen",
"conf_logging_btn_autoscroll" : "Automatisch scrollen",
"remote_label_intro" : "Die Fernbedienung ermöglicht dir während Hyperion läuft Farbe/Effekte zu starten/setzen, aber auch eine Quelle manuell festzulegen. Die Komponentensteuerung ermöglicht es dir gezielt Teile von Hyperion zu aktivieren/deaktivieren. Beachte, dass nach einem Neustart die hier durchgeführten Aktionen wieder zurückgesetzt werden.",
"remote_colors_label_coloreffect" : "Farbe/Effekt:",
"remote_colors_button_reset" : "Farbe/Effekt zurücksetzen",
"remote_colors_label_color" : "Farbe:",
"remote_effects_label_effects" : "Effekt:",
"remote_input_label_sourceselection" : "Quellenauswahl",
"remote_input_label_autoselect" : "Automatische Auswahl",
"remote_components_label_components" : "Komponentensteuerung",
"remote_optgroup_usreffets" : "Benutzer Effekte",
"remote_optgroup_syseffets" : "Mitgelieferte Effekte",
"remote_effects_intro" : "Die Effekt-Fernbedienung ermöglicht es dir Effekte zu starten für Demonstrations- oder Testzwecke. Vergessse nicht den Effekt wieder zu stoppen, wenn du fertig bist.",
"remote_components_intro" : "Die Komponenten-Fenbedienung ermöglicht es dir Komponenten von Hyperion zu starten und stoppen. Beachte: Dies ist nur temporär und geht nach einem Neustart verloren. Möchtest du dauerhaft Komponenten aktivieren/deaktivieren benutze die Konfigurationsseiten.",
"hue_button_create_user_token" : "Benutzer anlegen",
"hue_press_link_modal" : "Bitte Link Taste auf der Hue Bridge drücken.",
"hue_failure_connection_token" : "Connection Timeout. Bitte drücke die Taste rechtzeitig.",
"hue_button_pair" : "Verbinden",
"hue_btn_setup_helper" : "Hue Bridge Einrichtungshilfe",
"hue_failure_ip_token" : "Bitte überprüfe deine IP Adresse.",
"hue_label_username" : "Benutzername:",
"hue_label_ip" : "Hue Bridge IP:",
"effectsconfigurator_label_intro" : "Erstelle auf Grundlage der Basiseffekte neue Effekt die nach deinen Wünschen angepasst sind. Je nach Effekt stehen Optionen wie Farbe, Geschwindigkeit, oder Richtung und vieles mehr zur Auswahl.",
"effectsconfigurator_label_chooseeff" : "Basis-Effekt auswählen:",
"effectsconfigurator_button_saveeffect" : "Effekt speichern",
"effectsconfigurator_label_effectname" : "Effektname:",
"effectsconfigurator_button_starttest" : "Starte Effekttest",
"effectsconfigurator_button_stoptest" : "Stoppe Effekttest",
"effectsconfigurator_button_conttest" : "Fortlaufender Test",
"effectsconfigurator_label_deleffect" : "Effekt entfernen:",
"effectsconfigurator_button_deleffect" : "Effekt entfernen",
"support_label_title" : "Unterstütze Hyperion",
"support_label_intro" : "Hyperion ist ein kostenloses Open Source Projekt und ein kleines Team arbeitet an seiner Weiterentwicklung. Darum benötigen wir DEINE Unterstützung um den Ball weiter rollen zu lassen und um weiter in bessere Infrastruktur und Weiterentwicklung investieren zu können.",
"support_label_spreadtheword" : "Weitersagen!",
"support_label_fbtext" : "Teile Inhalte in Facebook und halte dich und andere auf dem Laufenden",
"support_label_twtext" : "Nutze die 140 Zeichen und bleibe auf dem Laufenden auch auf Twitter",
"support_label_ggtext" : "Platziere uns in deinen Kreisen auf Google+",
"support_label_yttext" : "Gelangweilt von Bildern? Werfe einen Blick auf unsere Youtube Videos",
"support_label_donate" : "Spende oder nutze unsere Affiliate Links",
"support_label_affinstr1" : "Klicke auf den Link deines Landes",
"support_label_affinstr2" : "Kaufe wie gewohnt ein, abhängig von deinem Umsatz bekommen wir eine kleine Provision",
"support_label_affinstr3" : "Du zahlst immer den selben Preis. Teste es!",
"support_label_btctext" : "Adresse:",
"support_label_donationpp" : "Spende:",
"support_label_webrestitle" : "Informationsquellen und Hilfe",
"support_label_webpagetitle" : "Internetseite",
"support_label_webpagetext" : "Das Zuhause von Hyperion",
"support_label_wikititle" : "Wiki",
"support_label_wikitext" : "Von A bis Z - Alles wissenwerte zu Hyperion",
"support_label_forumtitle" : "Forum",
"support_label_forumtext" : "Diskussion und Hilfestellung von der Community",
"update_label_intro" : "Diese Seite zeigt dir alle verfügbaren Versionen von Hyperion, du kannst nach Belieben eine aktuellere Version installieren oder eine Ältere. Die aktuellsten Versionen befinden sich immer oben.",
"update_label_description" : "Beschreibung:",
"update_button_install" : "Installieren",
"update_button_changelog" : "Zeige Änderungsprotokoll",
"update_label_type" : "Art:",
"update_versreminder" : "Deine Version: $1",
"info_conlost_label_title" : "Verbindung zum Hyperion Service unterbrochen!",
"info_conlost_label_reason" : "Mögliche Ursachen:",
"info_conlost_label_reason1" : "- Hyperion startet neu",
"info_conlost_label_reason2" : "- Ein Update wird durchgeführt",
"info_conlost_label_reason3" : "- Hyperion wird nicht mehr ausgeführt",
"info_conlost_label_autorecon" : "Du wirst verbunden, sobald Hyperion wieder verfügbar ist",
"info_conlost_label_autorefresh" : "Diese Seite wird automatisch aktualisiert",
"info_conlost_label_reload" : "Wenn nicht, klicke hier",
"infoDialog_leds_gap_title" : "Lücke verloren!",
"infoDialog_leds_gap_text" : "Deine LED Lücke/Position ist größer als die Anzahl der LEDs, verringere die Lückenposition und/oder Lückenlänge!",
"InfoDialog_leds_validfail_title" : "JSON Überprüfung fehlgeschlagen!",
"infoDialog_effconf_deleted_title" : "Effekt entnfernt!",
"infoDialog_effconf_deleted_text" : "Der Effekt $1 wurde erfolgreich entfernt!",
"infoDialog_effconf_created_title" : "Effekt erstellt!",
"infoDialog_effconf_created_text" : "Der Effekt $1 wurde erfolgreich erstellt!",
"infoDialog_effconf_invalidvalue_title" : "Fehlerhafte Werte!",
"infoDialog_effconf_invalidvalue_text" : "Es wurden unzulässige Werte eingetragen, überprüfe das rot markierte Feld und versuche es erneut!",
"edt_dev_general_heading_title" : "Allgemeine Einstellungen",
"edt_dev_general_name_title" : "Name der Konfiguration",
"edt_dev_general_ledCount_title" : "Anzahl Hardware LEDs",
"edt_dev_general_colorOrder_title" : "RGB Byte Reihenfolge",
"edt_dev_general_rewriteTime_title" : "Aktualisierungszeit",
"edt_dev_spec_header_title" : "Spezifische Einstellungen",
"edt_dev_spec_baudrate_title" : "Baudrate",
"edt_dev_spec_spipath_title" : "SPI Pfad",
"edt_dev_spec_invert_title" : "Invertiere Signal",
"edt_dev_spec_multicastGroup_title" : "Multicast Gruppe",
"edt_dev_spec_numberOfLeds_title" : "Anzahl der LEDs",
"edt_dev_spec_port_title" : "Port",
"edt_dev_spec_orbIds_title" : "Orb ID(s)",
"edt_dev_spec_useOrbSmoothing_title" : "Nutze Orb Glättung",
"edt_dev_spec_targetIp_title" : "Ziel IP",
"edt_dev_spec_targetIpHost_title" : "Ziel IP/hostname",
"edt_dev_spec_outputPath_title" : "Ausgabepfad",
"edt_dev_spec_delayAfterConnect_title" : "Verzögerung nach Verbindung",
"edt_dev_spec_FCsetConfig_title" : "Wende fadecandy Konfiguration an",
"edt_dev_spec_FCmanualControl_title" : "Manuelle Steuerung der fadecandy LEDs",
"edt_dev_spec_FCledToOn_title" : "Fadecandy LEDs set to on",
"edt_dev_spec_interpolation_title" : "Interpolation",
"edt_dev_spec_dithering_title" : "Dithering",
"edt_dev_spec_gamma_title" : "Gamma",
"edt_dev_spec_whitepoint_title" : "Weißpunkt",
"edt_dev_spec_username_title" : "Benutzername",
"edt_dev_spec_lightid_title" : "Lampen ID(s)",
"edt_dev_spec_lightid_itemtitle" : "ID",
"edt_dev_spec_transistionTime_title" : "Übergangszeit",
"edt_dev_spec_switchOffOnBlack_title" : "Aus bei schwarz",
"edt_dev_spec_uid_title" : "UID",
"edt_dev_spec_intervall_title" : "Intervall",
"edt_dev_spec_latchtime_title" : "Sperrzeit",
"edt_dev_spec_maxPacket_title" : "Paketgröße",
"edt_dev_spec_serial_title" : "Seriennummer",
"edt_dev_spec_vid_title" : "VID",
"edt_dev_spec_pid_title" : "PID",
"edt_dev_spec_cid_title" : "CID",
"edt_dev_spec_LBap102Mode_title" : "LightBerry APA102 Modus",
"edt_dev_spec_universe_title" : "Universum",
"edt_dev_spec_whiteLedAlgor_title" : "Weiß Algorithmus",
"edt_dev_spec_useRgbwProtocol_title" : "Nutze RGBW Protokoll",
"edt_dev_spec_maximumLedCount_title" : "Maximale Anzahl LEDs",
"edt_dev_spec_gpioNumber_title" : "GPIO Nummer",
"edt_dev_spec_gpioMap_title" : "GPIO Zuweisung",
"edt_dev_spec_PBFiFo_title" : "Pi-Blaster FiFo",
"edt_dev_spec_gpioBcm_title" : "GPIO Pin",
"edt_dev_spec_ledIndex_title" : "LED index",
"edt_dev_spec_colorComponent_title" : "Farbkomponente",
"edt_conf_general_enable_title" : "Aktiviert",
"edt_conf_general_priority_title" : "Priorität",
"edt_conf_general_port_title" : "Port",
"edt_conf_color_heading_title" : "Farbkalibrierung",
"edt_conf_smooth_heading_title" : "Glättung",
"edt_conf_smooth_type_title" : "Art",
"edt_conf_smooth_time_ms_title" : "Zeit",
"edt_conf_smooth_updateFrequency_title" : "Aktualisierungsfrequenz",
"edt_conf_smooth_updateDelay_title" : "Aktualisierungsverzögerung",
"edt_conf_smooth_continuousOutput_title" : "Fortlaufende Ausgabe",
"edt_conf_v4l2_heading_title" : "USB Aufnahme",
"edt_conf_v4l2_device_title" : "Gerät",
"edt_conf_v4l2_input_title" : "Eingang",
"edt_conf_v4l2_standard_title" : "Videoformat",
"edt_conf_v4l2_width_title" : "Breite",
"edt_conf_v4l2_height_title" : "Höhe",
"edt_conf_v4l2_frameDecimation_title" : "Bildverkleinerung",
"edt_conf_v4l2_sizeDecimation_title" : "Größenänderung",
"edt_conf_v4l2_mode_title" : "Modus",
"edt_conf_v4l2_useKodiChecker_title" : "Nutze Kodi Überwachung",
"edt_conf_v4l2_cropLeft_title" : "Entferne links",
"edt_conf_v4l2_cropRight_title" : "Entferne rechts",
"edt_conf_v4l2_cropTop_title" : "Entferne oben",
"edt_conf_v4l2_cropBottom_title" : "Entferne unten",
"edt_conf_v4l2_redSignalThreshold_title" : "Rote Signalschwelle",
"edt_conf_v4l2_greenSignalThreshold_title" : "Grüne Signalschwelle",
"edt_conf_v4l2_blueSignalThreshold_title" : "Blaue Signalschwelle",
"edt_conf_fg_heading_title" : "Plattform Aufnahme",
"edt_conf_fg_type_title" : "Typ",
"edt_conf_fg_frequency_Hz_title" : "Aufnahmefrequenz",
"edt_conf_fg_horizontalPixelDecimation_title" : "Horizontale Pixelreduzierung",
"edt_conf_fg_useXGetImage_title" : "Nutze XGetImage",
"edt_conf_fg_verticalPixelDecimation_title" : "Vertikale Pixelreduzierung",
"edt_conf_fg_device_title" : "Device",
"edt_conf_fg_display_title" : "Display",
"edt_conf_bb_heading_title" : "Schwarze Balken Erkennung",
"edt_conf_bb_threshold_title" : "Schwelle",
"edt_conf_bb_unknownFrameCnt_title" : "unknownFrameCnt",
"edt_conf_bb_borderFrameCnt_title" : "borderFrameCnt",
"edt_conf_bb_maxInconsistentCnt_title" : "maxInconsistentCn",
"edt_conf_bb_blurRemoveCnt_title" : "blurRemoveCnt",
"edt_conf_bb_mode_title" : "Modus",
"edt_conf_kodic_heading_title" : "Kodi Überwachung",
"edt_conf_kodic_kodiAddress_title" : "Kodi IP Adresse",
"edt_conf_kodic_kodiTcpPort_title" : "Kodi TCP Port",
"edt_conf_kodic_grabVideo_title" : "Video",
"edt_conf_kodic_grabPictures_title" : "Bilder",
"edt_conf_kodic_grabAudio_title" : "Audio",
"edt_conf_kodic_grabMenu_title" : "Menü",
"edt_conf_kodic_grabPause_title" : "Pause",
"edt_conf_kodic_grabScreensaver_title" : "Bildschirmschoner",
"edt_conf_kodic_enable3DDetection_title" : "Erkenne 3D",
"edt_conf_fw_heading_title" : "Weiterleitung",
"edt_conf_fw_json_title" : "Liste von JSON zielen",
"edt_conf_fw_json_itemtitle" : "JSON Ziel",
"edt_conf_fw_proto_title" : "Liste von PROTO zielen",
"edt_conf_fw_proto_itemtitle" : "PROTO Ziel",
"edt_conf_js_heading_title" : "JSON Server",
"edt_conf_ps_heading_title" : "PROTO Server",
"edt_conf_bobls_heading_title" : "Boblight Server",
"edt_conf_udpl_heading_title" : "UDP Listener",
"edt_conf_udpl_address_title" : "Addresse",
"edt_conf_udpl_timeout_title" : "Zeitüberschreitung",
"edt_conf_udpl_shared_title" : "Gemeinsam genutzt",
"edt_conf_webc_heading_title" : "Web Konfiguration",
"edt_conf_webc_docroot_title" : "Verzeichnis",
"edt_conf_effp_paths_title" : "Effekt Pfad(e)",
"edt_conf_effp_paths_itemtitle" : "Pfad",
"edt_conf_effp_disable_title" : "Deaktivierte Effekte",
"edt_conf_effp_disable_itemtitle" : "Effekt",
"edt_conf_log_heading_title" : "Protokoll",
"edt_conf_log_level_title" : "Protokollstufe",
"edt_eff_police_header_title" : "Polizei",
"edt_eff_fade_header_title" : "Farbübergang",
"edt_eff_rainbowmood_header_title" : "Regenbogen",
"edt_eff_knightrider_header_title" : "Knight Rider",
"edt_eff_lightclock_header_title" : "Lichtuhr",
"edt_eff_moodblobs_header_title" : "Stimmungskugeln",
"edt_eff_rainbowswirl_header_title" : "Regenbogenwirbel",
"edt_eff_random_header_title" : "Zufällig",
"edt_eff_runningdots_header_title" : "Rennende Punkte",
"edt_eff_systemshutdown_header_title" : "Herunterfahren",
"edt_eff_snake_header_title" : "Schlange",
"edt_eff_sparks_header_title" : "Funken",
"edt_eff_storbe_header_title" : "Stroboskop",
"edt_eff_traces_header_title" : "Farbspuren",
"edt_eff_x-mas_header_title" : "Weihnachten",
"edt_eff_color_title" : "Farbe",
"edt_eff_colorrandom_title" : "Zufällige Farbe",
"edt_eff_colorone_title" : "Farbe eins",
"edt_eff_colortwo_title" : "Farbe zwei",
"edt_eff_colorcount_title" : "Farblänge",
"edt_eff_rotationtime_title" : "Rotationszeit",
"edt_eff_sleeptime_title" : "Schlafzeit",
"edt_eff_reversedirection_title" : "Richtung umkehren",
"edt_eff_fadetime_title" : "Übergangszeit",
"edt_eff_colorstart_title" : "Farbe Start",
"edt_eff_colorend_title" : "Farbe Ende",
"edt_eff_speed_title" : "Geschwindigkeit",
"edt_eff_fadefactor_title" : "Verblass Faktor",
"edt_eff_showseconds_title" : "Zeige Sekunden",
"edt_eff_blobcount_title" : "Kugelanzahl",
"edt_eff_huechange_title" : "Farbänderung",
"edt_eff_basecolorchange_title" : "Basisfarben verändern",
"edt_eff_basecolorchangerate_title" : "BF Geschwindigkeit",
"edt_eff_basecolorrangeleft_title" : "BF Bereich links",
"edt_eff_basecolorrangeright_title" : "BF Bereich rechts",
"edt_eff_brightness_title" : "Helligkeit",
"edt_eff_centerx_title" : "Mittelpunkt X-Achse",
"edt_eff_centery_title" : "Mittelpunkt Y-Achse",
"edt_eff_saturation_title" : "Sättigung",
"edt_eff_colorevel_title" : "Farbstufe",
"edt_eff_whitelevel_title" : "Weißstufe",
"edt_eff_alarmcolor_title" : "Alarm Farbe",
"edt_eff_postcolor_title" : "Startfarbe",
"edt_eff_enableshutdown_title" : "Echtes herunterfahren",
"edt_eff_length_title" : "Länge",
"edt_eff_frequency_title" : "Frequenz",
"edt_append_ns" : "ns",
"edt_append_ms" : "ms",
"edt_append_s" : "s",
"edt_append_hz" : "Hz",
"edt_append_pixel" : "Pixel",
"edt_append_percent" : "%",
"edt_append_degree" : "°",
"edt_append_sdegree" : "s/grad",
"edt_append_leds" : "LEDs",
"edt_msg_error_notset" : "Attribut muss gesetzt sein",
"edt_msg_error_notempty" : "Eingabe benötigt",
"edt_msg_error_enum" : "Die Eingabe muss einem der aufgeführten Werte entsprechen",
"edt_msg_error_anyOf" : "Die Eingabe muss gegen mindestens eines der gegebenen Schemata validiert werden können",
"edt_msg_error_oneOf" : "Die Eingabe muss gegen genau eines der gegebenen Schemata validiert werden können. Momentan können $1 Schemata validiert werden",
"edt_msg_error_not" : "Die Eingabe darf nicht gegen das gegebene Schema validiert werden können",
"edt_msg_error_type_union" : "Die Eingabe muss einem der gegebenen Typen entsprechen",
"edt_msg_error_type" : "Die Eingabe muss vom Typ $1 sein",
"edt_msg_error_disallow_union" : "Die Eingabe darf nicht einem der gegebenen Werte entsprechen",
"edt_msg_error_disallow" : "Die Eingabe muss vom Typ $1 sein",
"edt_msg_error_multipleOf" : "Die Eingabe muss ein Vielfaches von $1 sein",
"edt_msg_error_maximum_excl" : "Der Wert muss kleiner als $1 sein",
"edt_msg_error_maximum_incl" : "Der Wert darf höchstens $1 sein",
"edt_msg_error_minimum_excl" : "Der Wert muss größer als $1 sein",
"edt_msg_error_minimum_incl" : "Der Wert muss mindestens $1 sein",
"edt_msg_error_maxLength" : "Die Eingabe darf höchstens $1 Zeichen lang sein",
"edt_msg_error_minLength" : "Die Eingabe muss mindestens $ Zeichen lang sein",
"edt_msg_error_pattern" : "Die Eingabe muss dem gegebenen Muster entsprechen",
"edt_msg_error_additionalItems" : "In diesem Feld sind keine weiteren Elemente erlaubt",
"edt_msg_error_maxItems" : "Das Feld darf höchstens $1 Element(e) beinhalten",
"edt_msg_error_minItems" : "Das Feld muss mindestens $1 Element(e) beinhalten",
"edt_msg_error_uniqueItems" : "Das Feld darf nur einzigartige Elemente beinhalten",
"edt_msg_error_maxProperties" : "Das Objekt darf höchstens $1 Attribute habe",
"edt_msg_error_minProperties" : "Das Objekt muss mindestens $1 Attribute haben",
"edt_msg_error_required" : "Das Objekt beinhaltet nicht das benötigte Attribut '$1'",
"edt_msg_error_additional_properties" : "Es sind keine weiteren Attribute erlaubt. $1 muss entfernt werden",
"edt_msg_error_dependency" : "Das Attribut $1 ist zwingend erforderlich",
"edt_msg_button_delete_all" : "Alle",
"edt_msg_button_delete_all_title" : "Alle löschen",
"edt_msg_button_delete_last" : "Letzes $1-Element",
"edt_msg_button_delete_last_title" : "Letzes $1-Element löschen",
"edt_msg_button_add_row_title" : "$1 Hinzufügen",
"edt_msg_button_move_down_title" : "Nach unten verschieben",
"edt_msg_button_move_up_title" : "Nach oben verschieben",
"edt_msg_button_delete_row_title" : "$1 Löschen",
"edt_msg_button_delete_row_title_short" : "Löschen",
"edt_msg_button_collapse" : "Einklappen",
"edt_msg_button_expand" : "Ausklappen"
}

View File

@ -0,0 +1,409 @@
{
"@metadata": {
"authors": [
"brindosch"
],
"project" : "Hyperion WebUI",
"locale": "en",
"last-updated": "2016-11-30",
"message-documentation": "qqq.json"
},
"general_country_de" : "Germany",
"general_country_us" : "United States",
"general_country_uk" : "United Kingdom",
"general_country_fr" : "France",
"general_country_es" : "Spain",
"general_country_it" : "Italy",
"general_country_nl" : "Netherlands",
"general_speech_de" : "German",
"general_speech_en" : "English",
"general_comp_SMOOTHING" : "Smoothing",
"general_comp_BLACKBORDER" : "Blackbar Detection",
"general_comp_KODICHECKER" : "Kodi Watch",
"general_comp_FORWARDER" : "JSON/PROTO Forward",
"general_comp_UDPLISTENER" : "UDP Listener",
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
"general_comp_GRABBER" : "Platform Capture",
"general_comp_V4L" : "USB Capture",
"general_button_savesettings" : "Save settings",
"dashboard_label_intro" : "The dashboard give you a quick overview about the status of Hyperion and show you the latest news of the Hyperion Blog.",
"dashboard_infobox_label_title" : "Information",
"dashboard_infobox_label_currenthyp" : "Your Hyperion version:",
"dashboard_infobox_label_latesthyp" : "Latest Hyperion version:",
"dashboard_infobox_label_leddevice" : "LED Controller:",
"dashboard_infobox_label_device" : "System:",
"dashboard_infobox_message_updatewarning" : "A newer version of Hyperion is available! (V$1)",
"dashboard_infobox_message_updatesuccess" : "You run the latest version of Hyperion.",
"dashboard_componentbox_label_title" : "Components status",
"dashboard_componentbox_label_comp" : "Component",
"dashboard_componentbox_label_status" : "Status",
"dashboard_newsbox_label_title" : "Latest Blog posts",
"dashboard_alert_message_confedit" : "Your Hyperion configuration has been modified. To apply it, restart Hyperion.",
"dashboard_alert_button_restarthyerion" : "Restart Hyperion",
"main_menu_dashboard_token" : "Dashboard",
"main_menu_configuration_token" : "Configuration",
"main_menu_leds_conf_token" : "LED Hardware",
"main_menu_grabber_conf_token" : "Capturing Hardware",
"main_menu_effect_conf_token" : "Effects",
"main_menu_colors_conf_token" : "Image Processing",
"main_menu_kodiwatch_token" : "Kodi Watch",
"main_menu_network_conf_token" : "Network Services",
"main_menu_remotecontrol_token" : "Remote Control",
"main_menu_effectsconfigurator_token" : "Effects Configurator",
"main_menu_support_token" : "Support",
"main_menu_update_token" : "Update",
"main_menu_system_token" : "System",
"main_menu_input_selection_token" : "Eingabeauswahl",
"main_menu_logging_token" : "Log",
"conf_effects_label_intro" : "Setting up a booteffect/color that is visible after Hyperion startup. Configure a background effect/color which is active, when all capture sources are disabled (also temporarily via Kodi Watch)",
"conf_leds_label_intro" : "The LED controller of youre choice is your way to output the led data via Raspberry PI GPIO, USB or network! Choose one, define your led layout and enjoy the light!",
"conf_leds_nav_label_ledcontroller" : "LED Controller",
"conf_leds_nav_label_ledlayout" : "LED Layout",
"conf_leds_nav_label_ledtesting" : "LED Testing",
"conf_leds_contr_label_contrtype" : "Controller type:",
"conf_leds_optgroup_RPiSPI" : "RPi SPI",
"conf_leds_optgroup_RPiPWM" : "RPi PWM",
"conf_leds_optgroup_RPiGPIO" : "RPi GPIO",
"conf_leds_optgroup_network" : "Network",
"conf_leds_optgroup_usb" : "USB",
"conf_leds_optgroup_debug" : "Debug",
"conf_leds_layout_frame" : "Classic Layout (LED Frame)",
"conf_leds_layout_matrix" : "Matrix Layout (LED Wall)",
"conf_leds_layout_generatedconf" : "Generated/Actual LED Configuration",
"conf_leds_layout_button_savelay" : "Save Layout",
"conf_leds_layout_button_updsim" : "Update Preview",
"conf_leds_layout_peview" : "LED Layout Preview",
"conf_leds_layout_advanced" : "Advanced Settings",
"conf_leds_layout_preview_originCL" : "Created from: Classic Layout (LED Frame)",
"conf_leds_layout_preview_originTEXT" : "Created from: Textfield",
"conf_leds_layout_preview_originMA" : "Created from: Matrix Layout(LED wall)",
"conf_leds_layout_preview_totalleds" : "Totel LEDs: $1",
"conf_leds_layout_preview_empty" : "Es wurde keine Vorschau angefordert",
"conf_leds_layout_cl_top" : "Top",
"conf_leds_layout_cl_bottom" : "Bottom",
"conf_leds_layout_cl_left" : "Left",
"conf_leds_layout_cl_right" : "Right",
"conf_leds_layout_cl_gaglength" : "Gap length",
"conf_leds_layout_cl_gappos" : "gap position",
"conf_leds_layout_cl_inppos" : "Input position",
"conf_leds_layout_cl_reversdir" : "Reverse direction",
"conf_leds_layout_cl_hleddepth" : "Horizontal LED depth",
"conf_leds_layout_cl_vleddepth" : "Vertical LED depth",
"conf_leds_layout_cl_generate" : "Generate LED configuration",
"conf_leds_layout_cl_edgegap" : "Edge Gap",
"conf_leds_layout_cl_cornergap" : "Corner Gap",
"conf_leds_layout_ma_horiz" : "Horizontal",
"conf_leds_layout_ma_vert" : "Vertical",
"conf_leds_layout_ma_cabling" : "Cabling",
"conf_leds_layout_ma_optsnake" : "Snake",
"conf_leds_layout_ma_optparallel" : "Parallel",
"conf_leds_layout_ma_order" : "Order",
"conf_leds_layout_ma_opthoriz" : "Horizontal",
"conf_leds_layout_ma_optvert" : "Vertical",
"conf_leds_layout_ma_position" : "Input",
"conf_leds_layout_ma_opttopleft" : "Top Left",
"conf_leds_layout_ma_opttopright" : "Top right",
"conf_leds_layout_ma_optbottomleft" : "Bottom left",
"conf_leds_layout_ma_optbottomright" : "Bottom right",
"conf_leds_layout_textf1" : "This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.",
"conf_leds_layout_textf2" : "Don't forget to save!",
"conf_leds_test_button_toggleleds" : "toggle leds",
"conf_leds_test_button_togglelednumber" : "toggle led numbers",
"conf_leds_test_button_toggleliveleds" : "toggle live leds",
"conf_grabber_label_intro" : "Hyperion supports two ways on how to get captured pictures for processing and output. The platform capture: internal at the device you are running Hyperion on (best qualitiy) and the USB Capture which gathers from a connected device the necessary pictures (more calibration work and configuration).",
"conf_colors_label_intro" : "Color calibration, smoothing (color transistions) and detection of blackbars.",
"conf_network_label_intro" : "All network based settings are listed here.",
"conf_kodi_label_title" : "Kodi Watch",
"conf_kodi_label_intro" : "The Kodi Watcher enables you to enable and disable the screencapture depending on Kodi state. This is not limited to the same machine, you could observe also a Kodi on any other device at your network.",
"conf_logging_label_intro" : "Area to check log messages, depending on loglevel setting you see more or less information.",
"conf_logging_btn_pbupload" : "Upload log",
"conf_logging_btn_autoscroll" : "Auto scrolling",
"remote_label_intro" : "Set an effect/color. You could also select a source manually. The Components control give the opportunity to enable/disable components of Hyprion during runtime. All changes you made here are lost after a restart.",
"remote_colors_label_coloreffect" : "Colors/Effects",
"remote_colors_button_reset" : "Reset Color/Effect",
"remote_colors_label_color" : "Color:",
"remote_effects_label_effects" : "Effect:",
"remote_input_label_sourceselection" : "Source Selection",
"remote_input_label_autoselect" : "Auto Selection",
"remote_components_label_components" : "Components control",
"remote_optgroup_usreffets" : "User Effects",
"remote_optgroup_syseffets" : "Provided Effects",
"remote_effects_intro" : "Die Effekt-Fernbedienung ermöglicht es dir Effekte zu starten für Demonstrations- oder Testzwecke. Vergessse nicht den Effekt wieder zu stoppen, wenn du fertig bist.",
"remote_components_intro" : "Die Komponenten-Fenbedienung ermöglicht es dir Komponenten von Hyperion zu starten und stoppen. Beachte: Dies ist nur temporär und geht nach einem Neustart verloren. Möchtest du dauerhaft Komponenten aktivieren/deaktivieren benutze die Konfigurationsseiten.",
"hue_button_create_user_token" : "Create User",
"hue_press_link_modal" : "Please press link button on the Hue Bridge.",
"hue_failure_connection_token" : "Connection Timeout. Please press the button in time.",
"hue_button_pair" : "Connect",
"hue_btn_setup_helper" : "Hue Bridge Setup Helper",
"hue_failure_ip_token" : "Please check your IP Address.",
"hue_label_username" : "Hue Bridge Username",
"hue_label_ip" : "Hue Bridge IP:",
"effectsconfigurator_label_intro" : "Create out of the base effects new effects that are tuned to your liking. Depending on Effect there are options like color, speed, direction and more available.",
"effectsconfigurator_label_chooseeff" : "Choose Base-Effect:",
"effectsconfigurator_button_saveeffect" : "Save Effect",
"effectsconfigurator_label_effectname" : "Effect name:",
"effectsconfigurator_button_starttest" : "Start Effecttest",
"effectsconfigurator_button_stoptest" : "Stop Effecttest",
"effectsconfigurator_button_conttest" : "Toggle continuous testing",
"effectsconfigurator_label_deleffect" : "Delete Effect::",
"effectsconfigurator_button_deleffect" : "Delete Effect",
"support_label_title" : "Support Hyperion",
"support_label_intro" : "Hyperion is a free non-profit software. A small team is working on it and this is why we need your steady support.",
"support_label_spreadtheword" : "Spread the word",
"support_label_fbtext" : "Share our Hyperion Facebook page and get a notice when new updates are released",
"support_label_twtext" : "Share and follow on Twitter, be always up to date with latest post about the Hyperion development",
"support_label_ggtext" : "Circle us on Google +!",
"support_label_yttext" : "Bored from pictures? Checkout our Youtube channel!",
"support_label_donate" : "Donate or use our affiliate links",
"support_label_affinstr1" : "Click on the appropriate link of your country",
"support_label_affinstr2" : "Everything you buy (doesnt matter what) we get a small fee based on your turnover",
"support_label_affinstr3" : "You ALWAYS pay the same price, there is absolutely no difference. Try it out!",
"support_label_btctext" : "Address:",
"support_label_donationpp" : "Donation:",
"support_label_webrestitle" : "Information and help ressources",
"support_label_webpagetitle" : "Webpage",
"support_label_webpagetext" : "Home of Hyperion",
"support_label_wikititle" : "Wiki",
"support_label_wikitext" : "The A to Z source for almost everything Hyperion related",
"support_label_forumtitle" : "Forum",
"support_label_forumtext" : "Showcases, discussions, help and more",
"update_label_intro" : "Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest",
"update_label_description" : "Description:",
"update_button_install" : "Install",
"update_button_changelog" : "Full changelog",
"update_label_type" : "Type:",
"update_versreminder" : "Your version: $1",
"info_conlost_label_title" : "Lost connection to Hyperion service!",
"info_conlost_label_reason" : "Possible reasons:",
"info_conlost_label_reason1" : "- Hyperion restarts",
"info_conlost_label_reason2" : "- You perform an update",
"info_conlost_label_reason3" : "- Hyperion isn't running",
"info_conlost_label_autorecon" : "We reconnect again after Hyperion is available.",
"info_conlost_label_autorefresh" : "This page will be automatically refreshed.",
"info_conlost_label_reload" : "If not, click me or reload the page",
"infoDialog_leds_gap_title" : "GAP LOST IN SPACE!",
"infoDialog_leds_gap_text" : "Your gap length/position is higher than your LED count, lower the gap length or gap position!",
"InfoDialog_leds_validfail_title" : "JSON Validation failed!",
"infoDialog_effconf_deleted_title" : "Effect deleted!",
"infoDialog_effconf_deleted_text" : "The effect $1 has been deleted successfully!",
"infoDialog_effconf_created_title" : "Effect created!",
"infoDialog_effconf_created_text" : "The effect $1 has been created successfully!",
"infoDialog_effconf_invalidvalue_title" : "INVALID VALUE(S)",
"infoDialog_effconf_invalidvalue_text" : "Please check for red marked input(s) and try again!",
"edt_dev_general_heading_title" : "General Settings",
"edt_dev_general_name_title" : "Configuration name",
"edt_dev_general_ledCount_title" : "Count of all hardware LEDs",
"edt_dev_general_colorOrder_title" : "RGB byte order",
"edt_dev_general_rewriteTime_title" : "Refresh time",
"edt_dev_spec_header_title" : "Specific Settings",
"edt_dev_spec_baudrate_title" : "Baudrate",
"edt_dev_spec_spipath_title" : "SPI path",
"edt_dev_spec_invert_title" : "Invert signal",
"edt_dev_spec_multicastGroup_title" : "Multicast group",
"edt_dev_spec_numberOfLeds_title" : "Number of LEDs",
"edt_dev_spec_port_title" : "Port",
"edt_dev_spec_orbIds_title" : "Orb ID(s)",
"edt_dev_spec_useOrbSmoothing_title" : "Use orb smoothing",
"edt_dev_spec_targetIp_title" : "Target IP",
"edt_dev_spec_targetIpHost_title" : "Target IP/hostname",
"edt_dev_spec_outputPath_title" : "Output path",
"edt_dev_spec_delayAfterConnect_title" : "Delay after connect",
"edt_dev_spec_FCsetConfig_title" : "Set fadecandy configuration",
"edt_dev_spec_FCmanualControl_title" : "Manual control of fadecandy LED",
"edt_dev_spec_FCledToOn_title" : "Fadecandy LED set to on",
"edt_dev_spec_interpolation_title" : "Interpolation",
"edt_dev_spec_dithering_title" : "Dithering",
"edt_dev_spec_gamma_title" : "Gamma",
"edt_dev_spec_whitepoint_title" : "Whitepoint",
"edt_dev_spec_username_title" : "Username",
"edt_dev_spec_lightid_title" : "Light ID(s)",
"edt_dev_spec_lightid_itemtitle" : "ID",
"edt_dev_spec_transistionTime_title" : "Transistion time",
"edt_dev_spec_switchOffOnBlack_title" : "Switch off on black",
"edt_dev_spec_uid_title" : "UID",
"edt_dev_spec_intervall_title" : "Intervall",
"edt_dev_spec_latchtime_title" : "Latch time",
"edt_dev_spec_maxPacket_title" : "Max packet",
"edt_dev_spec_serial_title" : "Serial number",
"edt_dev_spec_vid_title" : "VID",
"edt_dev_spec_pid_title" : "PID",
"edt_dev_spec_cid_title" : "CID",
"edt_dev_spec_LBap102Mode_title" : "LightBerry APA102 Mode",
"edt_dev_spec_universe_title" : "Universe",
"edt_dev_spec_whiteLedAlgor_title" : "White LED algorithm",
"edt_dev_spec_useRgbwProtocol_title" : "Use RGBW protocol",
"edt_dev_spec_maximumLedCount_title" : "Maximum LED count",
"edt_dev_spec_gpioNumber_title" : "GPIO number",
"edt_dev_spec_gpioMap_title" : "GPIO mapping",
"edt_dev_spec_PBFiFo_title" : "Pi-Blaster FiFo",
"edt_dev_spec_gpioBcm_title" : "GPIO Pin",
"edt_dev_spec_ledIndex_title" : "LED index",
"edt_dev_spec_colorComponent_title" : "Color component",
"edt_conf_general_enable_title" : "Activate",
"edt_conf_general_priority_title" : "Priority channel",
"edt_conf_general_port_title" : "Port",
"edt_conf_color_heading_title" : "Color Calibration",
"edt_conf_smooth_heading_title" : "Smoothing",
"edt_conf_smooth_type_title" : "Type",
"edt_conf_smooth_time_ms_title" : "Time",
"edt_conf_smooth_updateFrequency_title" : "Update frequency",
"edt_conf_smooth_updateDelay_title" : "Update delay",
"edt_conf_smooth_continuousOutput_title" : "Continuous output",
"edt_conf_v4l2_heading_title" : "USB Capture",
"edt_conf_v4l2_device_title" : "Device",
"edt_conf_v4l2_input_title" : "Input",
"edt_conf_v4l2_standard_title" : "Video standard",
"edt_conf_v4l2_width_title" : "Width",
"edt_conf_v4l2_height_title" : "Height",
"edt_conf_v4l2_frameDecimation_title" : "Frame decimation",
"edt_conf_v4l2_sizeDecimation_title" : "Size decimation",
"edt_conf_v4l2_mode_title" : "Mode",
"edt_conf_v4l2_useKodiChecker_title" : "Use Kodi Watch",
"edt_conf_v4l2_cropLeft_title" : "Crop left",
"edt_conf_v4l2_cropRight_title" : "Crop right",
"edt_conf_v4l2_cropTop_title" : "Crop top",
"edt_conf_v4l2_cropBottom_title" : "Crop bottom",
"edt_conf_v4l2_redSignalThreshold_title" : "Red signal threshold",
"edt_conf_v4l2_greenSignalThreshold_title" : "Green signal threshold",
"edt_conf_v4l2_blueSignalThreshold_title" : "Blue signal threshold",
"edt_conf_fg_heading_title" : "Platform Capture",
"edt_conf_fg_type_title" : "Type",
"edt_conf_fg_frequency_Hz_title" : "Capture frequency",
"edt_conf_fg_horizontalPixelDecimation_title" : "Horizontal pixel decimation",
"edt_conf_fg_useXGetImage_title" : "Use XGetImage",
"edt_conf_fg_verticalPixelDecimation_title" : "Vertical pixel decimation",
"edt_conf_fg_device_title" : "Device",
"edt_conf_fg_display_title" : "Display",
"edt_conf_bb_heading_title" : "Blackbar detector",
"edt_conf_bb_threshold_title" : "Threshold",
"edt_conf_bb_unknownFrameCnt_title" : "unknownFrameCnt",
"edt_conf_bb_borderFrameCnt_title" : "borderFrameCnt",
"edt_conf_bb_maxInconsistentCnt_title" : "maxInconsistentCn",
"edt_conf_bb_blurRemoveCnt_title" : "blurRemoveCnt",
"edt_conf_bb_mode_title" : "Mode",
"edt_conf_kodic_heading_title" : "Kodi Watch",
"edt_conf_kodic_kodiAddress_title" : "Kodi IP address",
"edt_conf_kodic_kodiTcpPort_title" : "Kodi TCP port",
"edt_conf_kodic_grabVideo_title" : "Video",
"edt_conf_kodic_grabPictures_title" : "Pictures",
"edt_conf_kodic_grabAudio_title" : "Audio",
"edt_conf_kodic_grabMenu_title" : "Menu",
"edt_conf_kodic_grabPause_title" : "Pause",
"edt_conf_kodic_grabScreensaver_title" : "Screensaver",
"edt_conf_kodic_enable3DDetection_title" : "Detect 3D",
"edt_conf_fw_heading_title" : "Forwarder",
"edt_conf_fw_json_title" : "List of JSON clients",
"edt_conf_fw_json_itemtitle" : "JSON target",
"edt_conf_fw_proto_title" : "List of PROTO clients",
"edt_conf_fw_proto_itemtitle" : "PROTO target",
"edt_conf_js_heading_title" : "JSON Server",
"edt_conf_ps_heading_title" : "PROTO Server",
"edt_conf_bobls_heading_title" : "Boblight Server",
"edt_conf_udpl_heading_title" : "UDP Listener",
"edt_conf_udpl_address_title" : "Address",
"edt_conf_udpl_timeout_title" : "Timeout",
"edt_conf_udpl_shared_title" : "Shared",
"edt_conf_webc_heading_title" : "Web Configuration",
"edt_conf_webc_docroot_title" : "Document Root",
"edt_conf_effp_paths_title" : "Effect Path(s)",
"edt_conf_effp_paths_itemtitle" : "Path",
"edt_conf_effp_disable_title" : "Disabed Effects",
"edt_conf_effp_disable_itemtitle" : "Effect",
"edt_conf_log_heading_title" : "Logging",
"edt_conf_log_level_title" : "Log-Level",
"edt_eff_police_header_title" : "Police",
"edt_eff_fade_header_title" : "Fade",
"edt_eff_rainbowmood_header_title" : "Rainbow Mood",
"edt_eff_knightrider_header_title" : "Knight Rider",
"edt_eff_lightclock_header_title" : "Light Clock",
"edt_eff_moodblobs_header_title" : "Mood Blobs",
"edt_eff_rainbowswirl_header_title" : "Rainbow Swirl",
"edt_eff_random_header_title" : "Random",
"edt_eff_runningdots_header_title" : "Running Dots",
"edt_eff_systemshutdown_header_title" : "System Shutdown",
"edt_eff_snake_header_title" : "Snake",
"edt_eff_sparks_header_title" : "Sparks",
"edt_eff_storbe_header_title" : "Strobe",
"edt_eff_traces_header_title" : "Color Traces",
"edt_eff_x-mas_header_title" : "X-Mas",
"edt_eff_color_title" : "Color",
"edt_eff_colorrandom_title" : "Random color",
"edt_eff_colorone_title" : "Color one",
"edt_eff_colortwo_title" : "Color two",
"edt_eff_colorcount_title" : "Color length",
"edt_eff_rotationtime_title" : "Rotation time",
"edt_eff_sleeptime_title" : "Sleep time",
"edt_eff_reversedirection_title" : "Reverse direction",
"edt_eff_fadetime_title" : "Fade time",
"edt_eff_colorstart_title" : "Color start",
"edt_eff_colorend_title" : "Color end",
"edt_eff_speed_title" : "Speed",
"edt_eff_fadefactor_title" : "Fade factor",
"edt_eff_showseconds_title" : "Show seconds",
"edt_eff_blobcount_title" : "Blob count",
"edt_eff_huechange_title" : "Color change",
"edt_eff_basecolorchange_title" : "Base color change",
"edt_eff_basecolorchangerate_title" : "BC change rate",
"edt_eff_basecolorrangeleft_title" : "BC range left",
"edt_eff_basecolorrangeright_title" : "BC range right",
"edt_eff_brightness_title" : "Brightness",
"edt_eff_centerx_title" : "Center X-Axis",
"edt_eff_centery_title" : "Center Y-Axis",
"edt_eff_saturation_title" : "Saturation",
"edt_eff_colorevel_title" : "Color level",
"edt_eff_whitelevel_title" : "White level",
"edt_eff_alarmcolor_title" : "Alarm color",
"edt_eff_postcolor_title" : "Post color",
"edt_eff_enableshutdown_title" : "Real shutdown",
"edt_eff_length_title" : "Length",
"edt_eff_frequency_title" : "Frequency",
"edt_append_ns" : "ns",
"edt_append_ms" : "ms",
"edt_append_s" : "s",
"edt_append_hz" : "Hz",
"edt_append_pixel" : "Pixel",
"edt_append_percent" : "%",
"edt_append_degree" : "°",
"edt_append_sdegree" : "s/degree",
"edt_append_leds" : "LEDs",
"edt_msg_error_notset" : "Property must be set",
"edt_msg_error_notempty" : "Value required",
"edt_msg_error_enum" : "Value must be one of the enumerated values",
"edt_msg_error_anyOf" : "Value must validate against at least one of the provided schemas",
"edt_msg_error_oneOf" : "Value must validate against exactly one of the provided schemas. It currently validates against $1 of the schemas.",
"edt_msg_error_not" : "Value must not validate against the provided schema",
"edt_msg_error_type_union" : "Value must be one of the provided types",
"edt_msg_error_type" : "Value must be of type $1",
"edt_msg_error_disallow_union" : "Value must not be one of the provided disallowed types",
"edt_msg_error_disallow" : "Value must not be of type $1",
"edt_msg_error_multipleOf" : "Value must be a multiple of $1",
"edt_msg_error_maximum_excl" : "Value must be less than $1",
"edt_msg_error_maximum_incl" : "Value must be at most $1",
"edt_msg_error_minimum_excl" : "Value must be greater than $1",
"edt_msg_error_minimum_incl" : "Value must be at least $1",
"edt_msg_error_maxLength" : "Value must be at most $1 characters long",
"edt_msg_error_minLength" : "Value must be at least $1 characters long",
"edt_msg_error_pattern" : "Value must match the pattern",
"edt_msg_error_additionalItems" : "No additional items allowed in this array",
"edt_msg_error_maxItems" : "Value must have at most $1 items",
"edt_msg_error_minItems" : "Value must have at least $1 items",
"edt_msg_error_uniqueItems" : "Array must have unique items",
"edt_msg_error_maxProperties" : "Object must have at most $1 properties",
"edt_msg_error_minProperties" : "Object must have at least $1 properties",
"edt_msg_error_required" : "Object is missing the required property '$1'",
"edt_msg_error_additional_properties" : "No additional properties allowed, but property $1 is set",
"edt_msg_error_dependency" : "Must have property $1",
"edt_msg_button_delete_all" : "All",
"edt_msg_button_delete_all_title" : "Delete All",
"edt_msg_button_delete_last" : "Last $1",
"edt_msg_button_delete_last_title" : "Delete Last $1",
"edt_msg_button_add_row_title" : "Add $1",
"edt_msg_button_move_down_title" : "Move down",
"edt_msg_button_move_up_title" : "Move up",
"edt_msg_button_delete_row_title" : "Delete $1",
"edt_msg_button_delete_row_title_short" : "Delete",
"edt_msg_button_collapse" : "Collapse",
"edt_msg_button_expand" : "Expand"
}

View File

@ -0,0 +1,47 @@
{
"@metadata": {
"authors": [
"brindosch"
],
"project" : "Hyperion WebUI string docu",
"last-updated": "2016-11-30"
},
"edt_msg_error_notset" : " When a property is not set",
"edt_msg_error_notempty" : "When a string must not be empty",
"edt_msg_error_enum" : "When a value is not one of the enumerated values",
"edt_msg_error_anyOf" : "When a value doesn't validate any schema of a 'anyOf' combination",
"edt_msg_error_oneOf" : "When a value doesn't validate. $1 = This key takes one variable: The number of schemas the value does not validate",
"edt_msg_error_not" : "When a value does not validate a 'not' schema",
"edt_msg_error_type_union" : "When a value does not match any of the provided types",
"edt_msg_error_type" : "When a value does not match the given type. $1 = This key takes one variable: The type the value should be of",
"edt_msg_error_disallow_union" : "When the value validates one of the disallowed types",
"edt_msg_error_disallow" : "When the value validates a disallowed type. $1 = This key takes one variable: The type the value should not be of",
"edt_msg_error_multipleOf" : "When a value is not a multiple of or divisible by a given number. $1 = This key takes one variable: The number mentioned above",
"edt_msg_error_maximum_excl" : "When a value is greater than it's supposed to be (exclusive). $1 = This key takes one variable: The maximum",
"edt_msg_error_maximum_incl" : "When a value is greater than it's supposed to be (inclusive). $1 = This key takes one variable: The maximum",
"edt_msg_error_minimum_excl" : "When a value is lesser than it's supposed to be (exclusive). $1 = This key takes one variable: The minimum",
"edt_msg_error_minimum_incl" : "When a value is lesser than it's supposed to be (inclusive). $1 = This key takes one variable: The minimum",
"edt_msg_error_maxLength" : "When a value have too many characters. $1 = This key takes one variable: The maximum character count",
"edt_msg_error_minLength" : "When a value does not have enough characters. $1 = This key takes one variable: The minimum character count",
"edt_msg_error_pattern" : "When a value does not match a given pattern.",
"edt_msg_error_additionalItems" : "When an array has additional items whereas it is not supposed to",
"edt_msg_error_maxItems" : "When there are to many items in an array. $1 = This key takes one variable: The maximum item count",
"edt_msg_error_minItems" : "When there are not enough items in an array. $1 = This key takes one variable: The minimum item count",
"edt_msg_error_uniqueItems" : "When an array is supposed to have unique items but has duplicates",
"edt_msg_error_maxProperties" : "When there are too many properties in an object. $1 = This key takes one variable: The maximum property count",
"edt_msg_error_minProperties" : " When there are not enough properties in an object. $1 = This key takes one variable: The minimum property count",
"edt_msg_error_required" : "When a required property is not defined. $1 = This key takes one variable: The name of the missing property",
"edt_msg_error_additional_properties" : "When there is an additional property is set whereas there should be none. $1 = This key takes one variable: The name of the additional property",
"edt_msg_error_dependency" : "When a dependency is not resolved. $1 = This key takes one variable: The name of the missing property for the dependency",
"edt_msg_button_delete_all" : "Text on Delete All buttons",
"edt_msg_button_delete_all_title" : "Title on Delete All buttons",
"edt_msg_button_delete_last" : "Text on Delete Last buttons. $1 = This key takes one variable: The title of object to delete",
"edt_msg_button_delete_last_title" : "Text on Delete Last buttons. $1 = This key takes one variable: The title of object to delete",
"edt_msg_button_add_row_title" : "Title on Add Row buttons. $1 = This key takes one variable: The title of object to add",
"edt_msg_button_move_down_title" : "Title on Move Down buttons",
"edt_msg_button_move_up_title" : "Title on Move Up buttons",
"edt_msg_button_delete_row_titlet" : "Title on Delete Row buttons. $1 = This key takes one variable: The title of object to delete",
"edt_msg_button_delete_row_title_short" : "Title on Delete Row buttons, short version (no parameter with the object title)",
"edt_msg_button_collapse" : "Title on Collapse buttons",
"edt_msg_button_expand" : "Title on Expand buttons"
}

View File

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html >
<head> <head>
@ -29,30 +29,18 @@
<script src="js/lib/jsoneditor.js"></script> <script src="js/lib/jsoneditor.js"></script>
<!--Language Support --> <!--Language Support -->
<script src="js/lib/jquery-lang.js" charset="utf-8" type="text/javascript"></script> <script src="js/lib/jquery.i18n.js"></script>
<script src="js/lib/js.cookie.js"></script> <script src="js/lib/jquery.i18n.messagestore.js"></script>
<script src="js/lib/jquery.i18n.fallbacks.js"></script>
<script src="js/lib/jquery.i18n.parser.js"></script>
<script src="js/lib/jquery.i18n.emitter.js"></script>
<script src="js/lib/jquery.i18n.language.js"></script>
<!-- jquery ui --> <!-- jquery ui -->
<link href="css/jquery-ui/jquery-ui.min.css" rel="stylesheet"> <link href="css/jquery-ui/jquery-ui.min.css" rel="stylesheet">
<link href="css/jquery-ui/jquery-ui.structure.min.css" rel="stylesheet"> <link href="css/jquery-ui/jquery-ui.structure.min.css" rel="stylesheet">
<link href="css/jquery-ui/jquery-ui.theme.min.css" rel="stylesheet"> <link href="css/jquery-ui/jquery-ui.theme.min.css" rel="stylesheet">
<script type="text/javascript">
// Create language switcher instance
var lang = new Lang();
lang.dynamic('de', 'lang/de.json');
lang.init({
defaultLang: 'en',
cookie: {
name: 'langCookie',
expiry: 365,
path: '/'
},
allowCookieOverride: true
});
</script>
<!-- Bootstrap Core CSS --> <!-- Bootstrap Core CSS -->
<link href="css/bootstrap.css" rel="stylesheet"> <link href="css/bootstrap.css" rel="stylesheet">
@ -100,21 +88,6 @@
<!-- /.navbar-header --> <!-- /.navbar-header -->
<ul class="nav navbar-top-links navbar-right"> <ul class="nav navbar-top-links navbar-right">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-globe fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-language">
<li>
<a href="#lang-en" onclick="window.lang.change('en'); return false;"><span lang="en" class="flag-icon flag-icon-gb" data-lang-token="general_speech_en">&emsp; English</span></a>
</li>
<li class="divider"></li>
<li>
<a href="#lang-de" onclick="window.lang.change('de'); return false;"><span lang="en" class="flag-icon flag-icon-de" data-lang-token="general_speech_de">&emsp; German</span></a>
</li>
</ul>
<!-- /.dropdown-language -->
</li>
<!-- /.dropdown --> <!-- /.dropdown -->
<li class="dropdown"> <li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">
@ -198,26 +171,26 @@
<div id="main-nav" class="navbar-default sidebar" role="navigation"> <div id="main-nav" class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse"> <div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu"> <ul class="nav" id="side-menu">
<li> <a class="active" id="load_dashboard"><i class="fa fa-dashboard fa-fw"></i><span lang="en" data-lang-token="main_menu_dashboard_token">Dashboard</span></a> </li> <li> <a class="active" id="load_dashboard"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></a> </li>
<li> <li>
<a class="inactive"><i class="fa fa-cog fa-fw"></i><span lang="en" data-lang-token="main_menu_configuration_token">Configuration</span><span class="fa arrow"></span></a> <a class="inactive"><i class="fa fa-cog fa-fw"></i><span data-i18n="main_menu_configuration_token">Configuration</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
<li> <a class="inactive" id="load_confLeds"><i class="fa fa-lightbulb-o fa-fw"></i><span lang="en" data-lang-token="main_menu_leds_conf_token">LED Hardware</span></a> </li> <li> <a class="inactive" id="load_confLeds"><i class="fa fa-lightbulb-o fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></a> </li>
<li> <a class="inactive" id="load_confGrabber"><i class="fa fa-camera fa-fw"></i><span lang="en" data-lang-token="main_menu_grabber_conf_token">Capturing Hardware</span></a> </li> <li> <a class="inactive" id="load_confGrabber"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></a> </li>
<li> <a class="inactive" id="load_confEffects"><i class="fa fa-spinner fa-fw"></i><span lang="en" data-lang-token="main_menu_effect_conf_token">Effects</span></a> </li> <li> <a class="inactive" id="load_confEffects"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></a> </li>
<li> <a class="inactive" id="load_confColors"><i class="fa fa-photo fa-fw"></i><span lang="en" data-lang-token="main_menu_colors_conf_token">Image Processing</span></a> </li> <li> <a class="inactive" id="load_confColors"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></a> </li>
<li> <a class="inactive" id="load_confKodi"><i class="fa fa-play-circle-o fa-fw"></i><span lang="en" data-lang-token="main_menu_kodiwatch_token">KODI Connector</span></a> </li> <li> <a class="inactive" id="load_confKodi"><i class="fa fa-play-circle-o fa-fw"></i><span data-i18n="main_menu_kodiwatch_token">Kodi Watch</span></a> </li>
<li> <a class="inactive" id="load_confNetwork"><i class="fa fa-sitemap fa-fw"></i><span lang="en" data-lang-token="main_menu_network_conf_token">Network</span></a> </li> <li> <a class="inactive" id="load_confNetwork"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network</span></a> </li>
</ul> </ul>
</li> </li>
<li> <a class="inactive" id="load_remote"><i class="fa fa-wifi fa-fw"></i><span lang="en" data-lang-token="main_menu_remotecontrol_token">Remote Control</span></a> </li> <li> <a class="inactive" id="load_remote"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></a> </li>
<li> <a class="inactive" id="load_effectsconfig"><i class="fa fa-cogs fa-fw"></i><span lang="en" data-lang-token="main_menu_effectsconfigurator_token">Effects Configurator</span></a> </li> <li> <a class="inactive" id="load_effectsconfig"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></a> </li>
<li> <a class="inactive" id="load_support"><i class="fa fa-info fa-fw"></i><span lang="en" data-lang-token="main_menu_support_token">Support</span></a> </li> <li> <a class="inactive" id="load_support"><i class="fa fa-info fa-fw"></i><span data-i18n="main_menu_support_token">Support</span></a> </li>
<li> <li>
<a class="inactive"><i class="fa fa-industry fa-fw"></i><span lang="en" data-lang-token="main_menu_system_token">System</span><span class="fa arrow"></span></a> <a class="inactive"><i class="fa fa-industry fa-fw"></i><span data-i18n="main_menu_system_token">System</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
<li> <a class="inactive" id="load_logging"><i class="fa fa-download fa-fw"></i><span lang="en" data-lang-token="main_menu_logging_token">Events</span></a> </li> <li> <a class="inactive" id="load_logging"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></a> </li>
<li> <a class="inactive" id="load_update"><i class="fa fa-download fa-fw"></i><span lang="en" data-lang-token="main_menu_update_token">Update</span></a> </li> <li> <a class="inactive" id="load_update"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></a> </li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -231,8 +204,8 @@
<div id="page-wrapper" style="padding-top:10px"> <div id="page-wrapper" style="padding-top:10px">
<div id="hyperion_reload_notify" class="alert alert-warning" style="display:none;padding:10px;margin:0"> <div id="hyperion_reload_notify" class="alert alert-warning" style="display:none;padding:10px;margin:0">
<div class="panel-danger" style="text-align:right"> <div class="panel-danger" style="text-align:right">
<div style="float:left;line-height:33px;" lang="en" data-lang-token="dashboard_alert_message_confedit">Your Hyperion configuration has been modified. To apply it, restart Hyperion.</div> <div style="float:left;line-height:33px;" data-i18n="dashboard_alert_message_confedit">Your Hyperion configuration has been modified. To apply it, restart Hyperion.</div>
<button id="btn_hyperion_reload" class="btn btn-danger" lang="en" data-lang-token="dashboard_alert_button_restarthyerion">Restart Hyperion</button> <button id="btn_hyperion_reload" class="btn btn-danger" data-i18n="dashboard_alert_button_restarthyerion">Restart Hyperion</button>
</div> </div>
</div> </div>
@ -274,6 +247,7 @@
<script src="/js/lib/jquery-ui.min.js"></script> <script src="/js/lib/jquery-ui.min.js"></script>
<script src="/js/content_index.js"></script> <script src="/js/content_index.js"></script>
</body> </body>
</html> </html>

View File

@ -15,6 +15,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$(document).ready( function() { $(document).ready( function() {
performTranslation();
requestServerConfigSchema(); requestServerConfigSchema();
}); });

View File

@ -12,6 +12,6 @@ $(hyperion).one("cmd-config-getschema", function(event) {
}); });
$(document).ready( function() { $(document).ready( function() {
performTranslation();
requestServerConfigSchema(); requestServerConfigSchema();
//$("[type='checkbox']").bootstrapSwitch();
}); });

View File

@ -1,8 +1,13 @@
JSONEditor.defaults.editors.colorPicker = JSONEditor.defaults.editors.string.extend({ JSONEditor.defaults.editors.colorPicker = JSONEditor.defaults.editors.string.extend({
getValue: function() { getValue: function() {
if ($(this.input).data("colorpicker") !== undefined) {
var color = $(this.input).data('colorpicker').color.toRGB(); var color = $(this.input).data('colorpicker').color.toRGB();
return [color.r,color.g, color.b]; return [color.r,color.g, color.b];
}
else {
return [0,0,0];
}
}, },
setValue: function(val) { setValue: function(val) {
@ -66,6 +71,7 @@
} }
$("#effectsdellist").html(EffectHtml); $("#effectsdellist").html(EffectHtml);
oldDelList = newDelList; oldDelList = newDelList;
$('#effectsdellist').trigger('change');
} }
} }
@ -74,7 +80,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
EffectsHtml = ""; EffectsHtml = "";
for(var idx=0; idx<effects.length; idx++) for(var idx=0; idx<effects.length; idx++)
{ {
EffectsHtml += '<option value="'+effects[idx].schemaContent.script+'">'+effects[idx].schemaContent.title+'</option>'; EffectsHtml += '<option value="'+effects[idx].schemaContent.script+'">'+$.i18n(effects[idx].schemaContent.title)+'</option>';
} }
$("#effectslist").html(EffectsHtml); $("#effectslist").html(EffectsHtml);
$("#effectslist").trigger("change"); $("#effectslist").trigger("change");
@ -83,26 +89,10 @@ $(hyperion).one("cmd-config-getschema", function(event) {
function validateEditor() { function validateEditor() {
if(effects_editor.validate().length) if(effects_editor.validate().length)
{ {
showInfoDialog('error','INVALID VALUES','Please check for red marked inputs and try again.'); showInfoDialog('error', $.i18n('infoDialog_effconf_invalidvalue_title'), $.i18n('infoDialog_effconf_invalidvalue_text'));
return false; return false;
} }
else
{
return true; return true;
}
};
function validateName() {
effectName = $('#name-input').val();
if (effectName == "")
{
showInfoDialog('error','INVALID NAME FIELD','Effect name is empty! Please fill in a name and try again.');
return false;
}
else
{
return true;
}
}; };
function triggerTestEffect() { function triggerTestEffect() {
@ -123,25 +113,37 @@ $(hyperion).one("cmd-config-getschema", function(event) {
effectPy = ':'; effectPy = ':';
effectPy += effects[idx].schemaContent.script; effectPy += effects[idx].schemaContent.script;
} }
$("#name-input").trigger("change");
} }
effects_editor.on('change',function() { effects_editor.on('change',function() {
if ($("#btn_cont_test").hasClass("btn-success") && validateName() && validateEditor()) if ($("#btn_cont_test").hasClass("btn-success") && validateEditor())
{ {
triggerTestEffect(); triggerTestEffect();
} }
}); });
}); });
$("#name-input").on('change keydown click', function(event) {
effectName = $(this).val();
if ($(this).val() == '') {
effects_editor.disable();
$("#eff_footer").children().attr('disabled',true);
} else {
effects_editor.enable();
$("#eff_footer").children().attr('disabled',false);
}
});
$('#btn_write').off().on('click',function() { $('#btn_write').off().on('click',function() {
if(validateEditor() && validateName()) if(validateEditor())
{ {
requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue())); requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue()));
showInfoDialog('success','SUCCESS!','Your effect "'+effectName+'" has been created successfully!'); showInfoDialog('success', $.i18n('infoDialog_effconf_created_title'), $.i18n('infoDialog_effconf_created_text', effectName));
} }
}); });
$('#btn_start_test').off().on('click',function() { $('#btn_start_test').off().on('click',function() {
if(validateEditor() && validateName()) if(validateEditor())
{ {
triggerTestEffect(); triggerTestEffect();
} }
@ -158,10 +160,19 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$('#btn_delete').off().on('click',function() { $('#btn_delete').off().on('click',function() {
var name = $("#effectsdellist").val(); var name = $("#effectsdellist").val();
requestDeleteEffect(name); requestDeleteEffect(name);
showInfoDialog('success','Effect deleted!', 'The effect "'+name+'" has been deleted successfully!'); showInfoDialog('success', $.i18n('infoDialog_effconf_deleted_title'), $.i18n('infoDialog_effconf_deleted_text', name));
});
$('#effectsdellist').off().on('change', function(){
if ($(this).val() == null) {
$('#btn_delete').prop('disabled',true);
} else {
$('#btn_delete').prop('disabled',false);
}
}); });
$(document).ready( function() { $(document).ready( function() {
performTranslation();
requestServerConfigSchema(); requestServerConfigSchema();
$(hyperion).on("cmd-serverinfo",updateDelEffectlist); $(hyperion).on("cmd-serverinfo",updateDelEffectlist);
}); });

View File

@ -16,6 +16,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$(document).ready( function() { $(document).ready( function() {
performTranslation();
requestServerConfigSchema(); requestServerConfigSchema();
}); });

View File

@ -17,6 +17,12 @@ $(document).ready( function() {
bindNavToContent("#load_effectsconfig","effects_configurator",false); bindNavToContent("#load_effectsconfig","effects_configurator",false);
bindNavToContent("#load_logging","logging",false); bindNavToContent("#load_logging","logging",false);
//$.i18n.debug = true;
$.i18n().load({ de: 'i18n/de.json', en:'i18n/en.json'}).done(
function() {
performTranslation();
});
$(hyperion).on("cmd-serverinfo",function(event){ $(hyperion).on("cmd-serverinfo",function(event){
parsedServerInfoJSON = event.response; parsedServerInfoJSON = event.response;
currentVersion = parsedServerInfoJSON.info.hyperion[0].version; currentVersion = parsedServerInfoJSON.info.hyperion[0].version;
@ -48,7 +54,7 @@ $(document).ready( function() {
components_html = ""; components_html = "";
for ( idx=0; idx<components.length;idx++) for ( idx=0; idx<components.length;idx++)
{ {
components_html += '<tr><td lang="en" data-lang-token="general_comp_'+components[idx].name+'">'+(components[idx].title)+'</td><td><i class="fa fa-circle component-'+(components[idx].enabled?"on":"off")+'"></i></td></tr>'; components_html += '<tr><td>'+$.i18n('general_comp_'+components[idx].name)+'</td><td><i class="fa fa-circle component-'+(components[idx].enabled?"on":"off")+'"></i></td></tr>';
} }
$("#tab_components").html(components_html); $("#tab_components").html(components_html);
@ -62,11 +68,11 @@ $(document).ready( function() {
if ( cleanCurrentVersion < cleanLatestVersion ) if ( cleanCurrentVersion < cleanLatestVersion )
{ {
$('#versioninforesult').html('<div lang="en" data-lang-token="dashboard_infobox_message_updatewarning" style="margin:0px;" class="alert alert-warning">A newer version of Hyperion is available!</div>'); $('#versioninforesult').html('<div style="margin:0px;" class="alert alert-warning">'+$.i18n('dashboard_infobox_message_updatewarning', latestVersion)+'</div>');
} }
else else
{ {
$('#versioninforesult').html('<div lang="en" data-lang-token="dashboard_infobox_message_updatesuccess" style="margin:0px;" class="alert alert-success">You run the latest version of Hyperion.</div>'); $('#versioninforesult').html('<div style="margin:0px;" class="alert alert-success">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
} }
}); });
} }

View File

@ -15,6 +15,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$(document).ready( function() { $(document).ready( function() {
performTranslation();
requestServerConfigSchema(); requestServerConfigSchema();
}); });

View File

@ -21,7 +21,7 @@ function validateText(){
e = isJsonString($("#ledconfig").val()); e = isJsonString($("#ledconfig").val());
if (e.length != 0){ if (e.length != 0){
showInfoDialog("error", "Validation failed!", e); showInfoDialog("error", $.i18n('InfoDialog_leds_validfail_title'), e);
return false return false
} }
return true return true
@ -37,19 +37,19 @@ function round(number) {
function createLedPreview(leds, origin){ function createLedPreview(leds, origin){
if (origin == "classic"){ if (origin == "classic"){
$('#previewcreator').html('<h5 lang="en" data-lang-token="conf_leds_layout_preview_originCL">Created from: Classic Layout (LED Frame)</h5>'); $('#previewcreator').html('<h5>'+$.i18n('conf_leds_layout_preview_originCL')+'</h5>');
$('#leds_preview').css("padding-top", "56.25%"); $('#leds_preview').css("padding-top", "56.25%");
} }
else if(origin == "text"){ else if(origin == "text"){
$('#previewcreator').html('<h5 lang="en" data-lang-token="conf_leds_layout_preview_originTEXT">Created from: Textfield</h5>'); $('#previewcreator').html('<h5>'+$.i18n('conf_leds_layout_preview_originTEXT')+'</h5>');
$('#leds_preview').css("padding-top", "56.25%"); $('#leds_preview').css("padding-top", "56.25%");
} }
else if(origin == "matrix"){ else if(origin == "matrix"){
$('#previewcreator').html('<h5 lang="en" data-lang-token="conf_leds_layout_preview_originMA">Created from: Matrix Layout(LED wall)</h5>'); $('#previewcreator').html('<h5>'+$.i18n('conf_leds_layout_preview_originMA')+'</h5>');
$('#leds_preview').css("padding-top", "100%"); $('#leds_preview').css("padding-top", "100%");
} }
$('#previewledcount').html('<h5>Total LED count: '+leds.length+'</h5>'); $('#previewledcount').html('<h5>'+$.i18n('conf_leds_layout_preview_totalleds', leds.length)+'</h5>');
$('.st_helper').css("border", "8px solid grey"); $('.st_helper').css("border", "8px solid grey");
@ -75,6 +75,7 @@ function createLedPreview(leds, origin){
if($('#leds_prev_toggle_num').hasClass('btn-success')) if($('#leds_prev_toggle_num').hasClass('btn-success'))
$('.led_prev_num').css("display", "inline"); $('.led_prev_num').css("display", "inline");
} }
function createClassicLeds(){ function createClassicLeds(){
@ -136,7 +137,7 @@ function createClassicLeds(){
function validateGap(){ function validateGap(){
if (ledsGPos+ledsGlength > ledArray.length){ if (ledsGPos+ledsGlength > ledArray.length){
showInfoDialog('error','GAP LOST IN SPACE!','You moved the gap out of your TV frame, lower the gap length or position and try again!'); showInfoDialog('error', $.i18n('infoDialog_leds_gap_title'), $.i18n('infoDialog_leds_gap_text'));
return false return false
} }
return true return true
@ -315,6 +316,7 @@ function createMatrixLeds(){
} }
$(document).ready(function() { $(document).ready(function() {
performTranslation();
//------------------------------------------------------------------- //-------------------------------------------------------------------
$('.ledCLconstr').bind("change", function() { $('.ledCLconstr').bind("change", function() {
createClassicLeds(); createClassicLeds();
@ -373,8 +375,8 @@ $(document).ready(function() {
devRPiSPI = ['apa102', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'ws2812spi']; devRPiSPI = ['apa102', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'ws2812spi'];
devRPiPWM = ['ws281x']; devRPiPWM = ['ws281x'];
devRPiGPIO = ['piblaster']; devRPiGPIO = ['piblaster'];
devNET = ['atmoorb', 'dmx', 'fadecandy', 'philipshue', 'tinkerforge', 'tpm2net', 'udpe131', 'udph801', 'udpraw']; devNET = ['atmoorb', 'fadecandy', 'philipshue', 'tinkerforge', 'tpm2net', 'udpe131', 'udph801', 'udpraw'];
devUSB = ['adalight', 'adalightapa102', 'atmo', 'hyperionusbasp', 'lightpack', 'multilightpack', 'paintpack', 'rawhid', 'sedu', 'tpm2']; devUSB = ['adalight', 'dmx', 'atmo', 'hyperionusbasp', 'lightpack', 'multilightpack', 'paintpack', 'rawhid', 'sedu', 'tpm2'];
var optArr = [[]]; var optArr = [[]];
optArr[1]=[]; optArr[1]=[];
@ -399,12 +401,12 @@ $(document).ready(function() {
optArr[5].push(ledDevices[idx]); optArr[5].push(ledDevices[idx]);
} }
$("#leddevices").append(createSel(optArr[0], "RPi SPI")); $("#leddevices").append(createSel(optArr[0], $.i18n('conf_leds_optgroup_RPiSPI')));
$("#leddevices").append(createSel(optArr[1], "RPi PWM")); $("#leddevices").append(createSel(optArr[1], $.i18n('conf_leds_optgroup_RPiPWM')));
$("#leddevices").append(createSel(optArr[2], "RPi GPIO")); $("#leddevices").append(createSel(optArr[2], $.i18n('conf_leds_optgroup_RPiGPIO')));
$("#leddevices").append(createSel(optArr[3], "Network")); $("#leddevices").append(createSel(optArr[3], $.i18n('conf_leds_optgroup_network')));
$("#leddevices").append(createSel(optArr[4], "USB")); $("#leddevices").append(createSel(optArr[4], $.i18n('conf_leds_optgroup_usb')));
$("#leddevices").append(createSel(optArr[5], "Debug")); $("#leddevices").append(createSel(optArr[5], $.i18n('conf_leds_optgroup_debug')));
$("#leddevices").val(server.info.ledDevices.active); $("#leddevices").val(server.info.ledDevices.active);
$("#leddevices").trigger("change"); $("#leddevices").trigger("change");

View File

@ -1,6 +1,26 @@
var conf_editor = null;
$(document).ready(function() { $(document).ready(function() {
performTranslation();
requestLoggingStart(); requestLoggingStart();
schema = parsedConfSchemaJSON.properties;
conf_editor = createJsonEditor('editor_container', {
logger : schema.logger
}, true);
$('#editor_container h3').remove();
$('#btn_submit').off().on('click',function() {
requestWriteConfig(conf_editor.getValue());
});
$('#btn_autoscroll').off().on('click',function() {
toggleClass('#btn_autoscroll', "btn-success", "btn-danger");
});
if (!loggingHandlerInstalled) if (!loggingHandlerInstalled)
{ {
loggingHandlerInstalled = true; loggingHandlerInstalled = true;
@ -15,9 +35,14 @@ $(document).ready(function() {
for(var idx=0; idx<messages.length; idx++) for(var idx=0; idx<messages.length; idx++)
{ {
msg = messages[idx]; msg = messages[idx];
$("#logmessages").html($("#logmessages").html()+"\n"+msg); $("#logmessages").html($("#logmessages").html()+"\n <code>"+msg+"</code>");
} }
if($("#btn_autoscroll").hasClass('btn-success')){
$('#logmessages').stop().animate({
scrollTop: $('#logmessages')[0].scrollHeight
}, 800);
}
} }
}); });
} }

View File

@ -17,6 +17,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$(document).ready( function() { $(document).ready( function() {
performTranslation();
requestServerConfigSchema(); requestServerConfigSchema();
}); });

View File

@ -14,7 +14,7 @@
data += '<button id="srcBtn'+i+'" type="button" class="btn btn-lg btn-'+btn_type+' btn_input_selection" style="margin:10px;min-width:200px" onclick="requestSetSource('+priority+');">'+owner+'<span style="font-size:70% !important;"> ('+priority+')</span></button><br/>'; data += '<button id="srcBtn'+i+'" type="button" class="btn btn-lg btn-'+btn_type+' btn_input_selection" style="margin:10px;min-width:200px" onclick="requestSetSource('+priority+');">'+owner+'<span style="font-size:70% !important;"> ('+priority+')</span></button><br/>';
} }
data += '<button id="srcBtn'+i+'" type="button" class="btn btn-lg btn-info btn_input_selection" style="margin:10px;min-width:200px" onclick="requestSetSource(\'auto\');" lang="en" data-lang-token="remote_input_label_autoselect">auto selection</button><br/>'; data += '<button id="srcBtn'+i+'" type="button" class="btn btn-lg btn-info btn_input_selection" style="margin:10px;min-width:200px" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+'</button><br/>';
$('#hyperion_inputs').html(data); $('#hyperion_inputs').html(data);
var max_width=200; var max_width=200;
@ -49,7 +49,7 @@
{ {
d='<p><button type="button" id="'+comp_btn_id+'" class="btn '+enable_style d='<p><button type="button" id="'+comp_btn_id+'" class="btn '+enable_style
+'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled) +'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> <span lang="en" data-lang-token="general_comp_'+components[idx].name+'"> '+components[idx].title+'</span></p>'; +')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</p>';
$('#componentsbutton').append(d); $('#componentsbutton').append(d);
} }
else // already create, update state else // already create, update state
@ -82,13 +82,14 @@
sysEffArr.push(effectName); sysEffArr.push(effectName);
} }
} }
$('#effect_select').append(createSel(usrEffArr, "User Effects")); $('#effect_select').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets')));
$('#effect_select').append(createSel(sysEffArr, "Provided Effects")); $('#effect_select').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets')));
oldEffects = newEffects; oldEffects = newEffects;
} }
} }
$(document).ready(function() { $(document).ready(function() {
performTranslation();
// color // color
$(function() { $(function() {
$('#cp2').colorpicker({ $('#cp2').colorpicker({

View File

@ -1,26 +1,4 @@
/**
* Enables translation for the form
* with the ID given in "formID"
* Generates token with the given token prefix
* and an underscore followed by the input id
* Example: input id = input_one
* token prefix = tokenprefix
* The translation token would be: "tokenprefix_input_one"
* Default language in "lang" attribute will always be "en"
* @param {String} tokenPrefix
* @param {String} formID
function enableFormTranslation(tokenPrefix, formID) {
var $inputs = $("#" + formID + " label");
$inputs.each(function() {
console.log("InputID: " + $(this).attr('id'));
var oldtext = $("label[for='" + $(this).attr('id') + "']").text();
$("label[for='" + $(this).attr('id') + "']").html('<span lang="en" data-lang-token="' + tokenPrefix + "_" + $(this).attr('id') + '">' + oldtext + '</span>');
});
}
*/
// global vars // global vars
var currentVersion; var currentVersion;
var cleanCurrentVersion; var cleanCurrentVersion;

View File

@ -1,675 +0,0 @@
/*
The MIT License (MIT)
Copyright (c) 2014 Irrelon Software Limited
http://www.irrelon.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice, url and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Source: https://github.com/irrelon/jquery-lang-js
Changelog: See readme.md
*/
var Lang = (function () {
"use strict";
var Lang = function () {
// Enable firing events
this._fireEvents = true;
// Allow storage of dynamic language pack data
this._dynamic = {};
};
/**
* Initialise the library with the library options.
* @param {Object} options The options to init the library with.
* See the readme.md for the details of the options available.
*/
Lang.prototype.init = function (options) {
var self = this,
cookieLang,
defaultLang,
currentLang,
allowCookieOverride;
options = options || {};
options.cookie = options.cookie || {};
defaultLang = options.defaultLang;
currentLang = options.currentLang;
allowCookieOverride = options.allowCookieOverride;
// Set cookie settings
this.cookieName = options.cookie.name || 'langCookie';
this.cookieExpiry = options.cookie.expiry || 365;
this.cookiePath = options.cookie.path || '/';
// Store existing mutation methods so we can auto-run
// translations when new data is added to the page
this._mutationCopies = {
append: $.fn.append,
appendTo: $.fn.appendTo,
prepend: $.fn.prepend,
before: $.fn.before,
after: $.fn.after,
html: $.fn.html
};
// Now override the existing mutation methods with our own
$.fn.append = function () { return self._mutation(this, 'append', arguments) };
$.fn.appendTo = function () { return self._mutation(this, 'appendTo', arguments) };
$.fn.prepend = function () { return self._mutation(this, 'prepend', arguments) };
$.fn.before = function () { return self._mutation(this, 'before', arguments) };
$.fn.after = function () { return self._mutation(this, 'after', arguments) };
$.fn.html = function () { return self._mutation(this, 'html', arguments) };
// Set default and current language to the default one
// to start with
this.defaultLang = defaultLang || 'en';
this.currentLang = defaultLang || 'en';
// Check for cookie support when no current language is specified
if ((allowCookieOverride || !currentLang) && typeof Cookies !== 'undefined') {
// Check for an existing language cookie
cookieLang = Cookies.get(this.cookieName);
if (cookieLang) {
// We have a cookie language, set the current language
currentLang = cookieLang;
}
}
$(function () {
// Setup data on the language items
self._start();
// Check if the current language is not the same as our default
if (currentLang && currentLang !== self.defaultLang) {
// Switch to the current language
self.change(currentLang);
}
});
};
/**
* Object that holds the language packs.
* @type {{}}
*/
Lang.prototype.pack = {};
/**
* Array of translatable attributes to check for on elements.
* @type {string[]}
*/
Lang.prototype.attrList = [
'title',
'alt',
'placeholder',
'href'
];
/**
* Defines a language pack that can be dynamically loaded and the
* path to use when doing so.
* @param {String} lang The language two-letter iso-code.
* @param {String} path The path to the language pack js file.
*/
Lang.prototype.dynamic = function (lang, path) {
if (lang !== undefined && path !== undefined) {
this._dynamic[lang] = path;
}
};
/**
* Loads a new language pack for the given language.
* @param {string} lang The language to load the pack for.
* @param {Function=} callback Optional callback when the file has loaded.
*/
Lang.prototype.loadPack = function (lang, callback) {
var self = this;
if (lang && self._dynamic[lang]) {
$.ajax({
dataType: "json",
url: self._dynamic[lang],
success: function (data) {
self.pack[lang] = data;
// Process the regex list
if (self.pack[lang].regex) {
var packRegex = self.pack[lang].regex,
regex,
i;
for (i = 0; i < packRegex.length; i++) {
regex = packRegex[i];
if (regex.length === 2) {
// String, value
regex[0] = new RegExp(regex[0]);
} else if (regex.length === 3) {
// String, modifiers, value
regex[0] = new RegExp(regex[0], regex[1]);
// Remove modifier
regex.splice(1, 1);
}
}
}
//console.log('Loaded language pack: ' + self._dynamic[lang]);
if (callback) { callback(false, lang, self._dynamic[lang]); }
},
error: function () {
if (callback) { callback(true, lang, self._dynamic[lang]); }
throw('Error loading language pack' + self._dynamic[lang]);
}
});
} else {
throw('Cannot load language pack, no file path specified!');
}
};
/**
* Scans the DOM for elements with [lang] selector and saves translate data
* for them for later use.
* @private
*/
Lang.prototype._start = function (selector) {
// Get the page HTML
var arr = selector !== undefined ? $(selector).find('[lang]') : $(':not(html)[lang]'),
arrCount = arr.length,
elem;
while (arrCount--) {
elem = $(arr[arrCount]);
this._processElement(elem);
}
};
Lang.prototype._processElement = function (elem) {
// Only store data if the element is set to our default language
if (elem.attr('lang') === this.defaultLang) {
// Store translatable attributes
this._storeAttribs(elem);
// Store translatable content
this._storeContent(elem);
}
};
/**
* Stores the translatable attribute values in their default language.
* @param {object} elem The jQuery selected element.
* @private
*/
Lang.prototype._storeAttribs = function (elem) {
var attrIndex,
attr,
attrObj;
for (attrIndex = 0; attrIndex < this.attrList.length; attrIndex++) {
attr = this.attrList[attrIndex];
if (elem.attr(attr)) {
// Grab the existing attribute store or create a new object
attrObj = elem.data('lang-attr') || {};
// Add the attribute and value to the store
attrObj[attr] = elem.attr(attr);
// Save the attribute data to the store
elem.data('lang-attr', attrObj);
}
}
};
/**
* Reads the existing content from the element and stores it for
* later use in translation.
* @param elem
* @private
*/
Lang.prototype._storeContent = function (elem) {
// Check if the element is an input element
if (elem.is('input')) {
switch (elem.attr('type')) {
case 'button':
case 'submit':
case 'hidden':
case 'reset':
elem.data('lang-val', elem.val());
break;
}
} else if (elem.is('img')) {
elem.data('lang-src', elem.attr('src'));
} else {
// Get the text nodes immediately inside this element
var nodes = this._getTextNodes(elem);
if (nodes) {
elem.data('lang-text', nodes);
}
}
};
/**
* Retrieves the text nodes from an element and returns them in array wrap into
* object with two properties:
* - node - which corresponds to text node,
* - langDefaultText - which remember current data of text node
* @param elem
* @returns {Array|*}
* @private
*/
Lang.prototype._getTextNodes = function (elem) {
var nodes = elem.contents(), nodeObjArray = [], nodeObj = {},
nodeArr, that = this, map = Array.prototype.map;
$.each(nodes, function (index, node) {
if ( node.nodeType !== 3 ) {
return;
}
nodeObj = {
node : node,
langDefaultText : node.data
};
nodeObjArray.push(nodeObj);
});
// If element has only one text node and data-lang-token is defined
// set langContentKey property to use as a token
if(nodes.length == 1){
nodeObjArray[0].langToken = elem.data('langToken');
}
return nodeObjArray;
};
/**
* Sets text nodes of an element translated based on the passed language.
* @param elem
* @param {Array|*} nodes array of objecs with text node and defaultText returned from _getTextNodes
* @param lang
* @private
*/
Lang.prototype._setTextNodes = function (elem, nodes, lang) {
var index,
textNode,
defaultText,
translation,
langNotDefault = lang !== this.defaultLang;
for (index = 0; index < nodes.length; index++) {
textNode = nodes[index];
if (langNotDefault) {
// If langToken is set, use it as a token
defaultText = textNode.langToken || $.trim(textNode.langDefaultText);
if (defaultText) {
// Translate the langDefaultText
translation = this.translate(defaultText, lang);
if (translation) {
try {
// Replace the text with the translated version
textNode.node.data = textNode.node.data.split($.trim(textNode.node.data)).join(translation);
} catch (e) {
}
} else {
if (console && console.log) {
console.log('Translation for "' + defaultText + '" not found!');
}
}
}
} else {
// Replace with original text
try {
textNode.node.data = textNode.langDefaultText;
} catch (e) {
}
}
}
};
/**
* Translates and sets the attributes of an element to the passed language.
* @param elem
* @param lang
* @private
*/
Lang.prototype._translateAttribs = function (elem, lang) {
var attr,
attrObj = elem.data('lang-attr') || {},
translation;
for (attr in attrObj) {
if (attrObj.hasOwnProperty(attr)) {
// Check the element still has the attribute
if (elem.attr(attr)) {
if (lang !== this.defaultLang) {
// Get the translated value
translation = this.translate(attrObj[attr], lang);
// Check we actually HAVE a translation
if (translation) {
// Change the attribute to the translated value
elem.attr(attr, translation);
}
} else {
// Set default language value
elem.attr(attr, attrObj[attr]);
}
}
}
}
};
/**
* Translates and sets the contents of an element to the passed language.
* @param elem
* @param lang
* @private
*/
Lang.prototype._translateContent = function (elem, lang) {
var langNotDefault = lang !== this.defaultLang,
translation,
nodes;
// Check if the element is an input element
if (elem.is('input')) {
switch (elem.attr('type')) {
case 'button':
case 'submit':
case 'hidden':
case 'reset':
if (langNotDefault) {
// Get the translated value
translation = this.translate(elem.data('lang-val'), lang);
// Check we actually HAVE a translation
if (translation) {
// Set translated value
elem.val(translation);
}
} else {
// Set default language value
elem.val(elem.data('lang-val'));
}
break;
}
} else if (elem.is('img')) {
if (langNotDefault) {
// Get the translated value
translation = this.translate(elem.data('lang-src'), lang);
// Check we actually HAVE a translation
if (translation) {
// Set translated value
elem.attr('src', translation);
}
} else {
// Set default language value
elem.attr('src', elem.data('lang-src'));
}
} else {
// Set text node translated text
nodes = elem.data('lang-text');
if (nodes) {
this._setTextNodes(elem, nodes, lang);
}
}
};
/**
* Call this to change the current language on the page.
* @param {String} lang The new two-letter language code to change to.
* @param {String=} selector Optional selector to find language-based
* elements for updating.
* @param {Function=} callback Optional callback function that will be
* called once the language change has been successfully processed. This
* is especially useful if you are using dynamic language pack loading
* since you will get a callback once it has been loaded and changed.
* Your callback will be passed three arguments, a boolean to denote if
* there was an error (true if error), the second will be the language
* you passed in the change call (the lang argument) and the third will
* be the selector used in the change update.
*/
Lang.prototype.change = function (lang, selector, callback) {
var self = this;
if (lang === this.defaultLang || this.pack[lang] || this._dynamic[lang]) {
// Check if the language pack is currently loaded
if (lang !== this.defaultLang) {
if (!this.pack[lang] && this._dynamic[lang]) {
// The language pack needs loading first
//console.log('Loading dynamic language pack: ' + this._dynamic[lang] + '...');
this.loadPack(lang, function (err, loadingLang, fromUrl) {
if (!err) {
// Process the change language request
self.change.call(self, lang, selector, callback);
} else {
// Call the callback with the error
if (callback) { callback('Language pack could not load from: ' + fromUrl, lang, selector); }
}
});
return;
} else if (!this.pack[lang] && !this._dynamic[lang]) {
// Pack not loaded and no dynamic entry
if (callback) { callback('Language pack not defined for: ' + lang, lang, selector); }
throw('Could not change language to ' + lang + ' because no language pack for this language exists!');
}
}
var fireAfterUpdate = false,
currLang = this.currentLang;
if (this.currentLang != lang) {
this.beforeUpdate(currLang, lang);
fireAfterUpdate = true;
}
this.currentLang = lang;
// Get the page HTML
var arr = selector !== undefined ? $(selector).find('[lang]') : $(':not(html)[lang]'),
arrCount = arr.length,
elem;
while (arrCount--) {
elem = $(arr[arrCount]);
if (elem.attr('lang') !== lang) {
this._translateElement(elem, lang);
}
}
if (fireAfterUpdate) {
this.afterUpdate(currLang, lang);
}
// Check for cookie support
if (typeof Cookies !== "undefined") {
// Set a cookie to remember this language setting with 1 year expiry
Cookies.set(self.cookieName, lang, {
expires: self.cookieExpiry,
path: self.cookiePath
});
}
if (callback) { callback(false, lang, selector); }
} else {
if (callback) { callback('No language pack defined for: ' + lang, lang, selector); }
throw('Attempt to change language to "' + lang + '" but no language pack for that language is loaded!');
}
};
Lang.prototype._translateElement = function (elem, lang) {
// Translate attributes
this._translateAttribs(elem, lang);
// Translate content
if (elem.attr('data-lang-content') != 'false') {
this._translateContent(elem, lang);
}
// Update the element's current language
elem.attr('lang', lang);
};
/**
* Translates text from the default language into the passed language.
* @param {String} text The text to translate.
* @param {String} lang The two-letter language code to translate to.
* @returns {*}
*/
Lang.prototype.translate = function (text, lang) {
lang = lang || this.currentLang;
if (this.pack[lang]) {
var translation = '';
if (lang != this.defaultLang) {
// Check for a direct token translation
translation = this.pack[lang].token[text];
if (!translation) {
// No token translation was found, test for regex match
translation = this._regexMatch(text, lang);
}
if (!translation) {
if (console && console.log) {
console.log('Translation for "' + text + '" not found in language pack: ' + lang);
}
}
return translation || text;
} else {
return text;
}
} else {
return text;
}
};
/**
* Checks the regex items for a match against the passed text and
* if a match is made, translates to the given replacement.
* @param {String} text The text to test regex matches against.
* @param {String} lang The two-letter language code to translate to.
* @returns {string}
* @private
*/
Lang.prototype._regexMatch = function (text, lang) {
// Loop the regex array and test them against the text
var arr,
arrCount,
arrIndex,
item,
regex,
expressionResult;
arr = this.pack[lang].regex;
if (arr) {
arrCount = arr.length;
for (arrIndex = 0; arrIndex < arrCount; arrIndex++) {
item = arr[arrIndex];
regex = item[0];
// Test regex
expressionResult = regex.exec(text);
if (expressionResult && expressionResult[0]) {
return text.split(expressionResult[0]).join(item[1]);
}
}
}
return '';
};
Lang.prototype.beforeUpdate = function (currentLang, newLang) {
if (this._fireEvents) {
$(this).triggerHandler('beforeUpdate', [currentLang, newLang, this.pack[currentLang], this.pack[newLang]]);
}
};
Lang.prototype.afterUpdate = function (currentLang, newLang) {
if (this._fireEvents) {
$(this).triggerHandler('afterUpdate', [currentLang, newLang, this.pack[currentLang], this.pack[newLang]]);
}
};
Lang.prototype.refresh = function () {
// Process refresh on the page
this._fireEvents = false;
this.change(this.currentLang);
this._fireEvents = true;
};
////////////////////////////////////////////////////
// Mutation overrides
////////////////////////////////////////////////////
Lang.prototype._mutation = function (context, method, args) {
var result = this._mutationCopies[method].apply(context, args),
currLang = this.currentLang,
rootElem = $(context);
if (rootElem.attr('lang')) {
// Switch off events for the moment
this._fireEvents = false;
// Check if the root element is currently set to another language from current
//if (rootElem.attr('lang') !== this.currentLang) {
this._translateElement(rootElem, this.defaultLang);
this.change(this.defaultLang, rootElem);
// Calling change above sets the global currentLang but this is supposed to be
// an isolated change so reset the global value back to what it was before
this.currentLang = currLang;
// Record data on the default language from the root element
this._processElement(rootElem);
// Translate the root element
this._translateElement(rootElem, this.currentLang);
//}
}
// Record data on the default language from the root's children
this._start(rootElem);
// Process translation on any child elements of this element
this.change(this.currentLang, rootElem);
// Switch events back on
this._fireEvents = true;
return result;
};
return Lang;
})();

View File

@ -0,0 +1,168 @@
/**
* jQuery Internationalization library
*
* Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar
*
* jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do
* anything special to choose one license or the other and you don't have to
* notify anyone which license you are using. You are free to use
* UniversalLanguageSelector in commercial projects as long as the copyright
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
*
* @licence GNU General Public Licence 2.0 or later
* @licence MIT License
*/
( function ( $ ) {
'use strict';
var MessageParserEmitter = function () {
this.language = $.i18n.languages[String.locale] || $.i18n.languages['default'];
};
MessageParserEmitter.prototype = {
constructor: MessageParserEmitter,
/**
* (We put this method definition here, and not in prototype, to make
* sure it's not overwritten by any magic.) Walk entire node structure,
* applying replacements and template functions when appropriate
*
* @param {Mixed} node abstract syntax tree (top node or subnode)
* @param {Array} replacements for $1, $2, ... $n
* @return {Mixed} single-string node or array of nodes suitable for
* jQuery appending.
*/
emit: function ( node, replacements ) {
var ret, subnodes, operation,
messageParserEmitter = this;
switch ( typeof node ) {
case 'string':
case 'number':
ret = node;
break;
case 'object':
// node is an array of nodes
subnodes = $.map( node.slice( 1 ), function ( n ) {
return messageParserEmitter.emit( n, replacements );
} );
operation = node[0].toLowerCase();
if ( typeof messageParserEmitter[operation] === 'function' ) {
ret = messageParserEmitter[operation]( subnodes, replacements );
} else {
throw new Error( 'unknown operation "' + operation + '"' );
}
break;
case 'undefined':
// Parsing the empty string (as an entire expression, or as a
// paramExpression in a template) results in undefined
// Perhaps a more clever parser can detect this, and return the
// empty string? Or is that useful information?
// The logical thing is probably to return the empty string here
// when we encounter undefined.
ret = '';
break;
default:
throw new Error( 'unexpected type in AST: ' + typeof node );
}
return ret;
},
/**
* Parsing has been applied depth-first we can assume that all nodes
* here are single nodes Must return a single node to parents -- a
* jQuery with synthetic span However, unwrap any other synthetic spans
* in our children and pass them upwards
*
* @param {Array} nodes Mixed, some single nodes, some arrays of nodes.
* @return String
*/
concat: function ( nodes ) {
var result = '';
$.each( nodes, function ( i, node ) {
// strings, integers, anything else
result += node;
} );
return result;
},
/**
* Return escaped replacement of correct index, or string if
* unavailable. Note that we expect the parsed parameter to be
* zero-based. i.e. $1 should have become [ 0 ]. if the specified
* parameter is not found return the same string (e.g. "$99" ->
* parameter 98 -> not found -> return "$99" ) TODO throw error if
* nodes.length > 1 ?
*
* @param {Array} nodes One element, integer, n >= 0
* @param {Array} replacements for $1, $2, ... $n
* @return {string} replacement
*/
replace: function ( nodes, replacements ) {
var index = parseInt( nodes[0], 10 );
if ( index < replacements.length ) {
// replacement is not a string, don't touch!
return replacements[index];
} else {
// index not found, fallback to displaying variable
return '$' + ( index + 1 );
}
},
/**
* Transform parsed structure into pluralization n.b. The first node may
* be a non-integer (for instance, a string representing an Arabic
* number). So convert it back with the current language's
* convertNumber.
*
* @param {Array} nodes List [ {String|Number}, {String}, {String} ... ]
* @return {String} selected pluralized form according to current
* language.
*/
plural: function ( nodes ) {
var count = parseFloat( this.language.convertNumber( nodes[0], 10 ) ),
forms = nodes.slice( 1 );
return forms.length ? this.language.convertPlural( count, forms ) : '';
},
/**
* Transform parsed structure into gender Usage
* {{gender:gender|masculine|feminine|neutral}}.
*
* @param {Array} nodes List [ {String}, {String}, {String} , {String} ]
* @return {String} selected gender form according to current language
*/
gender: function ( nodes ) {
var gender = nodes[0],
forms = nodes.slice( 1 );
return this.language.gender( gender, forms );
},
/**
* Transform parsed structure into grammar conversion. Invoked by
* putting {{grammar:form|word}} in a message
*
* @param {Array} nodes List [{Grammar case eg: genitive}, {String word}]
* @return {String} selected grammatical form according to current
* language.
*/
grammar: function ( nodes ) {
var form = nodes[0],
word = nodes[1];
return word && form && this.language.convertGrammar( word, form );
}
};
$.extend( $.i18n.parser.emitter, new MessageParserEmitter() );
}( jQuery ) );

View File

@ -0,0 +1,186 @@
/**
* jQuery Internationalization library
*
* Copyright (C) 2012 Santhosh Thottingal
*
* jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to
* choose one license or the other and you don't have to notify anyone which license you are using.
* You are free to use UniversalLanguageSelector in commercial projects as long as the copyright
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
*
* @licence GNU General Public Licence 2.0 or later
* @licence MIT License
*/
( function ( $, undefined ) {
'use strict';
$.i18n = $.i18n || {};
$.extend( $.i18n.fallbacks, {
ab: [ 'ru' ],
ace: [ 'id' ],
aln: [ 'sq' ],
// Not so standard - als is supposed to be Tosk Albanian,
// but in Wikipedia it's used for a Germanic language.
als: [ 'gsw', 'de' ],
an: [ 'es' ],
anp: [ 'hi' ],
arn: [ 'es' ],
arz: [ 'ar' ],
av: [ 'ru' ],
ay: [ 'es' ],
ba: [ 'ru' ],
bar: [ 'de' ],
'bat-smg': [ 'sgs', 'lt' ],
bcc: [ 'fa' ],
'be-x-old': [ 'be-tarask' ],
bh: [ 'bho' ],
bjn: [ 'id' ],
bm: [ 'fr' ],
bpy: [ 'bn' ],
bqi: [ 'fa' ],
bug: [ 'id' ],
'cbk-zam': [ 'es' ],
ce: [ 'ru' ],
crh: [ 'crh-latn' ],
'crh-cyrl': [ 'ru' ],
csb: [ 'pl' ],
cv: [ 'ru' ],
'de-at': [ 'de' ],
'de-ch': [ 'de' ],
'de-formal': [ 'de' ],
dsb: [ 'de' ],
dtp: [ 'ms' ],
egl: [ 'it' ],
eml: [ 'it' ],
ff: [ 'fr' ],
fit: [ 'fi' ],
'fiu-vro': [ 'vro', 'et' ],
frc: [ 'fr' ],
frp: [ 'fr' ],
frr: [ 'de' ],
fur: [ 'it' ],
gag: [ 'tr' ],
gan: [ 'gan-hant', 'zh-hant', 'zh-hans' ],
'gan-hans': [ 'zh-hans' ],
'gan-hant': [ 'zh-hant', 'zh-hans' ],
gl: [ 'pt' ],
glk: [ 'fa' ],
gn: [ 'es' ],
gsw: [ 'de' ],
hif: [ 'hif-latn' ],
hsb: [ 'de' ],
ht: [ 'fr' ],
ii: [ 'zh-cn', 'zh-hans' ],
inh: [ 'ru' ],
iu: [ 'ike-cans' ],
jut: [ 'da' ],
jv: [ 'id' ],
kaa: [ 'kk-latn', 'kk-cyrl' ],
kbd: [ 'kbd-cyrl' ],
khw: [ 'ur' ],
kiu: [ 'tr' ],
kk: [ 'kk-cyrl' ],
'kk-arab': [ 'kk-cyrl' ],
'kk-latn': [ 'kk-cyrl' ],
'kk-cn': [ 'kk-arab', 'kk-cyrl' ],
'kk-kz': [ 'kk-cyrl' ],
'kk-tr': [ 'kk-latn', 'kk-cyrl' ],
kl: [ 'da' ],
'ko-kp': [ 'ko' ],
koi: [ 'ru' ],
krc: [ 'ru' ],
ks: [ 'ks-arab' ],
ksh: [ 'de' ],
ku: [ 'ku-latn' ],
'ku-arab': [ 'ckb' ],
kv: [ 'ru' ],
lad: [ 'es' ],
lb: [ 'de' ],
lbe: [ 'ru' ],
lez: [ 'ru' ],
li: [ 'nl' ],
lij: [ 'it' ],
liv: [ 'et' ],
lmo: [ 'it' ],
ln: [ 'fr' ],
ltg: [ 'lv' ],
lzz: [ 'tr' ],
mai: [ 'hi' ],
'map-bms': [ 'jv', 'id' ],
mg: [ 'fr' ],
mhr: [ 'ru' ],
min: [ 'id' ],
mo: [ 'ro' ],
mrj: [ 'ru' ],
mwl: [ 'pt' ],
myv: [ 'ru' ],
mzn: [ 'fa' ],
nah: [ 'es' ],
nap: [ 'it' ],
nds: [ 'de' ],
'nds-nl': [ 'nl' ],
'nl-informal': [ 'nl' ],
no: [ 'nb' ],
os: [ 'ru' ],
pcd: [ 'fr' ],
pdc: [ 'de' ],
pdt: [ 'de' ],
pfl: [ 'de' ],
pms: [ 'it' ],
pt: [ 'pt-br' ],
'pt-br': [ 'pt' ],
qu: [ 'es' ],
qug: [ 'qu', 'es' ],
rgn: [ 'it' ],
rmy: [ 'ro' ],
'roa-rup': [ 'rup' ],
rue: [ 'uk', 'ru' ],
ruq: [ 'ruq-latn', 'ro' ],
'ruq-cyrl': [ 'mk' ],
'ruq-latn': [ 'ro' ],
sa: [ 'hi' ],
sah: [ 'ru' ],
scn: [ 'it' ],
sg: [ 'fr' ],
sgs: [ 'lt' ],
sli: [ 'de' ],
sr: [ 'sr-ec' ],
srn: [ 'nl' ],
stq: [ 'de' ],
su: [ 'id' ],
szl: [ 'pl' ],
tcy: [ 'kn' ],
tg: [ 'tg-cyrl' ],
tt: [ 'tt-cyrl', 'ru' ],
'tt-cyrl': [ 'ru' ],
ty: [ 'fr' ],
udm: [ 'ru' ],
ug: [ 'ug-arab' ],
uk: [ 'ru' ],
vec: [ 'it' ],
vep: [ 'et' ],
vls: [ 'nl' ],
vmf: [ 'de' ],
vot: [ 'fi' ],
vro: [ 'et' ],
wa: [ 'fr' ],
wo: [ 'fr' ],
wuu: [ 'zh-hans' ],
xal: [ 'ru' ],
xmf: [ 'ka' ],
yi: [ 'he' ],
za: [ 'zh-hans' ],
zea: [ 'nl' ],
zh: [ 'zh-hans' ],
'zh-classical': [ 'lzh' ],
'zh-cn': [ 'zh-hans' ],
'zh-hant': [ 'zh-hans' ],
'zh-hk': [ 'zh-hant', 'zh-hans' ],
'zh-min-nan': [ 'nan' ],
'zh-mo': [ 'zh-hk', 'zh-hant', 'zh-hans' ],
'zh-my': [ 'zh-sg', 'zh-hans' ],
'zh-sg': [ 'zh-hans' ],
'zh-tw': [ 'zh-hant', 'zh-hans' ],
'zh-yue': [ 'yue' ]
} );
}( jQuery ) );

View File

@ -0,0 +1,287 @@
/**
* jQuery Internationalization library
*
* Copyright (C) 2012 Santhosh Thottingal
*
* jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do
* anything special to choose one license or the other and you don't have to
* notify anyone which license you are using. You are free to use
* UniversalLanguageSelector in commercial projects as long as the copyright
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
*
* @licence GNU General Public Licence 2.0 or later
* @licence MIT License
*/
( function ( $ ) {
'use strict';
var nav, I18N,
slice = Array.prototype.slice;
/**
* @constructor
* @param {Object} options
*/
I18N = function ( options ) {
// Load defaults
this.options = $.extend( {}, I18N.defaults, options );
this.parser = this.options.parser;
this.locale = this.options.locale;
this.messageStore = this.options.messageStore;
this.languages = {};
this.init();
};
I18N.prototype = {
/**
* Initialize by loading locales and setting up
* String.prototype.toLocaleString and String.locale.
*/
init: function () {
var i18n = this;
// Set locale of String environment
String.locale = i18n.locale;
// Override String.localeString method
String.prototype.toLocaleString = function () {
var localeParts, localePartIndex, value, locale, fallbackIndex,
tryingLocale, message;
value = this.valueOf();
locale = i18n.locale;
fallbackIndex = 0;
while ( locale ) {
// Iterate through locales starting at most-specific until
// localization is found. As in fi-Latn-FI, fi-Latn and fi.
localeParts = locale.split( '-' );
localePartIndex = localeParts.length;
do {
tryingLocale = localeParts.slice( 0, localePartIndex ).join( '-' );
message = i18n.messageStore.get( tryingLocale, value );
if ( message ) {
return message;
}
localePartIndex--;
} while ( localePartIndex );
if ( locale === 'en' ) {
break;
}
locale = ( $.i18n.fallbacks[i18n.locale] && $.i18n.fallbacks[i18n.locale][fallbackIndex] ) ||
i18n.options.fallbackLocale;
$.i18n.log( 'Trying fallback locale for ' + i18n.locale + ': ' + locale );
fallbackIndex++;
}
// key not found
return '';
};
},
/*
* Destroy the i18n instance.
*/
destroy: function () {
$.removeData( document, 'i18n' );
},
/**
* General message loading API This can take a URL string for
* the json formatted messages. Example:
* <code>load('path/to/all_localizations.json');</code>
*
* To load a localization file for a locale:
* <code>
* load('path/to/de-messages.json', 'de' );
* </code>
*
* To load a localization file from a directory:
* <code>
* load('path/to/i18n/directory', 'de' );
* </code>
* The above method has the advantage of fallback resolution.
* ie, it will automatically load the fallback locales for de.
* For most usecases, this is the recommended method.
* It is optional to have trailing slash at end.
*
* A data object containing message key- message translation mappings
* can also be passed. Example:
* <code>
* load( { 'hello' : 'Hello' }, optionalLocale );
* </code>
*
* A source map containing key-value pair of languagename and locations
* can also be passed. Example:
* <code>
* load( {
* bn: 'i18n/bn.json',
* he: 'i18n/he.json',
* en: 'i18n/en.json'
* } )
* </code>
*
* If the data argument is null/undefined/false,
* all cached messages for the i18n instance will get reset.
*
* @param {String|Object} source
* @param {String} locale Language tag
* @returns {jQuery.Promise}
*/
load: function ( source, locale ) {
var fallbackLocales, locIndex, fallbackLocale, sourceMap = {};
if ( !source && !locale ) {
source = 'i18n/' + $.i18n().locale + '.json';
locale = $.i18n().locale;
}
if ( typeof source === 'string' &&
source.split( '.' ).pop() !== 'json'
) {
// Load specified locale then check for fallbacks when directory is specified in load()
sourceMap[locale] = source + '/' + locale + '.json';
fallbackLocales = ( $.i18n.fallbacks[locale] || [] )
.concat( this.options.fallbackLocale );
for ( locIndex in fallbackLocales ) {
fallbackLocale = fallbackLocales[locIndex];
sourceMap[fallbackLocale] = source + '/' + fallbackLocale + '.json';
}
return this.load( sourceMap );
} else {
return this.messageStore.load( source, locale );
}
},
/**
* Does parameter and magic word substitution.
*
* @param {string} key Message key
* @param {Array} parameters Message parameters
* @return {string}
*/
parse: function ( key, parameters ) {
var message = key.toLocaleString();
// FIXME: This changes the state of the I18N object,
// should probably not change the 'this.parser' but just
// pass it to the parser.
this.parser.language = $.i18n.languages[$.i18n().locale] || $.i18n.languages['default'];
if ( message === '' ) {
message = key;
}
return this.parser.parse( message, parameters );
}
};
/**
* Process a message from the $.I18N instance
* for the current document, stored in jQuery.data(document).
*
* @param {string} key Key of the message.
* @param {string} param1 [param...] Variadic list of parameters for {key}.
* @return {string|$.I18N} Parsed message, or if no key was given
* the instance of $.I18N is returned.
*/
$.i18n = function ( key, param1 ) {
var parameters,
i18n = $.data( document, 'i18n' ),
options = typeof key === 'object' && key;
// If the locale option for this call is different then the setup so far,
// update it automatically. This doesn't just change the context for this
// call but for all future call as well.
// If there is no i18n setup yet, don't do this. It will be taken care of
// by the `new I18N` construction below.
// NOTE: It should only change language for this one call.
// Then cache instances of I18N somewhere.
if ( options && options.locale && i18n && i18n.locale !== options.locale ) {
String.locale = i18n.locale = options.locale;
}
if ( !i18n ) {
i18n = new I18N( options );
$.data( document, 'i18n', i18n );
}
if ( typeof key === 'string' ) {
if ( param1 !== undefined ) {
parameters = slice.call( arguments, 1 );
} else {
parameters = [];
}
return i18n.parse( key, parameters );
} else {
// FIXME: remove this feature/bug.
return i18n;
}
};
$.fn.i18n = function () {
var i18n = $.data( document, 'i18n' );
if ( !i18n ) {
i18n = new I18N();
$.data( document, 'i18n', i18n );
}
String.locale = i18n.locale;
return this.each( function () {
var $this = $( this ),
messageKey = $this.data( 'i18n' );
if ( messageKey ) {
$this.text( i18n.parse( messageKey ) );
} else {
$this.find( '[data-i18n]' ).i18n();
}
} );
};
String.locale = String.locale || $( 'html' ).attr( 'lang' );
if ( !String.locale ) {
if ( typeof window.navigator !== undefined ) {
nav = window.navigator;
String.locale = nav.language || nav.userLanguage || '';
} else {
String.locale = '';
}
}
$.i18n.languages = {};
$.i18n.messageStore = $.i18n.messageStore || {};
$.i18n.parser = {
// The default parser only handles variable substitution
parse: function ( message, parameters ) {
return message.replace( /\$(\d+)/g, function ( str, match ) {
var index = parseInt( match, 10 ) - 1;
return parameters[index] !== undefined ? parameters[index] : '$' + match;
} );
},
emitter: {}
};
$.i18n.fallbacks = {};
$.i18n.debug = false;
$.i18n.log = function ( /* arguments */ ) {
if ( window.console && $.i18n.debug ) {
window.console.log.apply( window.console, arguments );
}
};
/* Static members */
I18N.defaults = {
locale: String.locale,
fallbackLocale: 'en',
parser: $.i18n.parser,
messageStore: $.i18n.messageStore
};
// Expose constructor
$.i18n.constructor = I18N;
}( jQuery ) );

View File

@ -0,0 +1,472 @@
/*global pluralRuleParser */
( function ( $ ) {
'use strict';
var language = {
// CLDR plural rules generated using
// libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html
pluralRules: {
ak: {
one: 'n = 0..1'
},
am: {
one: 'i = 0 or n = 1'
},
ar: {
zero: 'n = 0',
one: 'n = 1',
two: 'n = 2',
few: 'n % 100 = 3..10',
many: 'n % 100 = 11..99'
},
be: {
one: 'n % 10 = 1 and n % 100 != 11',
few: 'n % 10 = 2..4 and n % 100 != 12..14',
many: 'n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14'
},
bh: {
one: 'n = 0..1'
},
bn: {
one: 'i = 0 or n = 1'
},
br: {
one: 'n % 10 = 1 and n % 100 != 11,71,91',
two: 'n % 10 = 2 and n % 100 != 12,72,92',
few: 'n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99',
many: 'n != 0 and n % 1000000 = 0'
},
bs: {
one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
},
cs: {
one: 'i = 1 and v = 0',
few: 'i = 2..4 and v = 0',
many: 'v != 0'
},
cy: {
zero: 'n = 0',
one: 'n = 1',
two: 'n = 2',
few: 'n = 3',
many: 'n = 6'
},
da: {
one: 'n = 1 or t != 0 and i = 0,1'
},
fa: {
one: 'i = 0 or n = 1'
},
ff: {
one: 'i = 0,1'
},
fil: {
one: 'i = 0..1 and v = 0'
},
fr: {
one: 'i = 0,1'
},
ga: {
one: 'n = 1',
two: 'n = 2',
few: 'n = 3..6',
many: 'n = 7..10'
},
gd: {
one: 'n = 1,11',
two: 'n = 2,12',
few: 'n = 3..10,13..19'
},
gu: {
one: 'i = 0 or n = 1'
},
guw: {
one: 'n = 0..1'
},
gv: {
one: 'n % 10 = 1',
two: 'n % 10 = 2',
few: 'n % 100 = 0,20,40,60'
},
he: {
one: 'i = 1 and v = 0',
two: 'i = 2 and v = 0',
many: 'v = 0 and n != 0..10 and n % 10 = 0'
},
hi: {
one: 'i = 0 or n = 1'
},
hr: {
one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
},
hy: {
one: 'i = 0,1'
},
is: {
one: 't = 0 and i % 10 = 1 and i % 100 != 11 or t != 0'
},
iu: {
one: 'n = 1',
two: 'n = 2'
},
iw: {
one: 'i = 1 and v = 0',
two: 'i = 2 and v = 0',
many: 'v = 0 and n != 0..10 and n % 10 = 0'
},
kab: {
one: 'i = 0,1'
},
kn: {
one: 'i = 0 or n = 1'
},
kw: {
one: 'n = 1',
two: 'n = 2'
},
lag: {
zero: 'n = 0',
one: 'i = 0,1 and n != 0'
},
ln: {
one: 'n = 0..1'
},
lt: {
one: 'n % 10 = 1 and n % 100 != 11..19',
few: 'n % 10 = 2..9 and n % 100 != 11..19',
many: 'f != 0'
},
lv: {
zero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',
one: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'
},
mg: {
one: 'n = 0..1'
},
mk: {
one: 'v = 0 and i % 10 = 1 or f % 10 = 1'
},
mo: {
one: 'i = 1 and v = 0',
few: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'
},
mr: {
one: 'i = 0 or n = 1'
},
mt: {
one: 'n = 1',
few: 'n = 0 or n % 100 = 2..10',
many: 'n % 100 = 11..19'
},
naq: {
one: 'n = 1',
two: 'n = 2'
},
nso: {
one: 'n = 0..1'
},
pa: {
one: 'n = 0..1'
},
pl: {
one: 'i = 1 and v = 0',
few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',
many: 'v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14'
},
pt: {
one: 'i = 1 and v = 0 or i = 0 and t = 1'
},
// jscs:disable requireCamelCaseOrUpperCaseIdentifiers
pt_PT: {
one: 'n = 1 and v = 0'
},
// jscs:enable requireCamelCaseOrUpperCaseIdentifiers
ro: {
one: 'i = 1 and v = 0',
few: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'
},
ru: {
one: 'v = 0 and i % 10 = 1 and i % 100 != 11',
many: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'
},
se: {
one: 'n = 1',
two: 'n = 2'
},
sh: {
one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
},
shi: {
one: 'i = 0 or n = 1',
few: 'n = 2..10'
},
si: {
one: 'n = 0,1 or i = 0 and f = 1'
},
sk: {
one: 'i = 1 and v = 0',
few: 'i = 2..4 and v = 0',
many: 'v != 0'
},
sl: {
one: 'v = 0 and i % 100 = 1',
two: 'v = 0 and i % 100 = 2',
few: 'v = 0 and i % 100 = 3..4 or v != 0'
},
sma: {
one: 'n = 1',
two: 'n = 2'
},
smi: {
one: 'n = 1',
two: 'n = 2'
},
smj: {
one: 'n = 1',
two: 'n = 2'
},
smn: {
one: 'n = 1',
two: 'n = 2'
},
sms: {
one: 'n = 1',
two: 'n = 2'
},
sr: {
one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
},
ti: {
one: 'n = 0..1'
},
tl: {
one: 'i = 0..1 and v = 0'
},
tzm: {
one: 'n = 0..1 or n = 11..99'
},
uk: {
one: 'v = 0 and i % 10 = 1 and i % 100 != 11',
few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',
many: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'
},
wa: {
one: 'n = 0..1'
},
zu: {
one: 'i = 0 or n = 1'
}
},
/**
* Plural form transformations, needed for some languages.
*
* @param count
* integer Non-localized quantifier
* @param forms
* array List of plural forms
* @return string Correct form for quantifier in this language
*/
convertPlural: function ( count, forms ) {
var pluralRules,
pluralFormIndex,
index,
explicitPluralPattern = new RegExp( '\\d+=', 'i' ),
formCount,
form;
if ( !forms || forms.length === 0 ) {
return '';
}
// Handle for Explicit 0= & 1= values
for ( index = 0; index < forms.length; index++ ) {
form = forms[index];
if ( explicitPluralPattern.test( form ) ) {
formCount = parseInt( form.substring( 0, form.indexOf( '=' ) ), 10 );
if ( formCount === count ) {
return ( form.substr( form.indexOf( '=' ) + 1 ) );
}
forms[index] = undefined;
}
}
forms = $.map( forms, function ( form ) {
if ( form !== undefined ) {
return form;
}
} );
pluralRules = this.pluralRules[$.i18n().locale];
if ( !pluralRules ) {
// default fallback.
return ( count === 1 ) ? forms[0] : forms[1];
}
pluralFormIndex = this.getPluralForm( count, pluralRules );
pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
return forms[pluralFormIndex];
},
/**
* For the number, get the plural for index
*
* @param number
* @param pluralRules
* @return plural form index
*/
getPluralForm: function ( number, pluralRules ) {
var i,
pluralForms = [ 'zero', 'one', 'two', 'few', 'many', 'other' ],
pluralFormIndex = 0;
for ( i = 0; i < pluralForms.length; i++ ) {
if ( pluralRules[pluralForms[i]] ) {
if ( pluralRuleParser( pluralRules[pluralForms[i]], number ) ) {
return pluralFormIndex;
}
pluralFormIndex++;
}
}
return pluralFormIndex;
},
/**
* Converts a number using digitTransformTable.
*
* @param {number} num Value to be converted
* @param {boolean} integer Convert the return value to an integer
*/
convertNumber: function ( num, integer ) {
var tmp, item, i,
transformTable, numberString, convertedNumber;
// Set the target Transform table:
transformTable = this.digitTransformTable( $.i18n().locale );
numberString = String( num );
convertedNumber = '';
if ( !transformTable ) {
return num;
}
// Check if the restore to Latin number flag is set:
if ( integer ) {
if ( parseFloat( num, 10 ) === num ) {
return num;
}
tmp = [];
for ( item in transformTable ) {
tmp[transformTable[item]] = item;
}
transformTable = tmp;
}
for ( i = 0; i < numberString.length; i++ ) {
if ( transformTable[numberString[i]] ) {
convertedNumber += transformTable[numberString[i]];
} else {
convertedNumber += numberString[i];
}
}
return integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;
},
/**
* Grammatical transformations, needed for inflected languages.
* Invoked by putting {{grammar:form|word}} in a message.
* Override this method for languages that need special grammar rules
* applied dynamically.
*
* @param word {String}
* @param form {String}
* @return {String}
*/
convertGrammar: function ( word, form ) { /*jshint unused: false */
return word;
},
/**
* Provides an alternative text depending on specified gender. Usage
* {{gender:[gender|user object]|masculine|feminine|neutral}}. If second
* or third parameter are not specified, masculine is used.
*
* These details may be overriden per language.
*
* @param gender
* string male, female, or anything else for neutral.
* @param forms
* array List of gender forms
*
* @return string
*/
gender: function ( gender, forms ) {
if ( !forms || forms.length === 0 ) {
return '';
}
while ( forms.length < 2 ) {
forms.push( forms[forms.length - 1] );
}
if ( gender === 'male' ) {
return forms[0];
}
if ( gender === 'female' ) {
return forms[1];
}
return ( forms.length === 3 ) ? forms[2] : forms[0];
},
/**
* Get the digit transform table for the given language
* See http://cldr.unicode.org/translation/numbering-systems
* @param language
* @returns {Array|boolean} List of digits in the passed language or false
* representation, or boolean false if there is no information.
*/
digitTransformTable: function ( language ) {
var tables = {
ar: '٠١٢٣٤٥٦٧٨٩',
fa: '۰۱۲۳۴۵۶۷۸۹',
ml: '൦൧൨൩൪൫൬൭൮൯',
kn: '೦೧೨೩೪೫೬೭೮೯',
lo: '໐໑໒໓໔໕໖໗໘໙',
or: '୦୧୨୩୪୫୬୭୮୯',
kh: '០១២៣៤៥៦៧៨៩',
pa: '੦੧੨੩੪੫੬੭੮੯',
gu: '૦૧૨૩૪૫૬૭૮૯',
hi: '०१२३४५६७८९',
my: '၀၁၂၃၄၅၆၇၈၉',
ta: '௦௧௨௩௪௫௬௭௮௯',
te: '౦౧౨౩౪౫౬౭౮౯',
th: '๐๑๒๓๔๕๖๗๘๙', // FIXME use iso 639 codes
bo: '༠༡༢༣༤༥༦༧༨༩' // FIXME use iso 639 codes
};
if ( !tables[language] ) {
return false;
}
return tables[language].split( '' );
}
};
$.extend( $.i18n.languages, {
'default': language
} );
}( jQuery ) );

View File

@ -0,0 +1,125 @@
/**
* jQuery Internationalization library - Message Store
*
* Copyright (C) 2012 Santhosh Thottingal
*
* jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to
* choose one license or the other and you don't have to notify anyone which license you are using.
* You are free to use UniversalLanguageSelector in commercial projects as long as the copyright
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
*
* @licence GNU General Public Licence 2.0 or later
* @licence MIT License
*/
( function ( $, window, undefined ) {
'use strict';
var MessageStore = function () {
this.messages = {};
this.sources = {};
};
/**
* See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading
*/
MessageStore.prototype = {
/**
* General message loading API This can take a URL string for
* the json formatted messages.
* <code>load('path/to/all_localizations.json');</code>
*
* This can also load a localization file for a locale <code>
* load( 'path/to/de-messages.json', 'de' );
* </code>
* A data object containing message key- message translation mappings
* can also be passed Eg:
* <code>
* load( { 'hello' : 'Hello' }, optionalLocale );
* </code> If the data argument is
* null/undefined/false,
* all cached messages for the i18n instance will get reset.
*
* @param {String|Object} source
* @param {String} locale Language tag
* @return {jQuery.Promise}
*/
load: function ( source, locale ) {
var key = null,
deferred = null,
deferreds = [],
messageStore = this;
if ( typeof source === 'string' ) {
// This is a URL to the messages file.
$.i18n.log( 'Loading messages from: ' + source );
deferred = jsonMessageLoader( source )
.done( function ( localization ) {
messageStore.set( locale, localization );
} );
return deferred.promise();
}
if ( locale ) {
// source is an key-value pair of messages for given locale
messageStore.set( locale, source );
return $.Deferred().resolve();
} else {
// source is a key-value pair of locales and their source
for ( key in source ) {
if ( Object.prototype.hasOwnProperty.call( source, key ) ) {
locale = key;
// No {locale} given, assume data is a group of languages,
// call this function again for each language.
deferreds.push( messageStore.load( source[key], locale ) );
}
}
return $.when.apply( $, deferreds );
}
},
/**
* Set messages to the given locale.
* If locale exists, add messages to the locale.
* @param locale
* @param messages
*/
set: function ( locale, messages ) {
if ( !this.messages[locale] ) {
this.messages[locale] = messages;
} else {
this.messages[locale] = $.extend( this.messages[locale], messages );
}
},
/**
*
* @param locale
* @param messageKey
* @returns {Boolean}
*/
get: function ( locale, messageKey ) {
return this.messages[locale] && this.messages[locale][messageKey];
}
};
function jsonMessageLoader( url ) {
var deferred = $.Deferred();
$.getJSON( url )
.done( deferred.resolve )
.fail( function ( jqxhr, settings, exception ) {
$.i18n.log( 'Error in loading messages from ' + url + ' Exception: ' + exception );
// Ignore 404 exception, because we are handling fallabacks explicitly
deferred.resolve();
} );
return deferred.promise();
}
$.extend( $.i18n.messageStore, new MessageStore() );
}( jQuery, window ) );

View File

@ -0,0 +1,309 @@
/**
* jQuery Internationalization library
*
* Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar
*
* jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do
* anything special to choose one license or the other and you don't have to
* notify anyone which license you are using. You are free to use
* UniversalLanguageSelector in commercial projects as long as the copyright
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
*
* @licence GNU General Public Licence 2.0 or later
* @licence MIT License
*/
( function ( $ ) {
'use strict';
var MessageParser = function ( options ) {
this.options = $.extend( {}, $.i18n.parser.defaults, options );
this.language = $.i18n.languages[String.locale] || $.i18n.languages['default'];
this.emitter = $.i18n.parser.emitter;
};
MessageParser.prototype = {
constructor: MessageParser,
simpleParse: function ( message, parameters ) {
return message.replace( /\$(\d+)/g, function ( str, match ) {
var index = parseInt( match, 10 ) - 1;
return parameters[index] !== undefined ? parameters[index] : '$' + match;
} );
},
parse: function ( message, replacements ) {
if ( message.indexOf( '{{' ) < 0 ) {
return this.simpleParse( message, replacements );
}
this.emitter.language = $.i18n.languages[$.i18n().locale] ||
$.i18n.languages['default'];
return this.emitter.emit( this.ast( message ), replacements );
},
ast: function ( message ) {
var pipe, colon, backslash, anyCharacter, dollar, digits, regularLiteral,
regularLiteralWithoutBar, regularLiteralWithoutSpace, escapedOrLiteralWithoutBar,
escapedOrRegularLiteral, templateContents, templateName, openTemplate,
closeTemplate, expression, paramExpression, result,
pos = 0;
// Try parsers until one works, if none work return null
function choice( parserSyntax ) {
return function () {
var i, result;
for ( i = 0; i < parserSyntax.length; i++ ) {
result = parserSyntax[i]();
if ( result !== null ) {
return result;
}
}
return null;
};
}
// Try several parserSyntax-es in a row.
// All must succeed; otherwise, return null.
// This is the only eager one.
function sequence( parserSyntax ) {
var i, res,
originalPos = pos,
result = [];
for ( i = 0; i < parserSyntax.length; i++ ) {
res = parserSyntax[i]();
if ( res === null ) {
pos = originalPos;
return null;
}
result.push( res );
}
return result;
}
// Run the same parser over and over until it fails.
// Must succeed a minimum of n times; otherwise, return null.
function nOrMore( n, p ) {
return function () {
var originalPos = pos,
result = [],
parsed = p();
while ( parsed !== null ) {
result.push( parsed );
parsed = p();
}
if ( result.length < n ) {
pos = originalPos;
return null;
}
return result;
};
}
// Helpers -- just make parserSyntax out of simpler JS builtin types
function makeStringParser( s ) {
var len = s.length;
return function () {
var result = null;
if ( message.substr( pos, len ) === s ) {
result = s;
pos += len;
}
return result;
};
}
function makeRegexParser( regex ) {
return function () {
var matches = message.substr( pos ).match( regex );
if ( matches === null ) {
return null;
}
pos += matches[0].length;
return matches[0];
};
}
pipe = makeStringParser( '|' );
colon = makeStringParser( ':' );
backslash = makeStringParser( '\\' );
anyCharacter = makeRegexParser( /^./ );
dollar = makeStringParser( '$' );
digits = makeRegexParser( /^\d+/ );
regularLiteral = makeRegexParser( /^[^{}\[\]$\\]/ );
regularLiteralWithoutBar = makeRegexParser( /^[^{}\[\]$\\|]/ );
regularLiteralWithoutSpace = makeRegexParser( /^[^{}\[\]$\s]/ );
// There is a general pattern:
// parse a thing;
// if it worked, apply transform,
// otherwise return null.
// But using this as a combinator seems to cause problems
// when combined with nOrMore().
// May be some scoping issue.
function transform( p, fn ) {
return function () {
var result = p();
return result === null ? null : fn( result );
};
}
// Used to define "literals" within template parameters. The pipe
// character is the parameter delimeter, so by default
// it is not a literal in the parameter
function literalWithoutBar() {
var result = nOrMore( 1, escapedOrLiteralWithoutBar )();
return result === null ? null : result.join( '' );
}
function literal() {
var result = nOrMore( 1, escapedOrRegularLiteral )();
return result === null ? null : result.join( '' );
}
function escapedLiteral() {
var result = sequence( [ backslash, anyCharacter ] );
return result === null ? null : result[1];
}
choice( [ escapedLiteral, regularLiteralWithoutSpace ] );
escapedOrLiteralWithoutBar = choice( [ escapedLiteral, regularLiteralWithoutBar ] );
escapedOrRegularLiteral = choice( [ escapedLiteral, regularLiteral ] );
function replacement() {
var result = sequence( [ dollar, digits ] );
if ( result === null ) {
return null;
}
return [ 'REPLACE', parseInt( result[1], 10 ) - 1 ];
}
templateName = transform(
// see $wgLegalTitleChars
// not allowing : due to the need to catch "PLURAL:$1"
makeRegexParser( /^[ !"$&'()*,.\/0-9;=?@A-Z\^_`a-z~\x80-\xFF+\-]+/ ),
function ( result ) {
return result.toString();
}
);
function templateParam() {
var expr,
result = sequence( [ pipe, nOrMore( 0, paramExpression ) ] );
if ( result === null ) {
return null;
}
expr = result[1];
// use a "CONCAT" operator if there are multiple nodes,
// otherwise return the first node, raw.
return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
}
function templateWithReplacement() {
var result = sequence( [ templateName, colon, replacement ] );
return result === null ? null : [ result[0], result[2] ];
}
function templateWithOutReplacement() {
var result = sequence( [ templateName, colon, paramExpression ] );
return result === null ? null : [ result[0], result[2] ];
}
templateContents = choice( [
function () {
var res = sequence( [
// templates can have placeholders for dynamic
// replacement eg: {{PLURAL:$1|one car|$1 cars}}
// or no placeholders eg:
// {{GRAMMAR:genitive|{{SITENAME}}}
choice( [ templateWithReplacement, templateWithOutReplacement ] ),
nOrMore( 0, templateParam )
] );
return res === null ? null : res[0].concat( res[1] );
},
function () {
var res = sequence( [ templateName, nOrMore( 0, templateParam ) ] );
if ( res === null ) {
return null;
}
return [ res[0] ].concat( res[1] );
}
] );
openTemplate = makeStringParser( '{{' );
closeTemplate = makeStringParser( '}}' );
function template() {
var result = sequence( [ openTemplate, templateContents, closeTemplate ] );
return result === null ? null : result[1];
}
expression = choice( [ template, replacement, literal ] );
paramExpression = choice( [ template, replacement, literalWithoutBar ] );
function start() {
var result = nOrMore( 0, expression )();
if ( result === null ) {
return null;
}
return [ 'CONCAT' ].concat( result );
}
result = start();
/*
* For success, the pos must have gotten to the end of the input
* and returned a non-null.
* n.b. This is part of language infrastructure, so we do not throw an internationalizable message.
*/
if ( result === null || pos !== message.length ) {
throw new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + message );
}
return result;
}
};
$.extend( $.i18n.parser, new MessageParser() );
}( jQuery ) );

View File

@ -1,145 +0,0 @@
/*!
* JavaScript Cookie v2.0.4
* https://github.com/js-cookie/js-cookie
*
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
define(factory);
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
var _OldCookies = window.Cookies;
var api = window.Cookies = factory();
api.noConflict = function () {
window.Cookies = _OldCookies;
return api;
};
}
}(function () {
function extend () {
var i = 0;
var result = {};
for (; i < arguments.length; i++) {
var attributes = arguments[ i ];
for (var key in attributes) {
result[key] = attributes[key];
}
}
return result;
}
function init (converter) {
function api (key, value, attributes) {
var result;
// Write
if (arguments.length > 1) {
attributes = extend({
path: '/'
}, api.defaults, attributes);
if (typeof attributes.expires === 'number') {
var expires = new Date();
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
attributes.expires = expires;
}
try {
result = JSON.stringify(value);
if (/^[\{\[]/.test(result)) {
value = result;
}
} catch (e) {}
if (!converter.write) {
value = encodeURIComponent(String(value))
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
} else {
value = converter.write(value, key);
}
key = encodeURIComponent(String(key));
key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
key = key.replace(/[\(\)]/g, escape);
return (document.cookie = [
key, '=', value,
attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE
attributes.path && '; path=' + attributes.path,
attributes.domain && '; domain=' + attributes.domain,
attributes.secure ? '; secure' : ''
].join(''));
}
// Read
if (!key) {
result = {};
}
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling "get()"
var cookies = document.cookie ? document.cookie.split('; ') : [];
var rdecode = /(%[0-9A-Z]{2})+/g;
var i = 0;
for (; i < cookies.length; i++) {
var parts = cookies[i].split('=');
var name = parts[0].replace(rdecode, decodeURIComponent);
var cookie = parts.slice(1).join('=');
if (cookie.charAt(0) === '"') {
cookie = cookie.slice(1, -1);
}
try {
cookie = converter.read ?
converter.read(cookie, name) : converter(cookie, name) ||
cookie.replace(rdecode, decodeURIComponent);
if (this.json) {
try {
cookie = JSON.parse(cookie);
} catch (e) {}
}
if (key === name) {
result = cookie;
break;
}
if (!key) {
result[name] = cookie;
}
} catch (e) {}
}
return result;
}
api.get = api.set = api;
api.getJSON = function () {
return api.apply({
json: true
}, [].slice.call(arguments));
};
api.defaults = {};
api.remove = function (key, attributes) {
api(key, '', extend(attributes, {
expires: -1
}));
};
api.withConverter = init;
return api;
}
return init(function () {});
}));

View File

@ -245,8 +245,6 @@ JSONEditor.prototype = {
this.root_container = this.theme.getContainer(); this.root_container = this.theme.getContainer();
this.element.appendChild(this.root_container); this.element.appendChild(this.root_container);
this.translate = this.options.translate || JSONEditor.defaults.translate;
// Fetch all external refs via ajax // Fetch all external refs via ajax
this._loadExternalRefs(this.schema, function() { this._loadExternalRefs(this.schema, function() {
self._getDefinitions(self.schema); self._getDefinitions(self.schema);
@ -839,7 +837,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'required', property: 'required',
message: this.translate("error_notset") message: this.translate("edt_msg_error_notset")
}); });
// Can't do any more validation at this point // Can't do any more validation at this point
@ -853,7 +851,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'required', property: 'required',
message: this.translate("error_notset") message: this.translate("edt_msg_error_notset")
}); });
} }
// Not required, no further validation needed // Not required, no further validation needed
@ -872,7 +870,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'enum', property: 'enum',
message: this.translate("error_enum") message: this.translate("edt_msg_error_enum")
}); });
} }
} }
@ -904,7 +902,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'anyOf', property: 'anyOf',
message: this.translate('error_anyOf') message: this.translate('edt_msg_error_anyOf')
}); });
} }
} }
@ -930,7 +928,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'oneOf', property: 'oneOf',
message: this.translate('error_oneOf', [valid]) message: this.translate('edt_msg_error_oneOf', [valid])
}); });
errors = errors.concat(oneof_errors); errors = errors.concat(oneof_errors);
} }
@ -942,7 +940,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'not', property: 'not',
message: this.translate('error_not') message: this.translate('edt_msg_error_not')
}); });
} }
} }
@ -962,7 +960,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'type', property: 'type',
message: this.translate('error_type_union') message: this.translate('edt_msg_error_type_union')
}); });
} }
} }
@ -972,7 +970,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'type', property: 'type',
message: this.translate('error_type', [schema.type]) message: this.translate('edt_msg_error_type', [schema.type])
}); });
} }
} }
@ -994,7 +992,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'disallow', property: 'disallow',
message: this.translate('error_disallow_union') message: this.translate('edt_msg_error_disallow_union')
}); });
} }
} }
@ -1004,7 +1002,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'disallow', property: 'disallow',
message: this.translate('error_disallow', [schema.disallow]) message: this.translate('edt_msg_error_disallow', [schema.disallow])
}); });
} }
} }
@ -1035,7 +1033,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: schema.multipleOf? 'multipleOf' : 'divisibleBy', property: schema.multipleOf? 'multipleOf' : 'divisibleBy',
message: this.translate('error_multipleOf', [divisor]) message: this.translate('edt_msg_error_multipleOf', [divisor])
}); });
} }
} }
@ -1062,7 +1060,7 @@ JSONEditor.Validator = Class.extend({
path: path, path: path,
property: 'maximum', property: 'maximum',
message: this.translate( message: this.translate(
(schema.exclusiveMaximum?'error_maximum_excl':'error_maximum_incl'), (schema.exclusiveMaximum?'edt_msg_error_maximum_excl':'edt_msg_error_maximum_incl'),
[schema.maximum] [schema.maximum]
) )
}); });
@ -1091,7 +1089,7 @@ JSONEditor.Validator = Class.extend({
path: path, path: path,
property: 'minimum', property: 'minimum',
message: this.translate( message: this.translate(
(schema.exclusiveMinimum?'error_minimum_excl':'error_minimum_incl'), (schema.exclusiveMinimum?'edt_msg_error_minimum_excl':'edt_msg_error_minimum_incl'),
[schema.minimum] [schema.minimum]
) )
}); });
@ -1106,7 +1104,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'maxLength', property: 'maxLength',
message: this.translate('error_maxLength', [schema.maxLength]) message: this.translate('edt_msg_error_maxLength', [schema.maxLength])
}); });
} }
} }
@ -1117,7 +1115,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'minLength', property: 'minLength',
message: this.translate((schema.minLength===1?'error_notempty':'error_minLength'), [schema.minLength]) message: this.translate((schema.minLength===1?'edt_msg_error_notempty':'edt_msg_error_minLength'), [schema.minLength])
}); });
} }
} }
@ -1128,7 +1126,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'pattern', property: 'pattern',
message: this.translate('error_pattern', [schema.pattern]) message: this.translate('edt_msg_error_pattern', [schema.pattern])
}); });
} }
} }
@ -1159,7 +1157,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'additionalItems', property: 'additionalItems',
message: this.translate('error_additionalItems') message: this.translate('edt_msg_error_additionalItems')
}); });
break; break;
} }
@ -1184,7 +1182,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'maxItems', property: 'maxItems',
message: this.translate('error_maxItems', [schema.maxItems]) message: this.translate('edt_msg_error_maxItems', [schema.maxItems])
}); });
} }
} }
@ -1195,7 +1193,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'minItems', property: 'minItems',
message: this.translate('error_minItems', [schema.minItems]) message: this.translate('edt_msg_error_minItems', [schema.minItems])
}); });
} }
} }
@ -1209,7 +1207,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'uniqueItems', property: 'uniqueItems',
message: this.translate('error_uniqueItems') message: this.translate('edt_msg_error_uniqueItems')
}); });
break; break;
} }
@ -1230,7 +1228,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'maxProperties', property: 'maxProperties',
message: this.translate('error_maxProperties', [schema.maxProperties]) message: this.translate('edt_msg_error_maxProperties', [schema.maxProperties])
}); });
} }
} }
@ -1246,7 +1244,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'minProperties', property: 'minProperties',
message: this.translate('error_minProperties', [schema.minProperties]) message: this.translate('edt_msg_error_minProperties', [schema.minProperties])
}); });
} }
} }
@ -1258,7 +1256,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'required', property: 'required',
message: this.translate('error_required', [schema.required[i]]) message: this.translate('edt_msg_error_required', [schema.required[i]])
}); });
} }
} }
@ -1307,7 +1305,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'additionalProperties', property: 'additionalProperties',
message: this.translate('error_additional_properties', [i]) message: this.translate('edt_msg_error_additional_properties', [i])
}); });
break; break;
} }
@ -1339,7 +1337,7 @@ JSONEditor.Validator = Class.extend({
errors.push({ errors.push({
path: path, path: path,
property: 'dependencies', property: 'dependencies',
message: this.translate('error_dependency', [schema.dependencies[i][j]]) message: this.translate('edt_msg_error_dependency', [schema.dependencies[i][j]])
}); });
} }
} }
@ -1767,7 +1765,13 @@ JSONEditor.AbstractEditor = Class.extend({
return null; return null;
}, },
getTitle: function() { getTitle: function() {
return this.schema.title || this.key; if (this.schema.title == null)
return this.key;
else
return $.i18n(this.schema.title);
},
getAppend: function() {
return $.i18n(this.schema.append);
}, },
enable: function() { enable: function() {
this.disabled = false; this.disabled = false;
@ -1938,7 +1942,7 @@ JSONEditor.defaults.editors.string = JSONEditor.AbstractEditor.extend({
var self = this, i; var self = this, i;
if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle());
if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description);
if(this.schema.append) this.append = this.theme.getFormInputAppend(this.schema.append); if(this.schema.append) this.append = this.theme.getFormInputAppend(this.getAppend());
this.format = this.schema.format; this.format = this.schema.format;
if(!this.format && this.schema.media && this.schema.media.type) { if(!this.format && this.schema.media && this.schema.media.type) {
@ -2764,7 +2768,7 @@ JSONEditor.defaults.editors.object = JSONEditor.AbstractEditor.extend({
// Show/Hide button // Show/Hide button
this.collapsed = false; this.collapsed = false;
this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); this.toggle_button = this.getButton('','collapse',this.translate('edt_msg_button_collapse'));
this.title_controls.appendChild(this.toggle_button); this.title_controls.appendChild(this.toggle_button);
this.toggle_button.addEventListener('click',function(e) { this.toggle_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
@ -2772,12 +2776,12 @@ JSONEditor.defaults.editors.object = JSONEditor.AbstractEditor.extend({
if(self.collapsed) { if(self.collapsed) {
self.editor_holder.style.display = ''; self.editor_holder.style.display = '';
self.collapsed = false; self.collapsed = false;
self.setButtonText(self.toggle_button,'','collapse',self.translate('button_collapse')); self.setButtonText(self.toggle_button,'','collapse',self.translate('edt_msg_button_collapse'));
} }
else { else {
self.editor_holder.style.display = 'none'; self.editor_holder.style.display = 'none';
self.collapsed = true; self.collapsed = true;
self.setButtonText(self.toggle_button,'','expand',self.translate('button_expand')); self.setButtonText(self.toggle_button,'','expand',self.translate('edt_msg_button_expand'));
} }
}); });
@ -3376,7 +3380,10 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
if(!this.item_title) { if(!this.item_title) {
if(this.schema.items && !Array.isArray(this.schema.items)) { if(this.schema.items && !Array.isArray(this.schema.items)) {
var tmp = this.jsoneditor.expandRefs(this.schema.items); var tmp = this.jsoneditor.expandRefs(this.schema.items);
this.item_title = tmp.title || 'item'; if (typeof tmp.title == 'undefined')
this.item_title = 'item';
else
this.item_title = $.i18n(tmp.title);
} }
else { else {
this.item_title = 'item'; this.item_title = 'item';
@ -3429,7 +3436,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
var item_info = this.getItemInfo(i); var item_info = this.getItemInfo(i);
var schema = this.getItemSchema(i); var schema = this.getItemSchema(i);
schema = this.jsoneditor.expandRefs(schema); schema = this.jsoneditor.expandRefs(schema);
schema.title = item_info.title+' '+(i+1); schema.title = $.i18n(item_info.title)+' '+(i+1);
var editor = this.jsoneditor.getEditorClass(schema); var editor = this.jsoneditor.getEditorClass(schema);
@ -3712,7 +3719,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
// Buttons to delete row, move row up, and move row down // Buttons to delete row, move row up, and move row down
if(!self.hide_delete_buttons) { if(!self.hide_delete_buttons) {
self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete',this.translate('button_delete_row_title',[self.getItemTitle()])); self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete',this.translate('edt_msg_button_delete_row_title',[self.getItemTitle()]));
self.rows[i].delete_button.className += ' delete'; self.rows[i].delete_button.className += ' delete';
self.rows[i].delete_button.setAttribute('data-i',i); self.rows[i].delete_button.setAttribute('data-i',i);
self.rows[i].delete_button.addEventListener('click',function(e) { self.rows[i].delete_button.addEventListener('click',function(e) {
@ -3754,7 +3761,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
} }
if(i && !self.hide_move_buttons) { if(i && !self.hide_move_buttons) {
self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title')); self.rows[i].moveup_button = this.getButton('','moveup',this.translate('edt_msg_button_move_up_title'));
self.rows[i].moveup_button.className += ' moveup'; self.rows[i].moveup_button.className += ' moveup';
self.rows[i].moveup_button.setAttribute('data-i',i); self.rows[i].moveup_button.setAttribute('data-i',i);
self.rows[i].moveup_button.addEventListener('click',function(e) { self.rows[i].moveup_button.addEventListener('click',function(e) {
@ -3781,7 +3788,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
} }
if(!self.hide_move_buttons) { if(!self.hide_move_buttons) {
self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title')); self.rows[i].movedown_button = this.getButton('','movedown',this.translate('edt_msg_button_move_down_title'));
self.rows[i].movedown_button.className += ' movedown'; self.rows[i].movedown_button.className += ' movedown';
self.rows[i].movedown_button.setAttribute('data-i',i); self.rows[i].movedown_button.setAttribute('data-i',i);
self.rows[i].movedown_button.addEventListener('click',function(e) { self.rows[i].movedown_button.addEventListener('click',function(e) {
@ -3813,7 +3820,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
var self = this; var self = this;
this.collapsed = false; this.collapsed = false;
this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); this.toggle_button = this.getButton('','collapse',this.translate('edt_msg_button_collapse'));
this.title_controls.appendChild(this.toggle_button); this.title_controls.appendChild(this.toggle_button);
var row_holder_display = self.row_holder.style.display; var row_holder_display = self.row_holder.style.display;
var controls_display = self.controls.style.display; var controls_display = self.controls.style.display;
@ -3826,7 +3833,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
self.row_holder.style.display = row_holder_display; self.row_holder.style.display = row_holder_display;
if(self.tabs_holder) self.tabs_holder.style.display = ''; if(self.tabs_holder) self.tabs_holder.style.display = '';
self.controls.style.display = controls_display; self.controls.style.display = controls_display;
self.setButtonText(this,'','collapse',self.translate('button_collapse')); self.setButtonText(this,'','collapse',self.translate('edt_msg_button_collapse'));
} }
else { else {
self.collapsed = true; self.collapsed = true;
@ -3834,7 +3841,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
if(self.tabs_holder) self.tabs_holder.style.display = 'none'; if(self.tabs_holder) self.tabs_holder.style.display = 'none';
self.controls.style.display = 'none'; self.controls.style.display = 'none';
if(self.panel) self.panel.style.display = 'none'; if(self.panel) self.panel.style.display = 'none';
self.setButtonText(this,'','expand',self.translate('button_expand')); self.setButtonText(this,'','expand',self.translate('edt_msg_button_expand'));
} }
}); });
@ -3852,7 +3859,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
} }
// Add "new row" and "delete last" buttons below editor // Add "new row" and "delete last" buttons below editor
this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()])); this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('edt_msg_button_add_row_title',[this.getItemTitle()]));
this.add_row_button.addEventListener('click',function(e) { this.add_row_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
@ -3875,7 +3882,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
}); });
self.controls.appendChild(this.add_row_button); self.controls.appendChild(this.add_row_button);
this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()])); this.delete_last_row_button = this.getButton(this.translate('edt_msg_button_delete_last',[this.getItemTitle()]),'delete',this.translate('edt_msg_button_delete_last_title',[this.getItemTitle()]));
this.delete_last_row_button.addEventListener('click',function(e) { this.delete_last_row_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -3894,7 +3901,7 @@ JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({
}); });
self.controls.appendChild(this.delete_last_row_button); self.controls.appendChild(this.delete_last_row_button);
this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title')); this.remove_all_rows_button = this.getButton(this.translate('edt_msg_button_delete_all'),'delete',this.translate('edt_msg_button_delete_all_title'));
this.remove_all_rows_button.addEventListener('click',function(e) { this.remove_all_rows_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -4010,7 +4017,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
this.container.appendChild(this.description); this.container.appendChild(this.description);
} }
if(this.schema.append) { if(this.schema.append) {
this.append = this.theme.getAppend(this.schema.append); this.append = this.theme.getAppend(this.getAppend());
this.container.appendChild(this.append); this.container.appendChild(this.append);
} }
this.panel = this.theme.getIndentedPanel(); this.panel = this.theme.getIndentedPanel();
@ -4284,7 +4291,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
// Buttons to delete row, move row up, and move row down // Buttons to delete row, move row up, and move row down
if(!this.hide_delete_buttons) { if(!this.hide_delete_buttons) {
self.rows[i].delete_button = this.getButton('','delete',this.translate('button_delete_row_title_short')); self.rows[i].delete_button = this.getButton('','delete',this.translate('edt_msg_button_delete_row_title_short'));
self.rows[i].delete_button.className += ' delete'; self.rows[i].delete_button.className += ' delete';
self.rows[i].delete_button.setAttribute('data-i',i); self.rows[i].delete_button.setAttribute('data-i',i);
self.rows[i].delete_button.addEventListener('click',function(e) { self.rows[i].delete_button.addEventListener('click',function(e) {
@ -4307,7 +4314,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
if(i && !this.hide_move_buttons) { if(i && !this.hide_move_buttons) {
self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title')); self.rows[i].moveup_button = this.getButton('','moveup',this.translate('edt_msg_button_move_up_title'));
self.rows[i].moveup_button.className += ' moveup'; self.rows[i].moveup_button.className += ' moveup';
self.rows[i].moveup_button.setAttribute('data-i',i); self.rows[i].moveup_button.setAttribute('data-i',i);
self.rows[i].moveup_button.addEventListener('click',function(e) { self.rows[i].moveup_button.addEventListener('click',function(e) {
@ -4328,7 +4335,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
} }
if(!this.hide_move_buttons) { if(!this.hide_move_buttons) {
self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title')); self.rows[i].movedown_button = this.getButton('','movedown',this.translate('edt_msg_button_move_down_title'));
self.rows[i].movedown_button.className += ' movedown'; self.rows[i].movedown_button.className += ' movedown';
self.rows[i].movedown_button.setAttribute('data-i',i); self.rows[i].movedown_button.setAttribute('data-i',i);
self.rows[i].movedown_button.addEventListener('click',function(e) { self.rows[i].movedown_button.addEventListener('click',function(e) {
@ -4353,7 +4360,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
var self = this; var self = this;
this.collapsed = false; this.collapsed = false;
this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); this.toggle_button = this.getButton('','collapse',this.translate('edt_msg_button_collapse'));
if(this.title_controls) { if(this.title_controls) {
this.title_controls.appendChild(this.toggle_button); this.title_controls.appendChild(this.toggle_button);
this.toggle_button.addEventListener('click',function(e) { this.toggle_button.addEventListener('click',function(e) {
@ -4363,12 +4370,12 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
if(self.collapsed) { if(self.collapsed) {
self.collapsed = false; self.collapsed = false;
self.panel.style.display = ''; self.panel.style.display = '';
self.setButtonText(this,'','collapse',self.translate('button_collapse')); self.setButtonText(this,'','collapse',self.translate('edt_msg_button_collapse'));
} }
else { else {
self.collapsed = true; self.collapsed = true;
self.panel.style.display = 'none'; self.panel.style.display = 'none';
self.setButtonText(this,'','expand',self.translate('button_expand')); self.setButtonText(this,'','expand',self.translate('edt_msg_button_expand'));
} }
}); });
@ -4387,7 +4394,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
} }
// Add "new row" and "delete last" buttons below editor // Add "new row" and "delete last" buttons below editor
this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()])); this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('edt_msg_button_add_row_title',[this.getItemTitle()]));
this.add_row_button.addEventListener('click',function(e) { this.add_row_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -4399,7 +4406,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
}); });
self.controls.appendChild(this.add_row_button); self.controls.appendChild(this.add_row_button);
this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()])); this.delete_last_row_button = this.getButton(this.translate('edt_msg_button_delete_last',[this.getItemTitle()]),'delete',this.translate('edt_msg_button_delete_last_title',[this.getItemTitle()]));
this.delete_last_row_button.addEventListener('click',function(e) { this.delete_last_row_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -4411,7 +4418,7 @@ JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({
}); });
self.controls.appendChild(this.delete_last_row_button); self.controls.appendChild(this.delete_last_row_button);
this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title')); this.remove_all_rows_button = this.getButton(this.translate('edt_msg_button_delete_all'),'delete',this.translate('edt_msg_button_delete_all_title'));
this.remove_all_rows_button.addEventListener('click',function(e) { this.remove_all_rows_button.addEventListener('click',function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -4998,7 +5005,7 @@ JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({
var self = this; var self = this;
if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle());
if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description);
if(this.schema.append) this.append = this.theme.getFormInputAppend(this.schema.append); if(this.schema.append) this.append = this.theme.getFormInputAppend(this.getAppend());
if(this.options.compact) this.container.className += ' compact'; if(this.options.compact) this.container.className += ' compact';
@ -5345,7 +5352,7 @@ JSONEditor.defaults.editors.selectize = JSONEditor.AbstractEditor.extend({
var self = this; var self = this;
if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle());
if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description);
if(this.schema.append) this.append = this.theme.getFormInputAppend(this.schema.append); if(this.schema.append) this.append = this.theme.getFormInputAppend(this.getAppend());
if(this.options.compact) this.container.className += ' compact'; if(this.options.compact) this.container.className += ' compact';
@ -5573,7 +5580,7 @@ JSONEditor.defaults.editors.multiselect = JSONEditor.AbstractEditor.extend({
var self = this, i; var self = this, i;
if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle());
if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description);
if(this.schema.append) this.append = this.theme.getFormInputAppend(this.schema.append); if(this.schema.append) this.append = this.theme.getFormInputAppend(this.getAppend());
if((!this.schema.format && this.option_keys.length < 8) || this.schema.format === "checkbox") { if((!this.schema.format && this.option_keys.length < 8) || this.schema.format === "checkbox") {
this.input_type = 'checkboxes'; this.input_type = 'checkboxes';
@ -6053,7 +6060,7 @@ JSONEditor.defaults.editors.arraySelectize = JSONEditor.AbstractEditor.extend({
this.description = this.theme.getDescription(this.schema.description); this.description = this.theme.getDescription(this.schema.description);
} }
if(this.schema.append) { if(this.schema.append) {
this.append = this.theme.getAppend(this.schema.append); this.append = this.theme.getAppend(this.getAppend());
} }
this.input = document.createElement('select'); this.input = document.createElement('select');
@ -6880,199 +6887,9 @@ JSONEditor.defaults.options = {};
// String translate function // String translate function
JSONEditor.defaults.translate = function(key, variables) { JSONEditor.defaults.translate = function(key, variables) {
var lang = JSONEditor.defaults.languages[JSONEditor.defaults.language];
if(!lang) throw "Unknown language "+JSONEditor.defaults.language;
var string = lang[key] || JSONEditor.defaults.languages[JSONEditor.defaults.default_language][key]; return $.i18n(key, variables);
if(typeof string === "undefined") throw "Unknown translate string "+key;
if(variables) {
for(var i=0; i<variables.length; i++) {
string = string.replace(new RegExp('\\{\\{'+i+'}}','g'),variables[i]);
}
}
return string;
};
// Translation strings and default languages
JSONEditor.defaults.default_language = 'en';
JSONEditor.defaults.language = JSONEditor.defaults.default_language;
JSONEditor.defaults.languages.en = {
/**
* When a property is not set
*/
error_notset: "Property must be set",
/**
* When a string must not be empty
*/
error_notempty: "Value required",
/**
* When a value is not one of the enumerated values
*/
error_enum: "Value must be one of the enumerated values",
/**
* When a value doesn't validate any schema of a 'anyOf' combination
*/
error_anyOf: "Value must validate against at least one of the provided schemas",
/**
* When a value doesn't validate
* @variables This key takes one variable: The number of schemas the value does not validate
*/
error_oneOf: 'Value must validate against exactly one of the provided schemas. It currently validates against {{0}} of the schemas.',
/**
* When a value does not validate a 'not' schema
*/
error_not: "Value must not validate against the provided schema",
/**
* When a value does not match any of the provided types
*/
error_type_union: "Value must be one of the provided types",
/**
* When a value does not match the given type
* @variables This key takes one variable: The type the value should be of
*/
error_type: "Value must be of type {{0}}",
/**
* When the value validates one of the disallowed types
*/
error_disallow_union: "Value must not be one of the provided disallowed types",
/**
* When the value validates a disallowed type
* @variables This key takes one variable: The type the value should not be of
*/
error_disallow: "Value must not be of type {{0}}",
/**
* When a value is not a multiple of or divisible by a given number
* @variables This key takes one variable: The number mentioned above
*/
error_multipleOf: "Value must be a multiple of {{0}}",
/**
* When a value is greater than it's supposed to be (exclusive)
* @variables This key takes one variable: The maximum
*/
error_maximum_excl: "Value must be less than {{0}}",
/**
* When a value is greater than it's supposed to be (inclusive
* @variables This key takes one variable: The maximum
*/
error_maximum_incl: "Value must be at most {{0}}",
/**
* When a value is lesser than it's supposed to be (exclusive)
* @variables This key takes one variable: The minimum
*/
error_minimum_excl: "Value must be greater than {{0}}",
/**
* When a value is lesser than it's supposed to be (inclusive)
* @variables This key takes one variable: The minimum
*/
error_minimum_incl: "Value must be at least {{0}}",
/**
* When a value have too many characters
* @variables This key takes one variable: The maximum character count
*/
error_maxLength: "Value must be at most {{0}} characters long",
/**
* When a value does not have enough characters
* @variables This key takes one variable: The minimum character count
*/
error_minLength: "Value must be at least {{0}} characters long",
/**
* When a value does not match a given pattern
*/
error_pattern: "Value must match the pattern {{0}}",
/**
* When an array has additional items whereas it is not supposed to
*/
error_additionalItems: "No additional items allowed in this array",
/**
* When there are to many items in an array
* @variables This key takes one variable: The maximum item count
*/
error_maxItems: "Value must have at most {{0}} items",
/**
* When there are not enough items in an array
* @variables This key takes one variable: The minimum item count
*/
error_minItems: "Value must have at least {{0}} items",
/**
* When an array is supposed to have unique items but has duplicates
*/
error_uniqueItems: "Array must have unique items",
/**
* When there are too many properties in an object
* @variables This key takes one variable: The maximum property count
*/
error_maxProperties: "Object must have at most {{0}} properties",
/**
* When there are not enough properties in an object
* @variables This key takes one variable: The minimum property count
*/
error_minProperties: "Object must have at least {{0}} properties",
/**
* When a required property is not defined
* @variables This key takes one variable: The name of the missing property
*/
error_required: "Object is missing the required property '{{0}}'",
/**
* When there is an additional property is set whereas there should be none
* @variables This key takes one variable: The name of the additional property
*/
error_additional_properties: "No additional properties allowed, but property {{0}} is set",
/**
* When a dependency is not resolved
* @variables This key takes one variable: The name of the missing property for the dependency
*/
error_dependency: "Must have property {{0}}",
/**
* Text on Delete All buttons
*/
button_delete_all: "All",
/**
* Title on Delete All buttons
*/
button_delete_all_title: "Delete All",
/**
* Text on Delete Last buttons
* @variable This key takes one variable: The title of object to delete
*/
button_delete_last: "Last {{0}}",
/**
* Title on Delete Last buttons
* @variable This key takes one variable: The title of object to delete
*/
button_delete_last_title: "Delete Last {{0}}",
/**
* Title on Add Row buttons
* @variable This key takes one variable: The title of object to add
*/
button_add_row_title: "Add {{0}}",
/**
* Title on Move Down buttons
*/
button_move_down_title: "Move down",
/**
* Title on Move Up buttons
*/
button_move_up_title: "Move up",
/**
* Title on Delete Row buttons
* @variable This key takes one variable: The title of object to delete
*/
button_delete_row_title: "Delete {{0}}",
/**
* Title on Delete Row buttons, short version (no parameter with the object title)
*/
button_delete_row_title_short: "Delete",
/**
* Title on Collapse buttons
*/
button_collapse: "Collapse",
/**
* Title on Expand buttons
*/
button_expand: "Expand"
}; };
// Miscellaneous Plugin Settings // Miscellaneous Plugin Settings

View File

@ -143,3 +143,7 @@ function createSel(array, group){
return el; return el;
} }
} }
function performTranslation(){
$('#wrapper').i18n();
}

View File

@ -1,167 +0,0 @@
{
"token": {
"general_country_de" : "Deutschland",
"general_country_us" : "Amerika",
"general_country_uk" : "England",
"general_country_fr" : "Frankreich",
"general_country_es" : "Spanien",
"general_country_it" : "Italien",
"general_country_nl" : "Niederlande",
"general_speech_de" : "Deutsch",
"general_speech_en" : "Englisch",
"general_comp_SMOOTHING" : "Glättung",
"general_comp_BLACKBORDER" : "Schwarze Balken Erkennung",
"general_comp_KODICHECKER" : "Kodi Überwachung",
"general_comp_FORWARDER" : "JSON/PROTO Weiterleitung",
"general_comp_UDPLISTENER" : "UDP Listener",
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
"general_comp_GRABBER" : "Plattform Aufnahme",
"general_comp_V4L" : "USB Aufnahme",
"general_button_savesettings" : "Einstellungen speichern",
"dashboard_label_intro" : "Das Dashboard zeigt dir Informationen zum Systemstatus, ob Updates verfügbar sind, den Komponentenstatus sowie die letzten Blog-Posts vom Hyperion Team.",
"dashboard_infobox_label_title" : "Informationen",
"dashboard_infobox_label_currenthyp" : "Deine Hyperion Version:",
"dashboard_infobox_label_latesthyp" : "Aktuellste Hyperion Version:",
"dashboard_infobox_label_leddevice" : "LED Typ:",
"dashboard_infobox_label_device" : "Systeminformation:",
"dashboard_infobox_message_updatewarning" : "Eine aktuellere Version von Hyperion ist verfügbar!",
"dashboard_infobox_message_updatesuccess" : "Du nutzt die aktuellste Version von Hyperion.",
"dashboard_componentbox_label_title" : "Komponenten Status",
"dashboard_componentbox_label_comp" : "Komponente",
"dashboard_componentbox_label_status" : "Status",
"dashboard_newsbox_label_title" : "Die letzten Blogposts",
"dashboard_alert_message_confedit" : "Deine Hyperion Konfiguration wurde verändert. Um die Änderungen anzuwenden, starte Hyperion neu.",
"dashboard_alert_button_restarthyerion" : "Hyperion neustarten",
"main_menu_dashboard_token" : "Dashboard",
"main_menu_configuration_token" : "Konfiguration",
"main_menu_leds_conf_token" : "LED Hardware",
"main_menu_grabber_conf_token" : "Aufnahme Hardware",
"main_menu_effect_conf_token" : "Effekte",
"main_menu_colors_conf_token" : "Bildverarbeitung",
"main_menu_kodiwatch_token" : "Kodi Überwachung",
"main_menu_network_conf_token" : "Netzwerk",
"main_menu_remotecontrol_token" : "Fernbedienung",
"main_menu_effectsconfigurator_token" : "Effekt Konfigurator",
"main_menu_support_token" : "Hilfe",
"main_menu_update_token" : "Update",
"main_menu_system_token" : "System",
"main_menu_input_selection_token" : "Eingabeauswahl",
"conf_effects_label_intro" : "Stelle einen Effekt oder Farbe ein, der beim Starten sichtbar sein soll. Stelle einen Hintergrundeffekt/Farbe ein der erst sichtbar wird, wenn alle Bildquellen abgeschaltet sind (Das gilt ebenfalls für temporäres abschalten mithilfe der Kodi Überwachung).",
"conf_leds_label_intro" : "Der LED Hardware bereich ermöglicht eine Vielzahl von Ausgabemöglichkeiten über Raspberry Pi GPIO, USB oder Netzwerk. Erstelle ein LED Layout das zu deinem Aufbau passt und schon kann es losgehen!",
"conf_leds_nav_label_ledcontroller" : "LED Steuerung",
"conf_leds_nav_label_ledlayout" : "LED Layout",
"conf_leds_nav_label_ledtesting" : "LED Test",
"conf_leds_contr_label_contrtype" : "Steuerungstyp:",
"conf_leds_layout_frame" : "Klassisches Layout (Rahmen)",
"conf_leds_layout_matrix" : "Matrix Layout (LED Wand)",
"conf_leds_layout_generatedconf" : "Generierte/Aktuelle Konfiguration",
"conf_leds_layout_button_savelay" : "Speichere Layout",
"conf_leds_layout_button_updsim" : "Aktualisiere Vorschau",
"conf_leds_layout_peview" : "LED Layout Vorschau",
"conf_leds_layout_advanced" : "Erweiterte Optionen",
"conf_leds_layout_preview_originCL" : "Erstellt von: Klassisches Layout (Rahmen)",
"conf_leds_layout_preview_originTEXT" : "Erstellt von: Textfeld",
"conf_leds_layout_preview_originMA" : "Erstellt von: Matrix Layout (LED Wand)",
"conf_leds_layout_preview_empty" : "Es wurde keine Vorschau angefordert",
"conf_leds_layout_cl_top" : "Oben",
"conf_leds_layout_cl_bottom" : "Unten",
"conf_leds_layout_cl_left" : "Links",
"conf_leds_layout_cl_right" : "Rechts",
"conf_leds_layout_cl_gaglength" : "Lückenlänge",
"conf_leds_layout_cl_gappos" : "Lückenposition",
"conf_leds_layout_cl_inppos" : "Einspeisepunkt",
"conf_leds_layout_cl_reversdir" : "Richtung umkehren",
"conf_leds_layout_cl_hleddepth" : "Horizontale LED Tiefe",
"conf_leds_layout_cl_vleddepth" : "Vertikale LED Tiefe",
"conf_leds_layout_cl_generate" : "Generiere Konfiguartion",
"conf_leds_layout_cl_edgegap" : "Rahmenabstand",
"conf_leds_layout_cl_cornergap" : "Eckabstand",
"conf_leds_layout_ma_horiz" : "Horizontal",
"conf_leds_layout_ma_vert" : "Vertical",
"conf_leds_layout_ma_cabling" : "Verkabelung",
"conf_leds_layout_ma_optsnake" : "Schlange",
"conf_leds_layout_ma_optparallel" : "Parallel",
"conf_leds_layout_ma_order" : "Reihenfolge",
"conf_leds_layout_ma_opthoriz" : "Horizontal",
"conf_leds_layout_ma_optvert" : "Vertikal",
"conf_leds_layout_ma_position" : "Einpeisung",
"conf_leds_layout_ma_opttopleft" : "Oben links",
"conf_leds_layout_ma_opttopright" : "Oben rechts",
"conf_leds_layout_ma_optbottomleft" : "Unten links",
"conf_leds_layout_ma_optbottomright" : "Unten rechts",
"conf_leds_layout_textf1" : "Das Textfeld zeigt dir dein aktuell geladenes Layout, sofern du kein neues Layout mit den Optionen oben erstellt hast. Optional kann man die Werte hier weiter bearbeiten.",
"conf_leds_layout_textf2" : "Vergiss nicht zu speichern!",
"conf_leds_test_button_toggleleds" : "LEDs",
"conf_leds_test_button_togglelednumber" : "LED Nummerierung",
"conf_leds_test_button_toggleliveleds" : "LED Echtzeitansicht",
"conf_grabber_label_intro" : "Hyperion unterstützt 2 Hauptarten wie Bilder aufgenommen werden können. Zum Einen die Plattform Aufnahme, die sich direkt am System bedient auf dem Hyperion läuft (beste Qualität). Zum Anderen die USB Aufnahme, die sich an einem angeschlossenen Gerät bedient die benötigten Informationen für die Verarbeitung und Ausgabe zu erhalten (Mehr Konfigurationsaufwand und Kalibrierung)",
"conf_colors_label_intro" : "Neben der Farbkalibrierung, gehört auch die Glättung (sanfte Farbübergänge) und die Erkennung von störenden (schwarzen) Balken zur Bildverarbeitung.",
"conf_network_label_intro" : "Alle Einstellungen zu Ports, der Weiterleitung von JSON/PROTO und Boblight sowie UDP Listener.",
"conf_kodi_label_title" : "Kodi Überwachung",
"conf_kodi_label_intro" : "Die Kodi Überwachung ermöglicht es dir abhängig von dem Kodi Status dein ambient light an oder abzuschalten. Dies ist nicht limitiert auf das selbe Gerät. Du kannst jedes Kodi in deinem lokalen Netzwerk überwachen lassen.",
"remote_label_intro" : "Die Fernbedienung ermöglicht dir während Hyperion läuft Farbe/Effekte zu starten/setzen, aber auch eine Quelle manuell festzulegen. Die Komponentensteuerung ermöglicht es dir gezielt Teile von Hyperion zu aktivieren/deaktivieren. Beachte, dass nach einem Neustart die hier durchgeführten Aktionen wieder zurückgesetzt werden.",
"remote_colors_label_coloreffect" : "Farbe/Effekt:",
"remote_colors_button_reset" : "Farbe/Effekt zurücksetzen",
"remote_colors_label_color" : "Farbe:",
"remote_effects_label_effects" : "Effekt:",
"remote_input_label_sourceselection" : "Quellenauswahl",
"remote_input_label_autoselect" : "Automatische Auswahl",
"remote_components_label_components" : "Komponentensteuerung",
"remote_effects_intro" : "Die Effekt-Fernbedienung ermöglicht es dir Effekte zu starten für Demonstrations- oder Testzwecke. Vergessse nicht den Effekt wieder zu stoppen, wenn du fertig bist.",
"remote_components_intro" : "Die Komponenten-Fenbedienung ermöglicht es dir Komponenten von Hyperion zu starten und stoppen. Beachte: Dies ist nur temporär und geht nach einem Neustart verloren. Möchtest du dauerhaft Komponenten aktivieren/deaktivieren benutze die Konfigurationsseiten.",
"hue_button_create_user_token" : "Benutzer anlegen",
"hue_press_link_modal" : "Bitte Link Taste auf der Hue Bridge drücken.",
"hue_failure_connection_token" : "Connection Timeout. Bitte drücke die Taste rechtzeitig.",
"hue_button_pair" : "Verbinden",
"hue_failure_ip_token" : "Bitte überprüfe deine IP Adresse.",
"hue_label_username" : "Benutzername:",
"effectsconfigurator_label_intro" : "Erstelle auf Grundlage der Basiseffekte neue Effekt die nach deinen Wünschen angepasst sind. Je nach Effekt stehen Optionen wie Farbe, Geschwindigkeit, oder Richtung und vieles mehr zur Auswahl.",
"effectsconfigurator_label_chooseeff" : "Basis-Effekt auswählen:",
"effectsconfigurator_button_saveeffect" : "Effekt speichern",
"effectsconfigurator_label_effectname" : "Effektname:",
"effectsconfigurator_button_starttest" : "Starte Effekttest",
"effectsconfigurator_button_stoptest" : "Stoppe Effekttest",
"effectsconfigurator_button_conttest" : "Fortlaufender Test",
"effectsconfigurator_label_deleffect" : "Effekt entfernen:",
"effectsconfigurator_button_deleffect" : "Effekt entfernen",
"support_label_title" : "Unterstütze Hyperion",
"support_label_intro" : "Hyperion ist ein kostenloses Open Source Projekt und ein kleines Team arbeitet an seiner Weiterentwicklung. Darum benötigen wir DEINE Unterstützung um den Ball weiter rollen zu lassen und um weiter in bessere Infrastruktur und Weiterentwicklung investieren zu können.",
"support_label_spreadtheword" : "Weitersagen!",
"support_label_fbtext" : "Teile Inhalte in Facebook und halte dich und andere auf dem Laufenden",
"support_label_twtext" : "Nutze die 140 Zeichen und bleibe auf dem Laufenden auch auf Twitter",
"support_label_ggtext" : "Platziere uns in deinen Kreisen auf Google+",
"support_label_yttext" : "Gelangweilt von Bildern? Werfe einen Blick auf unsere Youtube Videos",
"support_label_donate" : "Spende oder füge unsere Affiliate Links als Lesezeichen hinzu",
"support_label_affinstr1" : "Klicke auf den Link deines Landes",
"support_label_affinstr2" : "Kaufe wie gewohnt ein, abhängig von deinem Umsatz bekommen wir eine kleine Provision",
"support_label_affinstr3" : "Du zahlst immer den selben Preis. Teste es!",
"support_label_btctext" : "Adresse:",
"support_label_donationpp" : "Spende:",
"support_label_webrestitle" : "Informationsquellen und Hilfe",
"support_label_webpagetitle" : "Internetseite",
"support_label_webpagetext" : "Das Zuhause von Hyperion",
"support_label_wikititle" : "Wiki",
"support_label_wikitext" : "Von A bis Z - Alles wissenwerte zu Hyperion",
"support_label_forumtitle" : "Forum",
"support_label_forumtext" : "Diskussion und Hilfestellung von der Community",
"update_label_intro" : "Diese Seite zeigt dir alle verfügbaren Versionen von Hyperion, du kannst nach Belieben eine aktuellere Version installieren oder eine Ältere. Die aktuellsten Versionen befinden sich immer oben.",
"update_label_description" : "Beschreibung:",
"update_button_install" : "Installieren",
"update_button_changelog" : "Zeige Änderungsprotokoll",
"update_label_type" : "Art:",
"info_conlost_label_title" : "Verbindung zum Hyperion Service unterbrochen!",
"info_conlost_label_reason" : "Mögliche Ursachen:",
"info_conlost_label_reason1" : "- Hyperion startet neu",
"info_conlost_label_reason2" : "- Ein Update wird durchgeführt",
"info_conlost_label_reason3" : "- Hyperion wird nicht mehr ausgeführt",
"info_conlost_label_autorecon" : "Du wirst verbunden, sobald Hyperion wieder verfügbar ist",
"info_conlost_label_autorefresh" : "Diese Seite wird automatisch aktualisiert",
"info_conlost_label_reload" : "Wenn nicht, klicke hier"
},
"regex": [
["^Something at start of text", ""],
["This will be case insensitive", "i", ""]
]
}

View File

@ -1,20 +1,20 @@
{ {
"type":"object", "type":"object",
"script" : "fade.py", "script" : "fade.py",
"title":"Fade", "title":"edt_eff_fade_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"fade-time": { "fade-time": {
"type": "number", "type": "number",
"title":"Fade Time", "title":"edt_eff_fadetime_title",
"default": 5.0, "default": 5.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "s", "append" : "edt_append_s",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"color-start": { "color-start": {
"type": "array", "type": "array",
"title":"Color Start", "title":"edt_eff_colorstart_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,174,11], "default": [255,174,11],
"items" : { "items" : {
@ -29,7 +29,7 @@
}, },
"color-end": { "color-end": {
"type": "array", "type": "array",
"title":"Color End", "title":"edt_eff_colorend_title",
"format":"colorpicker", "format":"colorpicker",
"default": [100,100,100], "default": [100,100,100],
"items" : { "items" : {

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "knight-rider.py", "script" : "knight-rider.py",
"title":"Knight Rider", "title":"edt_eff_knightrider_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"Color", "title":"edt_eff_color_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,7 +20,7 @@
}, },
"speed": { "speed": {
"type": "number", "type": "number",
"title":"Speed", "title":"edt_eff_speed_title",
"default": 1.0, "default": 1.0,
"minimum": 0.1, "minimum": 0.1,
"step" : 0.1, "step" : 0.1,
@ -28,7 +28,7 @@
}, },
"fadeFactor": { "fadeFactor": {
"type": "number", "type": "number",
"title":"Fade Factor", "title":"edt_eff_fadefactor_title",
"default": 0.7, "default": 0.7,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 0.9, "maximum" : 0.9,

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "light-clock.py", "script" : "light-clock.py",
"title":"Light clock", "title":"edt_eff_lightclock_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"show_seconds": { "show_seconds": {
"type": "boolean", "type": "boolean",
"title":"Show seconds", "title":"edt_eff_showseconds_title",
"default": true, "default": true,
"propertyOrder" : 1 "propertyOrder" : 1
} }

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "mood-blobs.py", "script" : "mood-blobs.py",
"title":"Mood Blobs", "title":"edt_eff_moodblobs_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"Color", "title":"edt_eff_color_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,68 +20,69 @@
}, },
"blobs": { "blobs": {
"type": "integer", "type": "integer",
"title":"Blob count", "title":"edt_eff_blobcount_title",
"default": 5, "default": 5,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"rotationTime": { "rotationTime": {
"type": "number", "type": "number",
"title":"Rotation time", "title":"edt_eff_rotationtime_title",
"default": 20.0, "default": 20.0,
"minimum" : 1.0, "minimum" : 1.0,
"append" : "edt_append_s",
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"hueChange": { "hueChange": {
"type": "number", "type": "number",
"title":"Hue change", "title":"edt_eff_huechange_title",
"default": 60.0, "default": 60.0,
"minimum" : 1.0, "minimum" : 1.0,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"Reverse direction", "title":"edt_eff_reversedirection_title",
"default": false, "default": false,
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"colorRandom": { "colorRandom": {
"type": "boolean", "type": "boolean",
"title":"Random color", "title":"edt_eff_colorrandom_title",
"default": false, "default": false,
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"baseChange": { "baseChange": {
"type": "boolean", "type": "boolean",
"title":"Base color change", "title":"edt_eff_basecolorchange_title",
"default": false, "default": false,
"propertyOrder" : 7 "propertyOrder" : 7
}, },
"baseColorRangeLeft": { "baseColorRangeLeft": {
"type": "number", "type": "number",
"title":"baseColorRangeLeft", "title":"edt_eff_basecolorrangeleft_title",
"default": 0.0, "default": 0.0,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 360.0, "maximum" : 360.0,
"append" : "° (Degree)", "append" : "edt_append_degree",
"propertyOrder" : 8 "propertyOrder" : 9
}, },
"baseColorRangeRight": { "baseColorRangeRight": {
"type": "number", "type": "number",
"title":"baseColorRangeRight", "title":"edt_eff_basecolorrangeright_title",
"default": 360.0, "default": 360.0,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 360.0, "maximum" : 360.0,
"append" : "° (Degree)", "append" : "edt_append_degree",
"propertyOrder" : 9 "propertyOrder" : 10
}, },
"baseColorChangeRate": { "baseColorChangeRate": {
"type": "number", "type": "number",
"title":"baseColorChangeRate", "title":"edt_eff_basecolorchangerate_title",
"default": 2.0, "default": 2.0,
"minimum" : 0.0, "minimum" : 0.0,
"append" : "Seconds for one degree", "append" : "edt_append_sdegree",
"propertyOrder" : 10 "propertyOrder" : 8
} }
}, },
"additionalProperties": false "additionalProperties": false

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "police.py", "script" : "police.py",
"title":"Police", "title":"edt_eff_police_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"color_one": { "color_one": {
"type": "array", "type": "array",
"title":"Color one", "title":"edt_eff_colorone_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,7 +20,7 @@
}, },
"color_two": { "color_two": {
"type": "array", "type": "array",
"title":"Color two", "title":"edt_eff_colortwo_title",
"format":"colorpicker", "format":"colorpicker",
"default": [0,0,255], "default": [0,0,255],
"items" : { "items" : {
@ -34,22 +34,22 @@
}, },
"colors_count": { "colors_count": {
"type": "integer", "type": "integer",
"title":"Color length", "title":"edt_eff_colorcount_title",
"default": 10, "default": 10,
"minimum" : 0, "minimum" : 0,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"Rotation time", "title":"edt_eff_rotationtime_title",
"default": 2.0, "default": 2.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "s", "append" : "edt_append_s",
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"Reverse direction", "title":"edt_eff_reversedirection_title",
"default": false, "default": false,
"propertyOrder" : 5 "propertyOrder" : 5
} }

View File

@ -1,20 +1,20 @@
{ {
"type":"object", "type":"object",
"script" : "rainbow-mood.py", "script" : "rainbow-mood.py",
"title":"Rainbow mood", "title":"edt_eff_rainbowmood_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"Rotation time", "title":"edt_eff_rotationtime_title",
"default": 60.0, "default": 60.0,
"minimum" : 1.0, "minimum" : 1.0,
"append" : "s", "append" : "edt_append_s",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"brightness": { "brightness": {
"type": "number", "type": "number",
"title":"Brightness", "title":"edt_eff_brightness_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.1, "minimum" : 0.1,
"maximum" : 1.0, "maximum" : 1.0,
@ -23,7 +23,7 @@
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"Reverse direction", "title":"edt_eff_reversedirection_title",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -1,20 +1,20 @@
{ {
"type":"object", "type":"object",
"script" : "rainbow-swirl.py", "script" : "rainbow-swirl.py",
"title":"Rainbow swirl", "title":"edt_eff_rainbowswirl_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"Rotation Time", "title":"edt_eff_rotationtime_title",
"default": 10.0, "default": 10.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "s", "append" : "edt_append_s",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"center_x": { "center_x": {
"type": "number", "type": "number",
"title":"Center X", "title":"edt_eff_centerx_title",
"default": 0.5, "default": 0.5,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 2.0, "maximum" : 2.0,
@ -23,7 +23,7 @@
}, },
"center_y": { "center_y": {
"type": "number", "type": "number",
"title":"Center Y", "title":"edt_eff_centery_title",
"default": 0.5, "default": 0.5,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 2.0, "maximum" : 2.0,
@ -32,7 +32,7 @@
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"Reverse direction", "title":"edt_eff_reversedirection_title",
"default": false, "default": false,
"propertyOrder" : 4 "propertyOrder" : 4
} }

View File

@ -1,21 +1,23 @@
{ {
"type":"object", "type":"object",
"script" : "random.py", "script" : "random.py",
"title":"Random", "title":"edt_eff_random_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"Speed", "title":"edt_eff_speed_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.0, "minimum" : 0.0,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"saturation": { "saturation": {
"type": "number", "type": "number",
"title":"Saturation", "title":"edt_eff_saturation_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.0, "minimum" : 0.1,
"maximum" : 1.0,
"step" : 0.1,
"propertyOrder" : 2 "propertyOrder" : 2
} }
}, },

View File

@ -1,19 +1,19 @@
{ {
"type":"object", "type":"object",
"script" : "running_dots.py", "script" : "running_dots.py",
"title":"Running dots", "title":"edt_eff_runningdots_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"Runner speed", "title":"edt_eff_speed_title",
"default": 1.5, "default": 1.5,
"minimum" : 0.1, "minimum" : 0.1,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"colorLevel": { "colorLevel": {
"type": "integer", "type": "integer",
"title":"Color", "title":"edt_eff_colorevel_title",
"default": 220, "default": 220,
"minimium" : 0, "minimium" : 0,
"maximum" : 255, "maximum" : 255,
@ -21,7 +21,7 @@
}, },
"whiteLevel": { "whiteLevel": {
"type": "integer", "type": "integer",
"title":"White", "title":"edt_eff_whitelevel_title",
"default": 0, "default": 0,
"minimium" : 0, "minimium" : 0,
"maximum" : 254, "maximum" : 254,

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "shutdown.py", "script" : "shutdown.py",
"title":"System Shutdown", "title":"edt_eff_systemshutdown_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"Speed", "title":"edt_eff_speed_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.3, "minimum" : 0.3,
"step" : 0.1, "step" : 0.1,
@ -14,7 +14,7 @@
}, },
"alarm-color": { "alarm-color": {
"type": "array", "type": "array",
"title":"Alarm color", "title":"edt_eff_alarmcolor_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -28,7 +28,7 @@
}, },
"post-color": { "post-color": {
"type": "array", "type": "array",
"title":"Post color", "title":"edt_eff_postcolor_title",
"format" : "colorpicker", "format" : "colorpicker",
"default": [255,174,11], "default": [255,174,11],
"items" : { "items" : {
@ -42,7 +42,7 @@
}, },
"shutdown-enabled": { "shutdown-enabled": {
"type": "boolean", "type": "boolean",
"title":"Real shutdown", "title":"edt_eff_enableshutdown_title",
"default": false, "default": false,
"propertyOrder" : 4 "propertyOrder" : 4
} }

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "snake.py", "script" : "snake.py",
"title":"Snake", "title":"edt_eff_snake_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"Color", "title":"edt_eff_color_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,17 +20,17 @@
}, },
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"Rotation time", "title":"edt_eff_rotationtime_title",
"default": 12.0, "default": 12.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "s", "append" : "edt_append_s",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"percentage": { "percentage": {
"type": "integer", "type": "integer",
"title":"Length", "title":"edt_eff_length_title",
"default": 10, "default": 10,
"append" : "%", "append" : "edt_append_percent",
"propertyOrder" : 3 "propertyOrder" : 3
} }
}, },

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "sparks.py", "script" : "sparks.py",
"title":"Sparks", "title":"edt_eff_sparks_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"Color", "title":"edt_eff_color_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,41 +20,42 @@
}, },
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"Rotation time", "title":"edt_eff_rotationtime_title",
"default": 2.0, "default": 2.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "edt_append_s",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"sleep-time": { "sleep-time": {
"type": "number", "type": "number",
"title":"Sleep time", "title":"edt_eff_sleeptime_title",
"default": 0.05, "default": 0.05,
"minimum" : 0.01, "minimum" : 0.01,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"brightness": { "brightness": {
"type": "number", "type": "number",
"title":"Brightness", "title":"edt_eff_brightness_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.01, "minimum" : 0.01,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"saturation": { "saturation": {
"type": "number", "type": "number",
"title":"Saturation", "title":"edt_eff_saturation_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.01, "minimum" : 0.01,
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"Reverse direction", "title":"edt_eff_reversedirection_title",
"default": false, "default": false,
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"random-color": { "random-color": {
"type": "boolean", "type": "boolean",
"title":"Random color", "title":"edt_eff_colorrandom_title",
"default": false, "default": false,
"propertyOrder" : 7 "propertyOrder" : 7
} }

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "strobe.py", "script" : "strobe.py",
"title":"Strobe", "title":"edt_eff_storbe_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"Color", "title":"edt_eff_color_title",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,10 +20,10 @@
}, },
"frequency": { "frequency": {
"type": "number", "type": "number",
"title":"Frequency", "title":"edt_eff_frequency_title",
"default": 10.0, "default": 10.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "Hz", "append" : "edt_append_hz",
"propertyOrder" : 2 "propertyOrder" : 2
} }
}, },

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "traces.py", "script" : "traces.py",
"title":"Color traces", "title":"edt_eff_traces_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"Speed", "title":"edt_eff_speed_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.1, "minimum" : 0.1,
"propertyOrder" : 1 "propertyOrder" : 1

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "x-mas.py", "script" : "x-mas.py",
"title":"X-Mas", "title":"edt_eff_x-mas_header_title",
"required":true, "required":true,
"properties":{ "properties":{
"sleepTime": { "sleepTime": {
"type": "number", "type": "number",
"title":"Sleep Time", "title":"edt_eff_sleeptime_title",
"default": 1.0, "default": 1.0,
"minimum" : 0.1, "minimum" : 0.1,
"propertyOrder" : 1 "propertyOrder" : 1

View File

@ -6,14 +6,14 @@
"logger" : "logger" :
{ {
"type" : "object", "type" : "object",
"title" : "Logging", "title" : "edt_conf_log_heading_title",
"properties" : "properties" :
{ {
"level" : "level" :
{ {
"type" : "string", "type" : "string",
"enum" : ["silent", "warn", "verbose", "debug"], "enum" : ["silent", "warn", "verbose", "debug"],
"title" : "Log-Level", "title" : "edt_conf_log_level_title",
"default" : "warn" "default" : "warn"
} }
}, },
@ -22,7 +22,7 @@
"device" : "device" :
{ {
"type" : "object", "type" : "object",
"title" : "LED Device General", "title" : "edt_dev_general_heading_title",
"required" : true, "required" : true,
"defaultProperties": ["name","ledCount","colorOrder","rewriteTime"], "defaultProperties": ["name","ledCount","colorOrder","rewriteTime"],
"properties" : "properties" :
@ -30,7 +30,7 @@
"name" : "name" :
{ {
"type" : "string", "type" : "string",
"title" : "Configuration name", "title" : "edt_dev_general_name_title",
"required" : true, "required" : true,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
@ -43,21 +43,21 @@
{ {
"type" : "integer", "type" : "integer",
"minimum" : 0, "minimum" : 0,
"title" : "Count of all hardware LEDs", "title" : "edt_dev_general_ledCount_title",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"colorOrder" : "colorOrder" :
{ {
"type" : "string", "type" : "string",
"title" : "RGB byte order", "title" : "edt_dev_general_colorOrder_title",
"enum" : ["rgb", "bgr", "rbg", "brg", "gbr", "grb"], "enum" : ["rgb", "bgr", "rbg", "brg", "gbr", "grb"],
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"rewriteTime": { "rewriteTime": {
"type": "integer", "type": "integer",
"title":"Refresh time", "title":"edt_dev_general_rewriteTime_title",
"default": 5000, "default": 5000,
"append" : "ms", "append" : "edt_append_ms",
"minimum": 0, "minimum": 0,
"propertOrder" : 4 "propertOrder" : 4
} }
@ -67,7 +67,7 @@
"color" : "color" :
{ {
"type":"object", "type":"object",
"title" : "Color Calibration", "title" : "edt_conf_color_heading_title",
"required" : true, "required" : true,
"defaultProperties": ["channelAdjustment_enable","channelAdjustment","transform_enable","transform"], "defaultProperties": ["channelAdjustment_enable","channelAdjustment","transform_enable","transform"],
"properties": "properties":
@ -338,20 +338,20 @@
"smoothing": "smoothing":
{ {
"type" : "object", "type" : "object",
"title" : "Smoothing", "title" : "edt_conf_smooth_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : true, "default" : true,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"type" : "type" :
{ {
"type" : "string", "type" : "string",
"title" : "Type", "title" : "edt_conf_smooth_type_title",
"enum" : ["linear"], "enum" : ["linear"],
"default" : "linear", "default" : "linear",
"propertyOrder" : 2 "propertyOrder" : 2
@ -359,37 +359,37 @@
"time_ms" : "time_ms" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Time", "title" : "edt_conf_smooth_time_ms_title",
"minimum" : 25, "minimum" : 25,
"maximum": 600, "maximum": 600,
"default" : 200, "default" : 200,
"append" : "ms", "append" : "edt_append_ms",
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"updateFrequency" : "updateFrequency" :
{ {
"type" : "number", "type" : "number",
"title" : "Update frequency", "title" : "edt_conf_smooth_updateFrequency_title",
"minimum" : 1.0, "minimum" : 1.0,
"maximum" : 100.0, "maximum" : 100.0,
"default" : 25.0, "default" : 25.0,
"append" : "Hz", "append" : "edt_append_hz",
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"updateDelay" : "updateDelay" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Update delay", "title" : "edt_conf_smooth_updateDelay_title",
"minimum" : 0, "minimum" : 0,
"maximum": 2048, "maximum": 2048,
"default" : 0, "default" : 0,
"append" : "ms", "append" : "edt_append_ms",
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"continuousOutput" : "continuousOutput" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Continuous output", "title" : "edt_conf_smooth_continuousOutput_title",
"default" : true, "default" : true,
"propertyOrder" : 6 "propertyOrder" : 6
} }
@ -399,33 +399,33 @@
"grabberV4L2" : "grabberV4L2" :
{ {
"type":"array", "type":"array",
"title" : "USB Grabber", "title" : "edt_conf_v4l2_heading_title",
"minItems": 1, "minItems": 1,
"maxItems": 2, "maxItems": 2,
"items": "items":
{ {
"type" : "object", "type" : "object",
"title" : "USB Grabber", "title" : "edt_conf_v4l2_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : false, "default" : false,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"device" : "device" :
{ {
"type" : "string", "type" : "string",
"title" : "Device", "title" : "edt_conf_v4l2_device_title",
"default" : "auto", "default" : "auto",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"input" : "input" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Input", "title" : "edt_conf_v4l2_input_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"propertyOrder" : 3 "propertyOrder" : 3
@ -433,7 +433,7 @@
"standard" : "standard" :
{ {
"type" : "string", "type" : "string",
"title" : "Video standard", "title" : "edt_conf_v4l2_standard_title",
"enum" : ["PAL","NTSC"], "enum" : ["PAL","NTSC"],
"default" : "PAL", "default" : "PAL",
"propertyOrder" : 4 "propertyOrder" : 4
@ -441,25 +441,25 @@
"width" : "width" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Width", "title" : "edt_conf_v4l2_width_title",
"minimum" : -1, "minimum" : -1,
"default" : -1, "default" : -1,
"append" : "Pixel", "append" : "edt_append_pixel",
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"height" : "height" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Height", "title" : "edt_conf_v4l2_height_title",
"minimum" : -1, "minimum" : -1,
"default" : -1, "default" : -1,
"append" : "Pixel", "append" : "edt_append_pixel",
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"frameDecimation" : "frameDecimation" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Frame decimation", "title" : "edt_conf_v4l2_frameDecimation_title",
"minimum" : 0, "minimum" : 0,
"default" : 2, "default" : 2,
"propertyOrder" : 7 "propertyOrder" : 7
@ -476,14 +476,14 @@
{ {
"type" : "integer", "type" : "integer",
"minimum" : 0, "minimum" : 0,
"title" : "Priority channel", "title" : "edt_conf_general_priority_title",
"default" : 900, "default" : 900,
"propertyOrder" : 9 "propertyOrder" : 9
}, },
"mode" : "mode" :
{ {
"type" : "string", "type" : "string",
"title" : "Mode", "title" : "edt_conf_v4l2_mode_title",
"enum" : ["2D","3DSBS","3DTAB"], "enum" : ["2D","3DSBS","3DTAB"],
"default" : "2D", "default" : "2D",
"propertyOrder" : 10 "propertyOrder" : 10
@ -491,77 +491,77 @@
"useKodiChecker" : "useKodiChecker" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Use Kodi Watch", "title" : "edt_conf_v4l2_useKodiChecker_title",
"default" : false, "default" : false,
"propertyOrder" : 11 "propertyOrder" : 11
}, },
"cropLeft" : "cropLeft" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop left", "title" : "edt_conf_v4l2_cropLeft_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel", "append" : "edt_append_pixel",
"propertyOrder" : 12 "propertyOrder" : 12
}, },
"cropRight" : "cropRight" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop right", "title" : "edt_conf_v4l2_cropRight_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel", "append" : "edt_append_pixel",
"propertyOrder" : 13 "propertyOrder" : 13
}, },
"cropTop" : "cropTop" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop top", "title" : "edt_conf_v4l2_cropTop_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel", "append" : "edt_append_pixel",
"propertyOrder" : 14 "propertyOrder" : 14
}, },
"cropBottom" : "cropBottom" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop bottom", "title" : "edt_conf_v4l2_cropBottom_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel", "append" : "edt_append_pixel",
"propertyOrder" : 15 "propertyOrder" : 15
}, },
"redSignalThreshold" : "redSignalThreshold" :
{ {
"type" : "number", "type" : "number",
"title" : "Red signal threshold", "title" : "edt_conf_v4l2_redSignalThreshold_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.1,
"step" : 0.01, "step" : 0.01,
"append" : "%", "append" : "edt_append_percent",
"propertyOrder" : 16 "propertyOrder" : 16
}, },
"greenSignalThreshold" : "greenSignalThreshold" :
{ {
"type" : "number", "type" : "number",
"title" : "Green signal threshold", "title" : "edt_conf_v4l2_greenSignalThreshold_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.1,
"step" : 0.01, "step" : 0.01,
"append" : "%", "append" : "edt_append_percent",
"propertyOrder" : 17 "propertyOrder" : 17
}, },
"blueSignalThreshold" : "blueSignalThreshold" :
{ {
"type" : "number", "type" : "number",
"title" : "Blue signal threshold", "title" : "edt_conf_v4l2_blueSignalThreshold_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.1,
"step" : 0.01, "step" : 0.01,
"append" : "%", "append" : "edt_append_percent",
"propertyOrder" : 18 "propertyOrder" : 18
} }
}, },
@ -571,116 +571,116 @@
"framegrabber" : "framegrabber" :
{ {
"type" : "object", "type" : "object",
"title" : "Framegrabber", "title" : "edt_conf_fg_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : true, "default" : true,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"type" : "type" :
{ {
"type" : "string", "type" : "string",
"title" : "Type", "title" : "edt_conf_fg_type_title",
"enum" : ["auto","dispmanx","amlogic","x11","framebuffer"], "enum" : ["auto","dispmanx","amlogic","x11","framebuffer"],
"default" : "auto" "default" : "auto"
}, },
"width" : "width" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Width", "title" : "edt_conf_v4l2_width_title",
"minimum" : 10, "minimum" : 10,
"default" : 80, "default" : 80,
"append" : "Pixel" "append" : "edt_append_pixel"
}, },
"height" : "height" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Height", "title" : "edt_conf_v4l2_height_title",
"minimum" : 10, "minimum" : 10,
"default" : 45, "default" : 45,
"append" : "Pixel" "append" : "edt_append_pixel"
}, },
"frequency_Hz" : "frequency_Hz" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Frequency", "title" : "edt_conf_fg_frequency_Hz_title",
"minimum" : 1, "minimum" : 1,
"default" : 10, "default" : 10,
"append" : "Hz" "append" : "edt_append_hz"
}, },
"priority" : "priority" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Priority channel", "title" : "edt_conf_general_priority_title",
"minimum" : 0, "minimum" : 0,
"default" : 890 "default" : 890
}, },
"cropLeft" : "cropLeft" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop left", "title" : "edt_conf_v4l2_cropLeft_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel" "append" : "edt_append_pixel"
}, },
"cropRight" : "cropRight" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop right", "title" : "edt_conf_v4l2_cropRight_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel" "append" : "edt_append_pixel"
}, },
"cropTop" : "cropTop" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop top", "title" : "edt_conf_v4l2_cropTop_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel" "append" : "edt_append_pixel"
}, },
"cropBottom" : "cropBottom" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Crop bottom", "title" : "edt_conf_v4l2_cropBottom_title",
"minimum" : 0, "minimum" : 0,
"default" : 0, "default" : 0,
"append" : "Pixel" "append" : "edt_append_pixel"
}, },
"useXGetImage" : "useXGetImage" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Use XGetImage", "title" : "edt_conf_fg_useXGetImage_title",
"default" : false "default" : false
}, },
"horizontalPixelDecimation" : "horizontalPixelDecimation" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Horizontal pixel decimation", "title" : "edt_conf_fg_horizontalPixelDecimation_title",
"minimum" : 0, "minimum" : 0,
"default" : 8 "default" : 8
}, },
"verticalPixelDecimation" : "verticalPixelDecimation" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Vertical pixel decimation", "title" : "edt_conf_fg_verticalPixelDecimation_title",
"minimum" : 0, "minimum" : 0,
"default" : 8 "default" : 8
}, },
"device" : "device" :
{ {
"type" : "string", "type" : "string",
"title" : "Device", "title" : "edt_conf_fg_device_title",
"default" : "/dev/fb0" "default" : "/dev/fb0"
}, },
"display" : "display" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Display", "title" : "edt_conf_fg_display_title",
"minimum" : 0 "minimum" : 0
} }
}, },
@ -689,31 +689,32 @@
"blackborderdetector" : "blackborderdetector" :
{ {
"type" : "object", "type" : "object",
"title" : "Blackbar detector", "title" : "edt_conf_bb_heading_title",
"defaultProperties": ["enable","mode","threshold"], "defaultProperties": ["enable","mode","threshold"],
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : true, "default" : true,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"threshold" : "threshold" :
{ {
"type" : "number", "type" : "number",
"title" : "Threshold", "title" : "edt_conf_bb_threshold_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.05, "default" : 0.05,
"step" : 0.01, "step" : 0.01,
"append" : "%", "append" : "edt_append_percent",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"unknownFrameCnt" : "unknownFrameCnt" :
{ {
"type" : "integer", "type" : "integer",
"title" : "edt_conf_bb_unknownFrameCnt_title",
"minimum" : 0, "minimum" : 0,
"default" : 600, "default" : 600,
"propertyOrder" : 3 "propertyOrder" : 3
@ -721,6 +722,7 @@
"borderFrameCnt" : "borderFrameCnt" :
{ {
"type" : "integer", "type" : "integer",
"title" : "edt_conf_bb_borderFrameCnt_title",
"minimum" : 0, "minimum" : 0,
"default" : 50, "default" : 50,
"propertyOrder" : 4 "propertyOrder" : 4
@ -728,6 +730,7 @@
"maxInconsistentCnt" : "maxInconsistentCnt" :
{ {
"type" : "integer", "type" : "integer",
"title" : "edt_conf_bb_maxInconsistentCnt_title",
"minimum" : 0, "minimum" : 0,
"default" : 10, "default" : 10,
"propertyOrder" : 5 "propertyOrder" : 5
@ -735,6 +738,7 @@
"blurRemoveCnt" : "blurRemoveCnt" :
{ {
"type" : "integer", "type" : "integer",
"title" : "edt_conf_bb_blurRemoveCnt_title",
"minimum" : 0, "minimum" : 0,
"default" : 1, "default" : 1,
"propertyOrder" : 6 "propertyOrder" : 6
@ -742,7 +746,7 @@
"mode" : "mode" :
{ {
"type" : "string", "type" : "string",
"title": "Mode", "title": "edt_conf_bb_mode_title",
"enum" : ["default", "classic", "osd"], "enum" : ["default", "classic", "osd"],
"default" : "default", "default" : "default",
"propertyOrder" : 7 "propertyOrder" : 7
@ -753,27 +757,27 @@
"kodiVideoChecker" : "kodiVideoChecker" :
{ {
"type" : "object", "type" : "object",
"title" : "Kodi Watch", "title" : "edt_conf_kodic_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : false, "default" : false,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"kodiAddress" : "kodiAddress" :
{ {
"type" : "string", "type" : "string",
"title" : "Kodi IP address", "title" : "edt_conf_kodic_kodiAddress_title",
"default" : "127.0.0.1", "default" : "127.0.0.1",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"kodiTcpPort" : "kodiTcpPort" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Kodi TCP port", "title" : "edt_conf_kodic_kodiTcpPort_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 9090, "default" : 9090,
@ -782,49 +786,49 @@
"grabVideo" : "grabVideo" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Video", "title" : "edt_conf_kodic_grabVideo_title",
"default" : true, "default" : true,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"grabPictures" : "grabPictures" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Pictures", "title" : "edt_conf_kodic_grabPictures_title",
"default" : true, "default" : true,
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"grabAudio" : "grabAudio" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Audio", "title" : "edt_conf_kodic_grabAudio_title",
"default" : true, "default" : true,
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"grabMenu" : "grabMenu" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Menu", "title" : "edt_conf_kodic_grabMenu_title",
"default" : false, "default" : false,
"propertyOrder" : 7 "propertyOrder" : 7
}, },
"grabPause" : "grabPause" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Pause", "title" : "edt_conf_kodic_grabPause_title",
"default" : false, "default" : false,
"propertyOrder" : 8 "propertyOrder" : 8
}, },
"grabScreensaver" : "grabScreensaver" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Screensaver", "title" : "edt_conf_kodic_grabScreensaver_title",
"default" : false, "default" : false,
"propertyOrder" : 9 "propertyOrder" : 9
}, },
"enable3DDetection" : "enable3DDetection" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Detect 3D", "title" : "edt_conf_kodic_enable3DDetection_title",
"default" : false, "default" : false,
"propertyOrder" : 10 "propertyOrder" : 10
} }
@ -872,29 +876,34 @@
"forwarder" : "forwarder" :
{ {
"type" : "object", "type" : "object",
"title" : "Forwarder", "title" : "edt_conf_fw_heading_title",
"required" : true, "required" : true,
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"required" : true,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"json" : "json" :
{ {
"type" : "array", "type" : "array",
"title" : "List of JSON clients", "title" : "edt_conf_fw_json_title",
"required" : true, "items" : {
"type": "string",
"title" : "edt_conf_fw_json_itemtitle"
},
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"proto" : "proto" :
{ {
"type" : "array", "type" : "array",
"title" : "List of PROTO clients", "title" : "edt_conf_fw_proto_title",
"required" : true, "items" : {
"type": "string",
"title" : "edt_conf_fw_proto_itemtitle"
},
"propertyOrder" : 3 "propertyOrder" : 3
} }
}, },
@ -904,14 +913,14 @@
{ {
"type" : "object", "type" : "object",
"required" : true, "required" : true,
"title" : "JSON Server", "title" : "edt_conf_js_heading_title",
"properties" : "properties" :
{ {
"port" : "port" :
{ {
"type" : "integer", "type" : "integer",
"required" : true, "required" : true,
"title" : "Port", "title" : "edt_conf_general_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 19444 "default" : 19444
@ -923,14 +932,14 @@
{ {
"type" : "object", "type" : "object",
"required" : true, "required" : true,
"title" : "Proto Server", "title" : "edt_conf_ps_heading_title",
"properties" : "properties" :
{ {
"port" : "port" :
{ {
"type" : "integer", "type" : "integer",
"required" : true, "required" : true,
"title" : "Port", "title" : "edt_conf_general_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 19445 "default" : 19445
@ -941,13 +950,13 @@
"boblightServer" : "boblightServer" :
{ {
"type" : "object", "type" : "object",
"title" : "Boblight Server", "title" : "edt_conf_bobls_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : false, "default" : false,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
@ -955,7 +964,7 @@
{ {
"type" : "integer", "type" : "integer",
"required" : true, "required" : true,
"title" : "Port", "title" : "edt_conf_general_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"propertyOrder" : 2 "propertyOrder" : 2
@ -963,7 +972,7 @@
"priority" : "priority" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Priority", "title" : "edt_conf_general_priority_title",
"minimum" : 0, "minimum" : 0,
"default" : 800, "default" : 800,
"propertyOrder" : 3 "propertyOrder" : 3
@ -974,28 +983,27 @@
"udpListener" : "udpListener" :
{ {
"type" : "object", "type" : "object",
"title" : "UDP Listener", "title" : "edt_conf_udpl_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : false, "default" : false,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"address" : "address" :
{ {
"type" : "string", "type" : "string",
"title" : "Address", "title" : "edt_conf_udpl_address_title",
"default" : "239.255.28.01", "default" : "239.255.28.01",
"required" : true,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"port" : "port" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Port", "title" : "edt_conf_general_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 2801, "default" : 2801,
@ -1004,7 +1012,7 @@
"priority" : "priority" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Priority", "title" : "edt_conf_general_priority_title",
"minimum" : 0, "minimum" : 0,
"default" : 800, "default" : 800,
"propertyOrder" : 4 "propertyOrder" : 4
@ -1012,16 +1020,16 @@
"timeout" : "timeout" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Timeout", "title" : "edt_conf_udpl_timeout_title",
"minimum" : 1000, "minimum" : 1000,
"default" : 10000, "default" : 10000,
"append" : "ms", "append" : "edt_append_ms",
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"shared" : "shared" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Shared", "title" : "edt_conf_udpl_shared_title",
"default" : false, "default" : false,
"propertyOrder" : 6 "propertyOrder" : 6
} }
@ -1031,26 +1039,26 @@
"webConfig" : "webConfig" :
{ {
"type" : "object", "type" : "object",
"title" : "WebUI - DANGER CHANGES CAN MAKE THE WEBUI UNREACHABLE!", "title" : "edt_conf_webc_heading_title",
"properties" : "properties" :
{ {
"enable" : "enable" :
{ {
"type" : "boolean", "type" : "boolean",
"title" : "Activate", "title" : "edt_conf_general_enable_title",
"default" : true, "default" : true,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"document_root" : "document_root" :
{ {
"type" : "string", "type" : "string",
"title" : "Document Root", "title" : "edt_conf_webc_docroot_title",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"port" : "port" :
{ {
"type" : "integer", "type" : "integer",
"title" : "Port", "title" : "edt_conf_general_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 8099, "default" : 8099,
@ -1067,13 +1075,22 @@
"paths" : "paths" :
{ {
"type" : "array", "type" : "array",
"title" : "List of folders to additional effects", "title" : "edt_conf_effp_paths_title",
"default" : ["../custom-effects"],
"items" : {
"type": "string",
"title" : "edt_conf_effp_paths_itemtitle"
},
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"disable" : "disable" :
{ {
"type" : "array", "type" : "array",
"title" : "List of disabled effects", "title" : "edt_conf_effp_disable_title",
"items" : {
"type": "string",
"title" : "edt_conf_effp_disable_itemtitle"
},
"propertyOrder" : 2 "propertyOrder" : 2
} }
}, },

View File

@ -104,7 +104,7 @@ QJsonObject LedDevice::getLedDeviceSchemas()
} }
schemaJson = doc.object(); schemaJson = doc.object();
schemaJson["title"] = QString("LED Device Specific"); schemaJson["title"] = QString("edt_dev_spec_header_title");
result[devName] = schemaJson; result[devName] = schemaJson;
} }

View File

@ -4,27 +4,26 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output path", "title":"edt_dev_spec_outputPath_title",
"default":"/dev/ttyACM0", "default":"/dev/ttyACM0",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 250, "default": 250,
"append" : "ms", "append" : "ms",
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"lightberry_apa102_mode": { "lightberry_apa102_mode": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_LBap102Mode_title",
"title":"LightBerry APA102 Mode",
"default": false, "default": false,
"propertyOrder" : 4 "propertyOrder" : 4
} }

View File

@ -4,22 +4,21 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"default" : "/dev/spidev0.0", "default" : "/dev/spidev0.0",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"title":"Invert signal", "title":"edt_dev_spec_invert_title",
"default": false, "default": false,
"format": "checkbox",
"propertyOrder" : 3 "propertyOrder" : 3
} }
}, },

View File

@ -4,18 +4,18 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output path", "title":"edt_dev_spec_outputPath_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 250, "default": 250,
"append" : "ms", "append" : "ms",
"propertyOrder" : 3 "propertyOrder" : 3

View File

@ -4,34 +4,33 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Multicast group", "title":"edt_dev_spec_multicastGroup_title",
"default" : "239.15.18.2", "default" : "239.15.18.2",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"orbIds": { "orbIds": {
"type": "string", "type": "string",
"title":"Baudrate", "title":"edt_dev_spec_orbIds_title",
"default": "1", "default": "1",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"numLeds": { "numLeds": {
"type": "integer", "type": "integer",
"title":"Number of LEDs", "title":"edt_dev_spec_numberOfLeds_title",
"default": 24, "default": 24,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"port": { "port": {
"type": "integer", "type": "integer",
"title":"Port", "title":"edt_dev_spec_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default": 24, "default": 49.692,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"useOrbSmoothing": { "useOrbSmoothing": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_useOrbSmoothing_title",
"title":"Use orb smoothing",
"default": true, "default": true,
"propertyOrder" : 5 "propertyOrder" : 5
} }

View File

@ -4,29 +4,24 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output path", "title":"edt_dev_spec_outputPath_title",
"propertyOrder" : 1
},
"output": {
"type": "string",
"title":"DMX Device Type",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 250000, "default": 250000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 250, "default": 250,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"rewriteTime": { "rewriteTime": {
"type": "integer", "type": "integer",
"title":"refresh time", "title":"edt_dev_spec_rewriteTime_title",
"default": 5000, "default": 5000,
"append" : "ms", "append" : "ms",
"propertyOrder" : 4 "propertyOrder" : 4

View File

@ -4,12 +4,12 @@
"properties":{ "properties":{
"host" : { "host" : {
"type": "string", "type": "string",
"title":"Target IP", "title":"edt_dev_spec_targetIp_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"port" : { "port" : {
"type": "integer", "type": "integer",
"title":"Port", "title":"edt_dev_spec_port_title",
"default": 5568, "default": 5568,
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
@ -17,19 +17,20 @@
}, },
"universe": { "universe": {
"type": "integer", "type": "integer",
"title":"Universe", "title":"edt_dev_spec_universe_title",
"default": 1, "default": 1,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"latchtime": { "latchtime": {
"type": "integer", "type": "integer",
"title":"Latchtime", "title":"edt_dev_spec_latchtime_title",
"default": 104000, "default": 104000,
"append" : "ns",
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"cid": { "cid": {
"type": "string", "type": "string",
"title":"CID", "title":"edt_dev_spec_cid_title",
"propertyOrder" : 5 "propertyOrder" : 5
} }
}, },

View File

@ -4,54 +4,56 @@
"properties":{ "properties":{
"output" : { "output" : {
"type": "string", "type": "string",
"title":"Target IP", "title":"edt_dev_spec_targetIp_title",
"default" : "127.0.0.1", "default" : "127.0.0.1",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"port" : { "port" : {
"type": "integer", "type": "integer",
"title":"Port", "title":"edt_dev_spec_port_title",
"default": 7890, "default": 7890,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"setFcConfig": { "setFcConfig": {
"type": "boolean", "type": "boolean",
"title":"Set fadecandy Configuration", "title":"edt_dev_spec_FCsetConfig_title",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"manualLed": { "manualLed": {
"type": "boolean", "type": "boolean",
"title":"Manual control of fadecandy LED", "title":"edt_dev_spec_FCmanualControl_title",
"default": false, "default": false,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"ledOn": { "ledOn": {
"type": "boolean", "type": "boolean",
"title":"Fadecandy LED set to on", "title":"edt_dev_spec_FCledToOn_title",
"default": false, "default": false,
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"interpolation": { "interpolation": {
"type": "boolean", "type": "boolean",
"title":"Interpolation", "title":"edt_dev_spec_interpolation_title",
"default": false, "default": false,
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"dither": { "dither": {
"type": "boolean", "type": "boolean",
"title":"Dithering", "title":"edt_dev_spec_dithering_title",
"default": false, "default": false,
"propertyOrder" : 7 "propertyOrder" : 7
}, },
"gamma" : { "gamma" : {
"type" : "number", "type" : "number",
"title" : "edt_dev_spec_gamma_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum": 100.0, "maximum": 100.0,
"propertyOrder" : 8 "propertyOrder" : 8
}, },
"whitepoint" : { "whitepoint" : {
"type" : "array", "type" : "array",
"title" : "edt_dev_spec_whitepoint_title",
"propertyOrder" : 9, "propertyOrder" : 9,
"default" : [1.0,1.0,1.0], "default" : [1.0,1.0,1.0],
"maxItems" : 3, "maxItems" : 3,

View File

@ -4,7 +4,7 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output", "title":"edt_dev_spec_outputPath_title",
"default" : "/dev/null" "default" : "/dev/null"
} }
}, },

View File

@ -4,21 +4,22 @@
"properties":{ "properties":{
"host" : { "host" : {
"type": "string", "type": "string",
"title":"Target IP", "title":"edt_dev_spec_targetIp_title",
"default": "255.255.255.255", "default": "255.255.255.255",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"port" : { "port" : {
"type": "integer", "type": "integer",
"title":"Port", "title":"edt_dev_spec_port_title",
"default": 30977, "default": 30977,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"lightIds": { "lightIds": {
"type": "array", "type": "array",
"title":"Light ids", "title":"edt_dev_spec_lightid_title",
"items" : { "items" : {
"type" : "string" "type" : "string",
"title" : "edt_dev_spec_lightid_itemtitle"
}, },
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,7 +4,7 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Serial number" "title":"edt_dev_spec_serial_title"
} }
}, },
"additionalProperties": true "additionalProperties": true

View File

@ -4,19 +4,19 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"title":"Invert signal", "title":"edt_dev_spec_invert_title",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,19 +4,19 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"title":"Invert signal", "title":"edt_dev_spec_invert_title",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,19 +4,19 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"title":"Invert signal", "title":"edt_dev_spec_invert_title",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,19 +4,19 @@
"properties":{ "properties":{
"VID": { "VID": {
"type": "string", "type": "string",
"title":"VID", "title":"edt_dev_spec_vid_title",
"default" : "0x2341", "default" : "0x2341",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"PID": { "PID": {
"type": "string", "type": "string",
"title":"PID", "title":"edt_dev_spec_pid_title",
"default" : "0x8036", "default" : "0x8036",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 0, "default": 0,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,34 +4,34 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Target IP", "title":"edt_dev_spec_targetIp_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"username": { "username": {
"type": "string", "type": "string",
"title":"Username", "title":"edt_dev_spec_username_title",
"default": "newdeveloper", "default": "newdeveloper",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"lightIds": { "lightIds": {
"type": "array", "type": "array",
"title":"Light ids", "title":"edt_dev_spec_lightid_title",
"items" : { "items" : {
"type" : "integer" "type" : "integer",
"title" : "edt_dev_spec_lightid_itemtitle"
}, },
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"transitiontime": { "transitiontime": {
"type": "integer", "type": "integer",
"title":"Transistion time", "title":"edt_dev_spec_transistionTime_title",
"default" : 1, "default" : 1,
"append" : "x100ms", "append" : "x100ms",
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"switchOffOnBlack": { "switchOffOnBlack": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_switchOffOnBlack_title",
"title":"Switch off on black",
"default" : true, "default" : true,
"propertyOrder" : 5 "propertyOrder" : 5
} }

View File

@ -4,13 +4,13 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Pi-Blaster FiFo", "title":"edt_dev_spec_PBFiFo_title",
"default" : "/dev/pi-blaster", "default" : "/dev/pi-blaster",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"gpiomap": { "gpiomap": {
"type": "array", "type": "array",
"title":"GPIO Map", "title":"edt_dev_spec_gpioMap_title",
"propertyOrder" : 2, "propertyOrder" : 2,
"minimum" : 1, "minimum" : 1,
"maximum" : 27, "maximum" : 27,
@ -22,7 +22,7 @@
"gpio" : "gpio" :
{ {
"type" : "integer", "type" : "integer",
"title" : "GPIO BCMxx", "title" : "edt_dev_spec_gpioBcm_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 27, "maximum" : 27,
"required" : true, "required" : true,
@ -31,7 +31,7 @@
"ledindex" : "ledindex" :
{ {
"type" : "integer", "type" : "integer",
"title" : "LED index", "title" : "edt_dev_spec_ledIndex_title",
"minimum" : 0, "minimum" : 0,
"required" : true, "required" : true,
"propertyOrder" : 2 "propertyOrder" : 2
@ -39,7 +39,7 @@
"ledcolor" : "ledcolor" :
{ {
"type" : "string", "type" : "string",
"title" : "Color component", "title" : "edt_dev_spec_colorComponent_title",
"enum" : ["r","g","b","w"], "enum" : ["r","g","b","w"],
"required" : true, "required" : true,
"propertyOrder" : 3 "propertyOrder" : 3

View File

@ -4,19 +4,19 @@
"properties":{ "properties":{
"VID": { "VID": {
"type": "string", "type": "string",
"title":"VID", "title":"edt_dev_spec_vid_title",
"default" : "0x2341", "default" : "0x2341",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"PID": { "PID": {
"type": "string", "type": "string",
"title":"PID", "title":"edt_dev_spec_pid_title",
"default" : "0x8036", "default" : "0x8036",
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 0, "default": 0,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,18 +4,18 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output path", "title":"edt_dev_spec_outputPath_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 250, "default": 250,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,26 +4,25 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 3000000, "default": 3000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_invert_title",
"title":"Invert signal",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"whiteAlgorithm": { "whiteAlgorithm": {
"type": "string", "type": "string",
"title":"White LED algorithm", "title":"edt_dev_spec_whiteLedAlgor_title",
"enum" : ["subtract_minimum","sub_min_warm_adjust","white_off"], "enum" : ["subtract_minimum","sub_min_warm_adjust","white_off"],
"default": "subtract_minimum", "default": "subtract_minimum",
"propertyOrder" : 4 "propertyOrder" : 4

View File

@ -4,13 +4,13 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output", "title":"edt_dev_spec_targetIp_title",
"default" : "127.0.0.1", "default" : "127.0.0.1",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"port": { "port": {
"type": "integer", "type": "integer",
"title":"Port", "title":"edt_dev_spec_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 4223, "default" : 4223,
@ -18,12 +18,12 @@
}, },
"uid": { "uid": {
"type": "string", "type": "string",
"title":"UID", "title":"edt_dev_spec_uid_title",
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Intervall", "title":"edt_dev_spec_intervall_title",
"minimum" : 0, "minimum" : 0,
"propertyOrder" : 4 "propertyOrder" : 4
} }

View File

@ -4,18 +4,18 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"Output path", "title":"edt_dev_spec_outputPath_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"delayAfterConnect": { "delayAfterConnect": {
"type": "integer", "type": "integer",
"title":"Delay after connect", "title":"edt_dev_spec_delayAfterConnect_title",
"default": 250, "default": 250,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,12 +4,12 @@
"properties":{ "properties":{
"host" : { "host" : {
"type": "string", "type": "string",
"title":"Target IP/hostname", "title":"edt_dev_spec_targetIpHost_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"port": { "port": {
"type": "integer", "type": "integer",
"title":"Target Port", "title":"edt_dev_spec_port_title",
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,
"default" : 50200, "default" : 50200,
@ -17,13 +17,14 @@
}, },
"latchtime": { "latchtime": {
"type": "integer", "type": "integer",
"title":"Latchtime", "title":"edt_dev_spec_latchtime_title",
"default": 104000, "default": 104000,
"append" : "edt_append_s",
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"max-packet": { "max-packet": {
"type": "integer", "type": "integer",
"title":"Max-packet", "title":"edt_dev_spec_maxPacket_title",
"minimum" : 0, "minimum" : 0,
"default" : 170, "default" : 170,
"propertyOrder" : 4 "propertyOrder" : 4

View File

@ -4,12 +4,12 @@
"properties":{ "properties":{
"host" : { "host" : {
"type": "string", "type": "string",
"title":"Target IP", "title":"edt_dev_spec_targetIp_title",
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"port" : { "port" : {
"type": "integer", "type": "integer",
"title":"Port", "title":"edt_dev_spec_port_title",
"default": 5568, "default": 5568,
"minimum" : 0, "minimum" : 0,
"maximum" : 65535, "maximum" : 65535,

View File

@ -4,27 +4,26 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 1000000, "default": 1000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"latchtime": { "latchtime": {
"type": "integer", "type": "integer",
"title":"Latch time", "title":"edt_dev_spec_latchtime_title",
"default": 500000, "default": 500000,
"append" : "ns", "append" : "ns",
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_invert_title",
"title":"Invert signal",
"default": false, "default": false,
"propertyOrder" : 4 "propertyOrder" : 4
} }

View File

@ -4,20 +4,19 @@
"properties":{ "properties":{
"output": { "output": {
"type": "string", "type": "string",
"title":"SPI path", "title":"edt_dev_spec_spipath_title",
"enum" : ["/dev/spidev0.0","/dev/spidev0.1"], "enum" : ["/dev/spidev0.0","/dev/spidev0.1"],
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rate": { "rate": {
"type": "integer", "type": "integer",
"title":"Baudrate", "title":"edt_dev_spec_baudrate_title",
"default": 3000000, "default": 3000000,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_invert_title",
"title":"Invert signal",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
} }

View File

@ -4,33 +4,31 @@
"properties":{ "properties":{
"leds": { "leds": {
"type": "integer", "type": "integer",
"title":"maximum led count", "title":"edt_dev_spec_maximumLedCount_title",
"default": 256, "default": 256,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"gpio": { "gpio": {
"type": "integer", "type": "integer",
"title":"gpio number", "title":"edt_dev_spec_gpioNumber_title",
"default": 18, "default": 18,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"invert": { "invert": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_invert_title",
"title":"Invert signal",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"rgbw": { "rgbw": {
"type": "boolean", "type": "boolean",
"format": "checkbox", "title":"edt_dev_spec_useRgbwProtocol_title",
"title":"use rgbw protocol",
"default": false, "default": false,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"whiteAlgorithm": { "whiteAlgorithm": {
"type": "string", "type": "string",
"title":"White LED algorithm", "title":"edt_dev_spec_whiteLedAlgor_title",
"enum" : ["subtract_minimum","sub_min_warm_adjust","white_off"], "enum" : ["subtract_minimum","sub_min_warm_adjust","white_off"],
"default": "subtract_minimum", "default": "subtract_minimum",
"propertyOrder" : 4 "propertyOrder" : 4