update adjustments and ui (#384)

* update

* update

* testit

* Revert "testit"

This reverts commit b1cc645161.

* update schema

* update

* add adjustment to serverinfo

* remove Adjustbool

* remove v4l2only

* fix json check for create effect

* update deb

* update

* update remote adjust

* update

* add eff schemas
This commit is contained in:
brindosch 2017-02-08 14:36:28 +01:00 committed by GitHub
parent d94529a800
commit 41671ad82c
80 changed files with 2341 additions and 1156 deletions

View File

@ -0,0 +1,34 @@
<div class="container-fluid">
<h3 class="page-header"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="main_menu_about_token">About Hyperion</span></h3>
<div class="row">
<div class="col-lg-6">
<div id="about_cont"></div>
</div>
</div>
</div>
<script type="text/javascript">
performTranslation();
var si = serverInfo.info.hyperion[0];
var libs = {"Bootstrap 3" : "http://getbootstrap.com/", "JQuery" : "https://jquery.com/", "Bootstrap Colorpicker" : "https://itsjavi.com/bootstrap-colorpicker/", "JSON-Editor" : "http://jeremydorn.com/json-editor/", "jQuery.i18n" : "https://github.com/wikimedia/jquery.i18n", "metisMenu" : "http://mm.onokumus.com/index.html", "download.js" : "http://danml.com/download.html", "gijgo" : "http://gijgo.com/"};
var libh = "";
var lang = [];
for(var i = 0; i<availLang.length; i++)
lang.push($.i18n('general_speech_'+availLang[i]));
for(key in libs)
libh += '<a href="'+libs[key]+'" target="_blank">'+key+'</a>, ';
libh += "<br/>"+$.i18n("about_credits");
lang = lang.toString().replace(",",", ");
var fc = [$.i18n("about_version"),$.i18n("about_build"),$.i18n("about_builddate"),$.i18n("about_translations"),$.i18n("about_resources", $.i18n("general_webui_title"))];
var sc = [currentVersion,si.build,si.time,'('+availLang.length+')<p>'+lang+'</p><p><a href="#" target="_blank">'+$.i18n("about_contribute")+'</a></p>',libh];
createTable("","atb","about_cont");
for(var i = 0; i<fc.length; i++)
$('.atb').append(createTableRow([fc[i],sc[i]], "atb", false, true));
</script>

View File

@ -1,16 +0,0 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<h4 data-i18n="conf_colors_label_intro">Color calibration, smoothing (color transistions) and detection of blackbars.</h4>
<hr />
</div>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_colors.js"></script>

View File

@ -0,0 +1,12 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></h3>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_colors.js"></script>

View File

@ -0,0 +1,10 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></h3>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_effects.js"></script>

View File

@ -0,0 +1,26 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_general_label_title">General</span></h3>
<div class="row" id="conf_cont"></div>
<div class="row">
<div class="col-lg-6" id="conf_imp">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_general_impexp_title"></span></div>
<div class="panel-body">
<p data-i18n="conf_general_impexp_l1" style="font-weight:bold"></p>
<p data-i18n="conf_general_impexp_l2" style="font-weight:bold"></p>
<input type="file" id="select_import_conf" accept=".json">
</div>
<div class="panel-footer" style="text-align:right">
<button type="file" class="btn btn-primary" id="btn_import_conf" data-i18n="conf_general_impexp_impbtn" disabled>Import</button>
<button class="btn btn-primary" id="btn_export_conf" data-i18n="conf_general_impexp_expbtn">Export</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_general.js"></script>

View File

@ -0,0 +1,12 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h3>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_grabber.js"></script>

View File

@ -1,11 +1,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<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>
<hr />
</div>
<h3 class="page-header"><i class="fa fa-play-circle-o fa-fw"></i><span data-i18n="conf_kodi_label_title">Kodi Watch</span></h3>
<div class="alert alert-info" role="alert">
<strong>HINT 1:</strong> In any case you need to enable the remote control for Kodi. Please checkout Wiki for instructions. LINK<br>
<strong>HINT 2:</strong> If you just use a USB-Grabber you could enable the Kodi Watch for this separately at the USB-Grabber page.

View File

@ -1,29 +1,5 @@
<div class="modal fade bs-pair-modal-lg" id="pairmodal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Hue Bridge</h4>
</div>
<div class="modal-body">
<span data-i18n="hue_press_link_modal">Please press link button on the Hue Bridge.</span> <br /><br />
<center>
<span id="connectionTime"></span><br />
<img src="/img/hyperion/ring-alt.svg" />
<center>
</div>
<div class="modal-footer" />
</div>
</div>
</div>
<div class="container-fluid">
<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">
<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>
<hr />
</div>
<h3 class="page-header"><i class="fa fa-lightbulb-o fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></h3>
<ul id="leds_cfg_nav" class="nav nav-tabs">
<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" data-i18n="conf_leds_nav_label_ledlayout">LED Layout</a></li>
@ -33,42 +9,19 @@
<div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px">
<div class="row">
<div class="col-lg-8">
<div class="panel panel-primary">
<div class="panel-heading form-group" style="font-size:90%;white-space:nowrap;">
<label for="leddevices" data-i18n="conf_leds_contr_label_contrtype">Controller type:</label>
<div class="col-lg-12" id="leddevice_intro"></div>
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading form-group">
<label for="leddevices" class="panel-title" 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" />
</div>
<div class="panel-body">
<div id="ledDeviceOptions"> <div id='editor_container'></div> </div>
<div id="huebridge" class="container-fluid" style="display:none">
<hr/>
<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 class="introd" style="margin-top:20px;margin-bottom:20px" data-i18n="hue_help_text">
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.
If you already have a working User you will see it below. But you can always create a new one as well.
<b>Remember:</b> This is only a helper. You have to copy and paste them in your config above.
</div>
<div class="col-lg-12">
<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;" data-i18n="hue_failure_connection_token">Connection Timeout. Please press the button in time.</span><br />
<div class="form-group">
<label for="ip" data-i18n="hue_label_ip">Hue Bridge IP:</label>
<input type="text" class="form-control" id="ip">
<label for="user" data-i18n="hue_label_username">Hue Bridge Username:</label>
<input type="text" class="form-control" id="user" readonly="readonly">
<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 data-i18n="hue_button_create_user_token"> Create User</span></button>
</div>
</div>
</div>
</div>
</div>
<div class="panel-footer" style="text-align:right">
<button id='btn_submit_controller' class="btn btn-success"><i class="fa fa-fw fa-save" /><span data-i18n="general_button_savesettings">Save Settings</span></button>
<button id='btn_submit_controller' class="btn btn-primary"><i class="fa fa-fw fa-save" /><span data-i18n="general_button_savesettings">Save Settings</span></button>
</div>
</div>
</div>
@ -78,6 +31,7 @@
<div id="menu_gencfg" class="tab-pane fade" style="padding-top:10px">
<div class="row">
<div class="col-lg-12" id="layout_intro"></div>
<div class="col-lg-6 col-md-12">
<div class="panel-group" id="accordion">
<div class="panel panel-primary">
@ -176,40 +130,50 @@
<tbody>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_rawledshdepth" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
<label class="ltdlabel" for="ip_cl_ledshdepth" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr led_val_int" id="ip_cl_rawledshdepth" type="number" value="8" min="1" max="100" step="1"></input>
<input class="form-control ledCLconstr led_val_int" id="ip_cl_ledshdepth" type="number" value="8" min="1" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_rawledsvdepth" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
<label class="ltdlabel" for="ip_cl_ledsvdepth" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr led_val_int" id="ip_cl_rawledsvdepth" type="number" value="5" min="1" max="100" step="1"></input>
<input class="form-control ledCLconstr led_val_int" id="ip_cl_ledsvdepth" type="number" value="5" min="1" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_rawledsedgegap" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
<label class="ltdlabel" for="ip_cl_overlap" data-i18n="conf_leds_layout_cl_overlap">Edge Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr led_val_int" id="ip_cl_rawledsedgegap" type="number" value="0" min="0" max="50" step="1"></input>
<input class="form-control ledCLconstr led_val_int" id="ip_cl_overlap" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_rawledscornergap" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
<label class="ltdlabel" for="ip_cl_ledsedgegap" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr led_val_int" id="ip_cl_rawledscornergap" type="number" value="0" min="0" max="50" step="1"></input>
<input class="form-control ledCLconstr led_val_int" id="ip_cl_ledsedgegap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
<!-- <tr>
<td class="ltd">
<label class="ltdlabel" for="ip_cl_ledscornergap" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr led_val_int" id="ip_cl_ledscornergap" type="number" value="0" min="0" max="50" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
</td>
</tr>
-->
</tbody>
</table>
</div>
@ -218,7 +182,7 @@
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_cl_generate" class="btn btn-warning"><i class="fa fa-fw fa-television"></i><span data-i18n="conf_leds_layout_cl_generate">Generate LED configuration</span></button>
<button id="btn_cl_save" class="btn btn-success"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
<button id="btn_cl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
@ -291,7 +255,7 @@
</div>
<div class="panel-footer" style="text-align:right;">
<button id="btn_ma_generate" class="btn btn-warning"><i class="fa fa-fw fa-th"></i><span data-i18n="conf_leds_layout_cl_generate">Generate LED configuration</span></button>
<button id="btn_ma_save" class="btn btn-success"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
<button id="btn_ma_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
@ -304,31 +268,32 @@
<div id="collapse4" class="panel-collapse collapse">
<div class="panel-body">
<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 data-i18n="conf_leds_layout_textf2">Don't forget to save!</p></b>
<textarea rows="25" id="ledconfig" class="form-control"></textarea>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-warning" id="leds_custom_updsim"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_button_updsim">Update preview</span></button>
<button type="button" class="btn btn-success pull-right" id="leds_custom_save"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
<button type="button" class="btn btn-primary pull-right" id="leds_custom_save"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
</div>
</div>
</div>
</div>
</div> <!-- accordion -->
<div class="col-lg-6 col-md-12">
<div class="panel panel-primary">
<div class="panel panel-default">
<div class="panel-heading">
<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 class="panel-body">
<p id="previewcreator" style="font-weight:bold"></p>
<p id="previewledcount" style="font-weight:bold"></p>
<div id="led_vis_help"></div>
<div class="col-lg-12 st_helper" style="padding-left:0px; padding-right:0px">
<div id="leds_preview"></div>
</div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-danger" id="leds_prev_toggle_num"><i class="fa fa-info fa-fw"></i><span data-i18n="main_ledsim_btn_togglelednumber">toggle led numbers</span></button>
<button type="button" class="btn btn-primary" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">toggle led numbers</span></button>
</div>
</div>
</div>
@ -342,4 +307,3 @@
</div>
<script src="/js/content_leds.js"></script>
<script src="/js/content_huebridge.js"></script>

View File

@ -0,0 +1,13 @@
<div class="container-fluid" id="trans_conf_logging">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></h3>
<div id="log_head"></div>
<div class="row" id='conf_cont'></div>
<hr />
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
</div>
</div>
</div>
<script src="/js/content_logging.js"></script>

View File

@ -1,11 +1,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<h4 data-i18n="conf_network_label_intro">All network based settings are listed here.</h4>
<hr />
</div>
<h3 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network Services</span></h3>
<div id="conf_cont"></div>
</div>
</div>

View File

@ -0,0 +1,10 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_webconfig_token">Webinterface</span></h3>
<div class="row" id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_webconfig.js"></script>

View File

@ -1,11 +1,8 @@
<div class="container-fluid" id="content_dashboard">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<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>
<hr />
</div>
<h3 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></h3>
<div id="dash_intro">
<div class="row">
<div class="col-md-6 col-xxl-4">
<div class="panel panel-default">
@ -17,7 +14,7 @@
<table class="table borderless">
<tbody>
<tr>
<td data-i18n="dashboard_infobox_label_currenthyp">Your Hyperion version:</td>
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
<td id="currentversion">unknown</td>
</tr>
<tr>
@ -25,7 +22,7 @@
<td id="latestversion">unknown</td>
</tr>
<tr>
<td data-i18n="dashboard_infobox_label_leddevice">LED type:</td>
<td data-i18n="conf_leds_contr_label_contrtype">LED type:</td>
<td id="dash_leddevice">unknown</td>
</tr>
<tr>
@ -78,6 +75,4 @@
</div>
<!-- /.container-fluid -->
<script type="text/javascript">
performTranslation('content_dashboard');
</script>
<script src="/js/content_dashboard.js"></script>

View File

@ -1,14 +0,0 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<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>
<hr />
</div>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_effects.js"></script>

View File

@ -1,10 +1,8 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<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>
<hr />
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
<div id="intro_effc">
</div>
<div class="row">
<div class="col-lg-6">
@ -28,7 +26,7 @@
<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' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</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' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
</div>
</div>
</div>
@ -37,7 +35,7 @@
<div class="panel-heading">
<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" />
<button class="btn btn-primary pull-right" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
</div>
</div>
</div>

View File

@ -1,30 +0,0 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_general_label_title">General</span></h2>
<div class="introd">
<h4 data-i18n="conf_general_label_intro"></h4>
</div>
<hr />
<div class="row" id="conf_cont"></div>
<div class="row">
<div class="col-lg-6" id="conf_imp">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_general_impexp_title"></span></div>
<div class="panel-body">
<p data-i18n="conf_general_impexp_l1" style="font-weight:bold"></p>
<p data-i18n="conf_general_impexp_l2" style="font-weight:bold"></p>
<input type="file" id="select_import_conf" accept=".json">
</div>
<div class="panel-footer" style="text-align:right">
<button type="file" class="btn btn-primary" id="btn_import_conf" data-i18n="conf_general_impexp_impbtn" disabled>Import</button>
<button class="btn btn-primary" id="btn_export_conf" data-i18n="conf_general_impexp_expbtn">Export</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_general.js"></script>

View File

@ -1,16 +0,0 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<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">
<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>
<hr />
</div>
<div id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_grabber.js"></script>

View File

@ -1,20 +0,0 @@
<div class="container-fluid" id="trans_conf_logging">
<div class="row">
<div class="col-lg-12">
<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">
<h4 data-i18n="conf_logging_label_intro">Area to check log messages, depending on loglevel setting you see more or less.</h4>
<hr />
</div>
<div class="row" id='conf_cont'></div>
<hr />
<pre>
<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>
<script src="/js/content_logging.js"></script>

View File

@ -1,39 +1,19 @@
<div class="container-fluid">
<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">
<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>
<hr />
</div>
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary" >
<div class="panel-heading" data-i18n="remote_colors_label_coloreffect">Colors/Effects</div>
<div class="panel-body">
<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;">
<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 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>
<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>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-lg-8 col-xxl-7">
<div class="panel panel-primary" >
<div class="panel-heading" data-i18n="remote_input_label_sourceselection">Source selection</div>
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
<div class="panel-body">
<span data-i18n="remote_help_text">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.</span>
<div id="sstcont"></div>
<div id="auto_btn"></div>
</div>
@ -41,10 +21,10 @@
</div>
<div class="col-lg-4 col-xxl-5">
<div class="panel panel-primary" >
<div class="panel-heading" data-i18n="remote_components_label_components">Components control</div>
<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 class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
<div class="panel-body" id="comp_intro">
<div id="componentsbutton"></div>
</div>
</div>
</div>
@ -53,11 +33,41 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<div class="panel panel-primary" >
<div class="panel-heading" data-i18n="remote_maptype_label">Mapping types</div>
<div class="panel-body">
<div id="mappingsbutton"><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 class="col-lg-6 col-xxl-4">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
<div class="panel-body" id="color_intro">
<table class="table borderless">
<tbody>
<tr>
<td style="vertical-align:middle"><label data-i18n="remote_color_label_color"></label></td>
<td><div id="cp2" class="colorpicker-component input-group">
<input type="text" class="form-control"/><span class="input-group-addon"><i></i></span>
</div>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label data-i18n="remote_effects_label_effects">Effect:</label></td>
<td><select id="effect_select" class="form-control"></select></td>
</tr>
</tbody>
</table>
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-warning" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
</div>
</div>
</div>
<div class="col-lg-6 col-xxl-3">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
<div class="panel-body" id="maptype_intro">
<div id="mappingsbutton"></div>
</div>
</div>
</div>
<div class="col-lg-6 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
<div class="panel-body" id="adjust_content">
</div>
</div>
</div>

View File

@ -1,12 +1,9 @@
<div class="container-fluid">
<div class="row">
<div class="col-xs-12">
<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">
<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>
<hr />
</div>
<h3 style="font-weight: bold" data-i18n="support_label_spreadtheword">Spread the word</h3>
<h3 class="page-header"><i class="fa fa-info fa-fw"></i><span data-i18n="support_label_title">Support Hyperion</span></h3>
<div id="supp_intro"></div>
<h4 style="font-weight: bold" data-i18n="support_label_spreadtheword">Spread the word</h4>
<a href="#" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-facebook bg-color-fb"></i>
@ -38,7 +35,7 @@
</div>
<div class="col-xs-12">
<hr>
<h3 style="font-weight: bold" data-i18n="support_label_donate">Donate or use our affiliate links</h3>
<h4 style="font-weight: bold" data-i18n="support_label_donate">Donate or use our affiliate links</h4>
<ol>
<li data-i18n="support_label_affinstr1">Click on the appropriate link of your country</li>
<li data-i18n="support_label_affinstr2">Everything you buy (doesnt matter what) we get a small fee based on your turnover</li>
@ -86,7 +83,7 @@
</div>
<div class="col-xs-12">
<hr>
<h3 style="font-weight: bold" data-i18n="support_label_webrestitle">Information and help ressources</h3>
<h4 style="font-weight: bold" data-i18n="support_label_webrestitle">Information and help ressources</h4>
<a href="https://www.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_webpage" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-globe bg-color-wf"></i>
@ -108,10 +105,20 @@
<p data-i18n="support_label_forumtext">Showcases, discussions, help and more</p>
</div>
</a>
<a href="https://github.com/hyperion-project" target="_blank" class="unlink">
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
<i class="fa fa-github bg-color-wf"></i>
<h4>Github</h4>
<p data-i18n="support_label_ghtext">Visit our Github repository</p>
</div>
</a>
</div>
</div>
</div>
<script type="text/javascript">
performTranslation('trans_support');
performTranslation();
if(showOptHelp)
createHintH("intro", $.i18n('support_label_intro'), "supp_intro");
</script>

View File

@ -1,7 +1,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h2>
<h3 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h3>
<div class="introd">
<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>
<hr />

View File

@ -1,14 +0,0 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h2 class="page-header"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_webconfig_token">Webinterface</span></h2>
<div class="introd">
<h4 data-i18n="conf_webconfig_label_intro">Webinterface settings. Edit wisely</h4>
<hr />
</div>
<div class="row" id="conf_cont"></div>
</div>
</div>
</div>
<script src="/js/content_webconfig.js"></script>

View File

@ -4,11 +4,43 @@
src: url("../fonts/Roboto-Regular.woff") format('woff'),
url("../fonts/Roboto-Regular.ttf") format('ttf');
}
body{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;}
body{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;max-width:2000px;margin: 0 auto;}
.form-group{margin-bottom:11px;}
#page-content {
padding-bottom:50px;
}
.btn{margin: 2px 0;}
/*mobile nav*/
@media (max-width: 768px){
.navbar-toggle{position:fixed;right:0px;}
#main-nav{position:fixed;right:-200px;}
}
.navbar-toggle .icon-bar {
background-color:#4c4c4c !important;
width: 22px;
transition: all 0.2s;
}
.navbar-toggle .top-bar {
transform: rotate(45deg);
transform-origin: 10% 10%;
}
.navbar-toggle .middle-bar {
opacity: 0;
}
.navbar-toggle .bottom-bar {
transform: rotate(-45deg);
transform-origin: 10% 90%;
}
.navbar-toggle.closed .top-bar {
transform: rotate(0);
}
.navbar-toggle.closed .middle-bar {
opacity: 1;
}
.navbar-toggle.closed .bottom-bar {
transform: rotate(0);
}
/*editor changes*/
[id^=editor_container] h3{margin-top:10px;}
@ -17,39 +49,62 @@ body{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15
.ltd{width:auto;text-align:left;white-space:nowrap;vertical-align:middle !important;padding:6px !important;}
.itd{width:100%;padding:6px !important;}
table.input-group{width:100%}
.borderless {margin-bottom:0px}
@media (max-width: 767px) {.ltd{white-space:normal;}}
/*icon spacing*/
.fa-fw{margin-right:5px;}
/*borderless table*/
/*table*/
table.borderless td,table.borderless th{border: none !important;}
.borderless {margin-bottom:0px}
table label{margin:0}
/*Header*/
.navbar-brand{padding: 5px;padding-left:20px;height:60px;}
.sidebar{margin-top:62px;padding-top:20px;}
.dropdown{font-size:18px;}
@media (max-width: 767px) {.sidebar{margin-top:0px;padding-top:0px !important;}}
@media (max-width: 1000px) {.introd{display:none}}
.page-header{margin-top:15px;}
/*Panels*/
.panel-heading{font-size:18px;}
.headcollapse{cursor:pointer;}
.headcollapse a:hover{text-decoration:none;}
.panel-default{
background-color:#fff !important;
border-color:#d0d0d0 !important;
}
.panel-default>.panel-heading{
background-color:#f3f3f3 !important;
border-color:#ddd !important;
}
/*remote page*/
@media (max-width: 500px) {#ssthead th:nth-child(1), #sstbody td:nth-child(1){display:none}}
@media (max-width: 500px) {.ssthead th:nth-child(1), .sstbody td:nth-child(1){display:none}}
/*Dashboard*/
.component-on{color:green;}
.component-off{color:grey;}
/*Colorpicker 2x*/
.colorpicker-2x {z-index:99999}
.colorpicker-2x .colorpicker-saturation {width: 200px;height: 200px;}
.colorpicker-2x .colorpicker-hue,.colorpicker-2x .colorpicker-alpha {width: 30px;height: 200px;}
.colorpicker-2x .colorpicker-color,.colorpicker-2x .colorpicker-color div {height: 30px;}
.colorpicker-2x .colorpicker-selectors i{height:20px;width:20px;}
/*Hint*/
.info-hint{
background-color:rgb(236,236,236);
border-radius:10px;
}
.intro-hint{
padding:8px 8px 8px 14px;
margin:0px 0px 15px 0px;
border-left:8px solid #0088cc;
border-top:1px solid #0088cc;
box-shadow: 1px 1px 1px 0px rgba(0,0,0,0.25);
font-size:97%;
}
/*Support page*/
.unlink,.unlink:hover{color:#333;text-decoration:none;}
@ -66,7 +121,7 @@ table.borderless td,table.borderless th{border: none !important;}
.support-container:hover .bg-color-am{background-color:#ef9c00; color:white;}
/*Config introduction*/
.introd h4{line-height:25px;padding-left:14px;border-left:5px solid #0088cc;}
.introd h4{padding-left:14px;border-left:5px solid #0088cc;}
/*backported bootstrap 4 forms-label alignment*/
.col-form-label {
@ -79,6 +134,11 @@ table.borderless td,table.borderless th{border: none !important;}
#leds_canvas {background-color:#AAAAAA; position:absolute; margin:15px; background-image:url(/img/hyperion/hyperionlogo.png); background-repeat:no-repeat; background-position: center;}
.led { display:inline-block; border: 1px solid black; position:absolute; opacity:0.8; text-align:center; vertical-align:middle; padding:4px; border-radius:2px;}
.led_num, .led_prev_num {display:none; position:relative; color:black; background-color: white; border-radius:2px; padding:1px; vertical-align:middle; text-align:center; font-size:0.8em;}
.led_ex{height:15px;width:25px;border-radius:3px;display:inline-block;border:1px solid black}
/*checklists*/
.checklist{list-style-type:none;padding-left:0px}
.checklist li::before{content: "\f00c";font: normal normal normal 14px/1 FontAwesome;margin-right:5px;color:green;font-size:19px}
/*Modal icons*/
[class*="modal-icon"]{
@ -110,6 +170,55 @@ table.borderless td,table.borderless th{border: none !important;}
z-index:99999;
}
/*simple ripple effect for li a and btn*/
.btn, li a{
position: relative;
overflow: hidden;
}
.btn:after {
content: "";
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
pointer-events: none;
background-image: radial-gradient(circle, #000 10%, transparent 10.01%);
background-repeat: no-repeat;
background-position: 50%;
transform: scale(10, 10);
opacity: 0;
transition: transform .5s, opacity 1s;
}
.btn:active:after {
transform: scale(0, 0);
opacity: .2;
transition: 0s;
}
li a:after {
content: "";
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
pointer-events: none;
background-image: radial-gradient(circle, #000 10%, transparent 10.01%);
background-repeat: no-repeat;
background-position: 50%;
transform: scale(10, 10);
opacity: 0;
transition: transform .5s, opacity 1s;
}
li a:active:after {
transform: scale(0, 0);
opacity: .2;
transition: 0s;
}
/**add a dditional width defintion for bootstrap**/
@media (min-width: 1500px) {
.col-xxl-1, .col-xxl-2, .col-xxl-3, .col-xxl-4, .col-xxl-5, .col-xxl-6, .col-xxl-7, .col-xxl-8, .col-xxl-9, .col-xxl-10, .col-xxl-11, .col-xxl-12 {

View File

@ -42,11 +42,12 @@
"general_btn_restarthyperion" : "Hyperion neustarten",
"general_btn_off" : "Aus",
"general_btn_on" : "An",
"general_btn_next" : "Weiter",
"general_btn_back" : "Zurück",
"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.",
@ -72,22 +73,26 @@
"main_menu_input_selection_token" : "Eingabeauswahl",
"main_menu_logging_token" : "Protokoll",
"main_menu_webconfig_token" : "Web Konfiguration",
"main_menu_about_token" : "Über Hyperion",
"main_ledsim_title" : "LED Visualisierung",
"main_ledsim_text" : "Eine live Visualisierung deiner LED Farben, sofern verfügbar kann ein live Video dazugeschalten werden. (Achtung: Ressourcenhungrig)",
"main_ledsim_text" : "Eine live Visualisierung deiner LED Farben, sofern verfügbar kann ein live Video dazugeschalten werden.",
"main_ledsim_btn_toggleleds" : "Zeige LEDs",
"main_ledsim_btn_togglelednumber" : "LED Nummern",
"main_ledsim_btn_togglelivevideo" : "Live Video",
"conf_general_label_title" : "Allgemeine Einstellungen",
"conf_general_label_intro" : "Grundsätzliche Einstellungen zu Hyperion oder WebUI, die in keine andere Kategorie passen.",
"conf_general_intro" : "Grundsätzliche Einstellungen zu Hyperion oder WebUI, die in keine andere Kategorie passen.",
"conf_general_impexp_title" : "Importiere/Exportiere Konfiguration",
"conf_general_impexp_l1" : "Importiere eine Konfiguration, indem du unten eine Datei auswählst und anschließend auf \"Importieren\" klickst.",
"conf_general_impexp_l1" : "Importiere eine bestehende Konfiguration, indem du unten eine Datei auswählst und anschließend auf \"Importieren\" klickst.",
"conf_general_impexp_l2" : "Exportiere eine Konfiguration, indem du auf \"Exportieren\" klickst. Dein Browser startet einen Download.",
"conf_general_impexp_impbtn" : "Importieren",
"conf_general_impexp_expbtn" : "Exportieren",
"conf_helptable_option" : "Option",
"conf_helptable_expl" : "Erklärung",
"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_effect_path_intro" : "Definiere weitere Effekt-Pfade, wenn nötig.",
"conf_effect_fgeff_intro" : "Definiere einen Start Effekt/Farbe, dieser wird angezeigt, wenn Hyperion startet für die angegebene Dauer.",
"conf_effect_bgeff_intro" : "Definiere einen Hintergrund Effekt/Farbe, dieser wird aktiv, wenn Hyperion sich im Leerlauf befindet. (Das gilt ebenfalls für temporäres abschalten mithilfe der Kodi Überwachung).",
"conf_leds_device_intro" : "Wähle eine Methode zur Steuerung deiner LEDs aus, sie sind unterteilt in verschiedene Kategorien. Neben den allgemeinen Optionen die für alle gültig sind, gibt es auch spezfische die sich unterscheiden je nach Wahl.",
"conf_leds_layout_intro" : "Du benötigst ebenfalls ein LED Layout, welches deine LED-Positionen wiederspiegelt. Das klassische Layout wird für gewöhnlichen für TVs verwendet, Hyperion unterstützt aber auch LED Wände (Matrix). Die Ansicht des LAYOUTS ist die perspektive VOR dem Fernseher, nicht dahinter.",
"conf_leds_nav_label_ledcontroller" : "LED Steuerung",
"conf_leds_nav_label_ledlayout" : "LED Layout",
"conf_leds_contr_label_contrtype" : "Steuerungstyp:",
@ -97,6 +102,11 @@
"conf_leds_optgroup_network" : "Netzwerk",
"conf_leds_optgroup_usb" : "USB",
"conf_leds_optgroup_debug" : "Debug",
"conf_leds_layout_btn_checklist" : "Zeige Checkliste",
"conf_leds_leyout_checkp1" : "Die schwarze eingefärbte LED ist die erste LED. Das ist der Punkt, an dem die Daten eingespeist werden.",
"conf_leds_leyout_checkp2" : "Das Layout ist die Ansicht vor dem Fernseher stehend, nicht dahinter.",
"conf_leds_leyout_checkp3" : "Stelle sicher, dass die Richtung richtig eingestellt ist, dazu ist die zweite und dritte LED grau markiert um den Datenfluss anzuzeigen.",
"conf_leds_leyout_checkp4" : "Vorgang Lücke: Solltest du eine Lücke benötigen, ignoriere diese bei der LED Angabe Oben/Unten/Rechts/Links und gebe anschließend unter Lückenlänge an, wieviel LEDs du abziehen möchtest. Verändere jetzt die Lückenposition, um die Lücke an die richtige Stelle zu rücken.",
"conf_leds_layout_frame" : "Klassisches Layout (Rahmen)",
"conf_leds_layout_matrix" : "Matrix Layout (LED Wand)",
"conf_leds_layout_generatedconf" : "Generierte/Aktuelle LED Konfiguration",
@ -108,6 +118,8 @@
"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_l1" : "Das ist die erste LED (Einspeisung)",
"conf_leds_layout_preview_l2" : "Das visualisiert die Richtung des Datenstroms (zweite/dritte LED)",
"conf_leds_layout_cl_top" : "Oben",
"conf_leds_layout_cl_bottom" : "Unten",
"conf_leds_layout_cl_left" : "Links",
@ -121,6 +133,7 @@
"conf_leds_layout_cl_generate" : "Generiere LED Konfiguration",
"conf_leds_layout_cl_edgegap" : "Rahmenabstand",
"conf_leds_layout_cl_cornergap" : "Eckabstand",
"conf_leds_layout_cl_overlap" : "Überlappung",
"conf_leds_layout_ma_horiz" : "Horizontal",
"conf_leds_layout_ma_vert" : "Vertikal",
"conf_leds_layout_ma_cabling" : "Verkabelung",
@ -135,22 +148,33 @@
"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 unten erstellt hast. Optional kann man die Werte hier weiter bearbeiten.",
"conf_leds_layout_textf2" : "Vergiss nicht zu speichern!",
"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_grabber_fg_intro" : "Plattform Aufnahme ist das lokale System auf dem Hyperion installiert wurde, welches als Bildquelle dient.",
"conf_grabber_v4l_intro" : "USB Aufnahme ist ein Gerät, welches via USB angeschlossen ist und als Bildquelle dient.",
"conf_colors_color_intro" : "Erstelle Kalibrierungsprofile und passe Farben an, Helligkeit, Linearisierung und mehr.",
"conf_colors_smoothing_intro" : "Glätte den Farbverlauf und Helligkeitsänderungen um nicht von schnellen Übergängen abgelenkt zu werden.",
"conf_colors_blackborder_intro" : "Ignoriere schwarze Balken, jeder Modus nutzt einen anderen Algorithmus um diese zu erkennen. Erhöhe die Schwelle, sollte es nicht funktionieren.",
"conf_network_json_intro" : "Der JSON-RPC-Port dieser Hyperion-Instanz, wird genutzt zur Fernsteuerung.",
"conf_network_proto_intro" : "Der PROTO-Port dieser Hyperion-Instanz, wird genutzt für \"Bildstreams\" (HyperionScreenCap, Kodi Adddon, ...)",
"conf_network_bobl_intro" : "Boblight Empfänger",
"conf_network_udpl_intro" : "UDP Empfänger",
"conf_network_forw_intro" : "Leite alles an eine zweite Hyperion Instanz weiter, diese kann dann mit einer anderen LED Steuerung genutzt werden",
"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_kodi_intro" : "Die Kodi Überwachung ermöglicht es dir abhängig vom 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",
"conf_logging_nomessage" : "Keine Einträge vorhanden.",
"conf_webconfig_label_intro" : "Einstellungen zur Webkonfiguration. Änderungen können die Erreichbarkeit des Webinterfaces beeinflussen.",
"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_losthint" : "Notiz: Alle Änderungen gehen nach einem Neustart verloren.",
"remote_color_label" : "Farbe/Effekt",
"remote_color_intro" : "Setze einen Effekt oder eine Farbe. Auch deine selbst erstellten Effekte sind gelistet (sofern verfügbar). $1",
"remote_color_button_reset" : "Farbe/Effekt zurücksetzen",
"remote_color_label_color" : "Farbe:",
"remote_effects_label_effects" : "Effekt:",
"remote_input_label_sourceselection" : "Quellenauswahl",
"remote_adjustment_label" : "Farbanpassung",
"remote_adjustment_intro" : "Verändere live Farbe/Helligkeit/Linearisierung. $1",
"remote_input_label" : "Quellenauswahl",
"remote_input_intro" : "Hyperion nutzt ein Prioritätensystem um die Quelle zu wählen. Alles was du setzte hat eine Prioität (Effekte/Farben/Plattform Aufnahme/USB Aufnahme und Netzwerkquellen). Standardmäßig nutzt Hyperion die Quelle mit der niedrigsten Prioität. Hier kannst du aktiv Einfluss darauf nehmen. $1",
"remote_input_label_autoselect" : "Automatische Auswahl",
"remote_input_setsource_btn" : "Wähle Quelle",
"remote_input_sourceactiv_btn" : "Quelle aktiv",
@ -160,22 +184,14 @@
"remote_input_status" : "Status/Aktion",
"remote_input_duration" : "Dauer:",
"remote_input_ip" : "IP:",
"remote_components_label_components" : "Komponentensteuerung",
"remote_components_label" : "Komponentensteuerung",
"remote_components_intro" : "Starte und stoppe Komponenten von Hyperion. $1",
"remote_optgroup_usreffets" : "Benutzer Effekte",
"remote_optgroup_syseffets" : "Mitgelieferte Effekte",
"remote_help_text" : "Hyperion nutzt ein Prioritätensystem um die Quelle zu wählen. Alles was du setzte hat eine Prioität (Effekte/Farben/Plattform Aufnahme/USB Aufnahme und Netzwerkquellen). Standardmäßig nutzt Hyperion die Quelle mit der niedrigsten Prioität. Hier kannst du direkt die Quelle auswählen.",
"remote_maptype_label" : "Farbzuordnung",
"remote_maptype_label" : "LED-Bereich Zuordnung",
"remote_maptype_intro" : "Wechsle zwischen verschiedenen Typen um die Auswirkungen besser vergleichen zu können. $1",
"remote_maptype_label_multicolor_mean" : "Mehrfarbig",
"remote_maptype_label_unicolor_mean" : "Einfarbig",
"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:",
"hue_help_text" : "Mit diesem Setupassistenten kannst du einen neuen User auf der Hue Bridge anlegen und deine LightIDs für die Hyperion Konfiguration herausfinden. Wenn du bereits einen eingetragenen User hast, siehst du diesen bereits untenstehend eingetragen. Du kannst allerdings jederzeit einen neuen Anlegen. Beachte: Dies ist nur ein Assistent. Du musst die Daten in die Konfiguration kopieren.",
"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",
@ -205,12 +221,20 @@
"support_label_wikitext" : "Von A bis Z - Alles wissenwerte zu Hyperion",
"support_label_forumtitle" : "Forum",
"support_label_forumtext" : "Diskussion und Hilfestellung von der Community",
"support_label_ghtext" : "Besuche uns auf Github",
"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",
"about_version" : "Version",
"about_build" : "Build",
"about_builddate" : "Build Datum",
"about_translations" : "Übersetzungen",
"about_resources" : "$1 Bibliotheken",
"about_contribute" : "Übersetze Hyperion in weitere Sprachen!",
"about_credits" : "Einen Dank an alle Entwickler!",
"info_conlost_label_title" : "Verbindung zum Hyperion Service unterbrochen!",
"info_conlost_label_reason" : "Mögliche Ursachen:",
"info_conlost_label_reason1" : "- Schlechte WLAN Verbindung",
@ -226,15 +250,10 @@
"infoDialog_general_success_title" : "Erfolg",
"infoDialog_general_error_title" : "Fehler",
"infoDialog_general_warning_title" : "Warnung",
"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_checklist_title" : "Checkliste!",
"InfoDialog_leds_validfail_title" : "JSON Überprüfung fehlgeschlagen!",
"infoDialog_effconf_deleted_title" : "Effekt entfernt!",
"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" : "Fehlerhafter Wert!",
"infoDialog_effconf_invalidvalue_text" : "Es wurde ein unzulässiger Wert eingetragen, überprüfe das rot markierte Feld und versuche es erneut!",
"InfoDialog_lang_title" : "Spracheinstellung",
"InfoDialog_lang_text" : "Sollte dir die Vorauswahl der automatischen Spracherkennung nicht gefallen, kannst du die Sprache hier manuell festlegen.",
"InfoDialog_access_title" : "Einstellungsstufe",
@ -258,6 +277,37 @@
"wiz_rgb_q" : "Welche Farbe zeigen deine LEDs, wenn der Farbpunkt oben...",
"wiz_rgb_qrend" : "...rot ist?",
"wiz_rgb_qgend" : "...grün ist?",
"wiz_hue_title" : "Hue Bridge Assistent",
"wiz_hue_intro1" : "Mit diesem Setupassistenten kannst du einen neuen User auf der Hue Bridge anlegen und deine LightIDs für die Hyperion Konfiguration herausfinden.",
"wiz_hue_intro2" : "Beachte: Dies ist nur ein Assistent. Du musst die Daten in die Konfiguration kopieren.",
"wiz_hue_ip" : "Hue Bridge IP:",
"wiz_hue_username" : "Benutzername:",
"wiz_hue_create_user" : "Benutzer anlegen",
"wiz_hue_failure_ip" : "Bitte überprüfe deine IP Adresse.",
"wiz_hue_failure_connection" : "Connection Timeout. Bitte drücke die Taste rechtzeitig.",
"wiz_hue_press_link" : "Bitte Link Taste auf der Hue Bridge drücken.",
"wiz_cc_title" : "Farbkalibrierungs Assistent",
"wiz_cc_intro1" : "Der Assistent wird dich durch die Kalibrierung deiner LEDs leiten. Sofern du Kodi nutzt, können die Bilder und Testvideos direkt an Kodi geschickt werden. Andernfalls musst du das Material selbst herunterladen und anwenden.",
"wiz_cc_kwebs" : "Kodi Webserver (IP:Port)",
"wiz_cc_kodidiscon" : "Kodi Webserver nicht gefunden, fahre ohne Kodi-Unterstützung fort.",
"wiz_cc_kodidisconlink" : "Download Link Bilder:",
"wiz_cc_kodicon" : "Kodi Webserver gefunden, fahre mit Kodi-Unterstützung fort.",
"wiz_cc_kodimsg_start" : "Test bestanden - Zeit zu beginnen",
"wiz_cc_kodishould" : "Kodi sollte jetzt folgendes Bild anzeigen: $1",
"wiz_cc_lettvshow" : "Lass dabei deinen Fernseher folgendes Bild anzeigen: $1",
"wiz_cc_lettvshowm" : "Überprüfe dies mithilfe folgender Bildern: $1",
"wiz_cc_adjustit" : "Verändere dein \"$1\", bis du zufrieden bist.",
"wiz_cc_adjustgamma" : "Gamma: Was du jetzt tun musst ist, jeden Gamma-Kanal so einstellen, dass der \"Grauverlauf\" auf den LEDs nicht grünlich/rötlich/bläulich aussieht. Beispiel: Sollte dein grau etwas rötlich sein bedeutet dies, dass du dein Gamma für Rot erhöhen musst um den Rot-Anteil zu verringern (Je mehr Gamma, desto weniger Farbe).",
"wiz_cc_chooseid" : "Wähle einen Namen für dieses Profil.",
"wiz_cc_btn_switchpic" : "Testbild ändern",
"wiz_cc_minBright" : "Zusätzlich kannst du eine minimale Helligkeit einstellen, um \"irritierende Farben\" bei fast schwarzem Bild zu vermeiden oder du den Wechsel zwischen Farbe und Aus als zu anstrengend empfindest. Diese ist deaktiviert im Zustand \"Aus\" sowie bei Farben und Effekten.",
"wiz_cc_testintro" : "Nun ist es an der Zeit für einen Testlauf.",
"wiz_cc_testintrok" : "Klicke auf einen Button, um eines der Testvideos abzuspielen.",
"wiz_cc_testintrowok" : "Unter folgendem Link findest du ein paar Testvideos zum herunterladen und abspielen:",
"wiz_cc_link" : "Klick mich",
"wiz_cc_morethanone" : "Du hast mehr als 1 Profil, bitte wähle das zu kalibrierende Profil",
"wiz_cc_btn_stop" : "Stoppe Video",
"wiz_cc_summary" : "Im folgenden eine Zusammenfassung deiner Einstellungen. Während du ein Video abspielst, kannst du hier weiter ausprobieren. Wenn du fertig bist, klicke auf speichern.",
"edt_dev_enum_subtract_minimum" : "Subtrahiere minimum",
"edt_dev_enum_sub_min_warm_adjust" : "Minimale Anpassung: warm",
"edt_dev_enum_white_off" : "Weiß ist aus",
@ -342,12 +392,10 @@
"edt_conf_gen_showOptHelp_expl" : "Zeige alle verfügbaren Options-Erklärungen. Empfohlen für Anfänger",
"edt_conf_color_heading_title" : "Farbkalibrierung",
"edt_conf_color_channelAdjustment_header_title" : "Anpassung Farbkanäle",
"edt_conf_color_channelAdjustment_header_itemtitle" : "Profil",
"edt_conf_color_channelAdjustment_header_expl" : "Passe die Farbkanäle deinen LEDs an",
"edt_conf_color_imageToLedMappingType_title" : "LED-Bereich Zuordnungstyp",
"edt_conf_color_imageToLedMappingType_expl" : "Sofern nicht \"Mehrfarbig\", wird dein LED Layout mit einer anderen Bildzuweisung überschrieben",
"edt_conf_color_channelAdjustment_enable_title" : "Aktiviere Farbkanalanpassung",
"edt_conf_color_channelAdjustment_enable_expl" : "Aktiviere die Farbkanalanpassung",
"edt_conf_color_channelAdjustment_v4l_only_title" : "Nur für USB Aufnahme",
"edt_conf_color_id_title" : "ID",
"edt_conf_color_id_expl" : "Eine vom Benutzer frei angegebene ID.",
"edt_conf_color_leds_title" : "LED index",
@ -368,14 +416,14 @@
"edt_conf_color_magenta_expl" : "Kalibrierter Magentawert.",
"edt_conf_color_yellow_title" : "Gelb",
"edt_conf_color_yellow_expl" : "Kalibrierter Gelbwert.",
"edt_conf_color_gamma_red_title" : "Gamma rot",
"edt_conf_color_gamma_red_expl" : "Gamma von rot.",
"edt_conf_color_gamma_green_title" : "Gamma grün",
"edt_conf_color_gamma_green_expl" : "Gamma von grün.",
"edt_conf_color_gamma_blue_title" : "Gamma blau",
"edt_conf_color_gamma_blue_expl" : "Gamma von blau",
"edt_conf_color_brightness_min_title" : "Minimale Helligkeit",
"edt_conf_color_brightness_min_expl" : "Auch als Hintergrundhelligkeit genutzt.",
"edt_conf_color_gammaRed_title" : "Gamma rot",
"edt_conf_color_gammaRed_expl" : "Gamma von rot.",
"edt_conf_color_gammaGreen_title" : "Gamma grün",
"edt_conf_color_gammaGreen_expl" : "Gamma von grün.",
"edt_conf_color_gammaBlue_title" : "Gamma blau",
"edt_conf_color_gammaBlue_expl" : "Gamma von blau",
"edt_conf_color_brightnessMin_title" : "Minimale Helligkeit",
"edt_conf_color_brightnessMin_expl" : "Auch als Hintergrundhelligkeit genutzt.",
"edt_conf_color_brightness_title" : "Maximale Helligkeit",
"edt_conf_color_brightness_expl" : "Zwischen 0.0 und 0.5 ist die Helligkeit linearisiert. Von 0.5 bis 1.0 wird cyan, magenta und gelb bis zu 2x heller und weiß bis zu 3x.",
"edt_conf_smooth_heading_title" : "Glättung",
@ -449,7 +497,7 @@
"edt_conf_kodic_kodiAddress_title" : "Kodi IP Adresse",
"edt_conf_kodic_kodiAddress_expl" : "Die IP Adresse von Kodi.",
"edt_conf_kodic_kodiTcpPort_title" : "Kodi TCP Port",
"edt_conf_kodic_kodiTcpPort_expl" : "Der Kodi TCP Port.",
"edt_conf_kodic_kodiTcpPort_expl" : "Der Kodi TCP Port. Nutze nicht den Webserver Port!",
"edt_conf_kodic_grabVideo_title" : "Video",
"edt_conf_kodic_grabVideo_expl" : "Wenn aktiviert, ist die Aufnahme aktiv während ein Video abgespielt werden.",
"edt_conf_kodic_grabPictures_title" : "Bilder",
@ -486,8 +534,11 @@
"edt_conf_bobls_heading_title" : "Boblight Server",
"edt_conf_udpl_heading_title" : "UDP Listener",
"edt_conf_udpl_address_title" : "Adresse",
"edt_conf_udpl_address_expl" : "Die Adresse auf der UDP Pakete akzeptiert werden.",
"edt_conf_udpl_timeout_title" : "Zeitüberschreitung",
"edt_conf_udpl_timeout_expl" : "Wenn für die angegeben Zeit keine UDP Pakete empfangen werden, wird die Komponente (vorübergehend) deaktiviert",
"edt_conf_udpl_shared_title" : "Gemeinsam genutzt",
"edt_conf_udpl_shared_expl" : "Wird gemeinsam über alle Hyperion Instanzen genutzt.",
"edt_conf_webc_heading_title" : "Web Konfiguration",
"edt_conf_webc_docroot_title" : "Verzeichnis",
"edt_conf_webc_docroot_expl" : "Lokaler Pfad zum WebUI Wurzelverzeichnis (Nur für WebUI Entwickler)",
@ -504,7 +555,9 @@
"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_lightclock_header_title" : "Uhr 1",
"edt_eff_clock_header_title" : "Uhr 2",
"edt_eff_pacman_header_title" : "Pac-Man",
"edt_eff_moodblobs_header_title" : "Stimmungskugeln",
"edt_eff_rainbowswirl_header_title" : "Regenbogenwirbel",
"edt_eff_random_header_title" : "Zufällig",
@ -557,6 +610,13 @@
"edt_eff_min_len_title" : "Minimale Länge",
"edt_eff_max_len_title" : "Maximale Länge",
"edt_eff_height_title" : "Höhe",
"edt_eff_offset_title" : "Verschiebung",
"edt_eff_colorHour_title" : "Farbe Stunde",
"edt_eff_colorMinute_title" : "Farbe Minute",
"edt_eff_colorSecond_title" : "Farbe Sekunde",
"edt_eff_hourMargin_title" : "Abstand Stunde",
"edt_eff_minuteMargin_title" : "Abstand Minute",
"edt_eff_secondMargin_title" : "Abstand Sekunde",
"edt_append_ns" : "ns",
"edt_append_ms" : "ms",
"edt_append_s" : "s",

View File

@ -42,11 +42,12 @@
"general_btn_restarthyperion" : "Restart Hyperion",
"general_btn_off" : "Off",
"general_btn_on" : "On",
"general_btn_next" : "Next",
"general_btn_back" : "Back",
"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.",
@ -72,13 +73,14 @@
"main_menu_input_selection_token" : "Input Selection",
"main_menu_logging_token" : "Log",
"main_menu_webconfig_token" : "Web configuration",
"main_menu_about_token" : "About Hyperion",
"main_ledsim_title" : "LED Visualization",
"main_ledsim_text" : "Live visualization of led colors and optional the current video stream of your capture device. (Warning: resource heavy)",
"main_ledsim_text" : "Live visualization of led colors and optional the current video stream of your capture device.",
"main_ledsim_btn_toggleleds" : "Show LEDs",
"main_ledsim_btn_togglelednumber" : "LED numbers",
"main_ledsim_btn_togglelivevideo" : "Live video",
"conf_general_label_title" : "General settings",
"conf_general_label_intro" : "Basic settings around Hyperion and WebUI that don't fit into another category.",
"conf_general_intro" : "Basic settings around Hyperion and WebUI that don't fit into another category.",
"conf_general_impexp_title" : "Import/Export Configuration",
"conf_general_impexp_l1" : "Import a configuration by selecting a configuration file below and click on \"Import\".",
"conf_general_impexp_l2" : "Export a configuration by clicking on \"Export\". Your browser starts a download.",
@ -86,8 +88,11 @@
"conf_general_impexp_expbtn" : "Export",
"conf_helptable_option" : "Option",
"conf_helptable_expl" : "Explanation",
"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_effect_path_intro" : "Define more effect paths if necessary.",
"conf_effect_fgeff_intro" : "Define a booteffect or color, which is shown during Hyperion startup for the defined duration.",
"conf_effect_bgeff_intro" : "Define a background effect, which us shown during \"idle\". (also temporarily via Kodi Watch)",
"conf_leds_device_intro" : "Hyperion supports a lot of controllers to transmit data to your target device. Select a LED controller out of the sorted list and configure it. We have chosen the best default settings for each device.",
"conf_leds_layout_intro" : "You need also a led layout, which reflects your led positions. The classic layout is the usual used tv frame, but we also support led matrix (led walls) creation. The view on this layout is ALWAYS of the FRONT of your TV.",
"conf_leds_nav_label_ledcontroller" : "LED Controller",
"conf_leds_nav_label_ledlayout" : "LED Layout",
"conf_leds_contr_label_contrtype" : "Controller type:",
@ -97,6 +102,11 @@
"conf_leds_optgroup_network" : "Network",
"conf_leds_optgroup_usb" : "USB",
"conf_leds_optgroup_debug" : "Debug",
"conf_leds_layout_btn_checklist" : "Show checklist",
"conf_leds_leyout_checkp1" : "The black led is your first led, the first led is the point where you input your data signal.",
"conf_leds_leyout_checkp2" : "The layout is always the front view of your TV, never the back view.",
"conf_leds_leyout_checkp3" : "Make sure the direction is right. The grey leds indicate led number 2 and 3 to visualize the data direction.",
"conf_leds_leyout_checkp4" : "Case Gap: To create a gap, ignore it first when you define Top/Bottom/Left/Right and set afterwards your gap length to remove a amount of leds. Modify the gap position until it matches.",
"conf_leds_layout_frame" : "Classic Layout (LED Frame)",
"conf_leds_layout_matrix" : "Matrix Layout (LED Wall)",
"conf_leds_layout_generatedconf" : "Generated/Current LED Configuration",
@ -108,6 +118,8 @@
"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_l1" : "This is your first led (input position)",
"conf_leds_layout_preview_l2" : "This visualizes the data direction (second/third led)",
"conf_leds_layout_cl_top" : "Top",
"conf_leds_layout_cl_bottom" : "Bottom",
"conf_leds_layout_cl_left" : "Left",
@ -121,6 +133,7 @@
"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_cl_overlap" : "Overlap",
"conf_leds_layout_ma_horiz" : "Horizontal",
"conf_leds_layout_ma_vert" : "Vertical",
"conf_leds_layout_ma_cabling" : "Cabling",
@ -135,22 +148,33 @@
"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 with the options below. Optional you could perform further edits.",
"conf_leds_layout_textf2" : "Don't forget to save!",
"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_grabber_fg_intro" : "Platforum capture is your local system capture as input source, Hyperion is installed on.",
"conf_grabber_v4l_intro" : "USB capture is a (capture)device connected via USB which is used to input source pictures for processing.",
"conf_colors_color_intro" : "Create one or more calibration profiles, adjust each color, brightness, linearization and more.",
"conf_colors_smoothing_intro" : "Smoothing flattens color/brightness changes to reduce annoying distraction.",
"conf_colors_blackborder_intro" : "Skip black bars wherever they are. Each mode use another detection algorithm which is tuned for special situations. Higher the threshold if it doesn't work for you.",
"conf_network_json_intro" : "The JSON-RPC-Port of this Hyperion instance, used for remote control.",
"conf_network_proto_intro" : "The PROTO-Port of this Hyperion instance, used for picture streams (HyperionScreenCap, Kodi Adddon, ...)",
"conf_network_bobl_intro" : "Receiver for Boblight",
"conf_network_udpl_intro" : "Receiver for UDP",
"conf_network_forw_intro" : "Forward all input to a second Hyperion instance which could be driven with another led controller",
"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_kodi_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",
"conf_logging_nomessage" : "No log messages available.",
"conf_webconfig_label_intro" : "Webconfiguration settings. Edit wisely.",
"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_losthint" : "Note: All changes are lost after a restart.",
"remote_color_label" : "Colors/Effects",
"remote_color_intro" : "Set an effect or color. Also your self created effects are listed (if available). $1",
"remote_color_button_reset" : "Reset Color/Effect",
"remote_color_label_color" : "Color:",
"remote_effects_label_effects" : "Effect:",
"remote_input_label_sourceselection" : "Source Selection",
"remote_adjustment_label" : "Color adjustment",
"remote_adjustment_intro" : "Modifiy color/brightness/linearization during runtime. $1",
"remote_input_label" : "Source Selection",
"remote_input_intro" : "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. $1",
"remote_input_label_autoselect" : "Auto Selection",
"remote_input_setsource_btn" : "Select Input",
"remote_input_sourceactiv_btn" : "Input active",
@ -160,22 +184,14 @@
"remote_input_status" : "Status/Action",
"remote_input_duration" : "Duration:",
"remote_input_ip" : "IP:",
"remote_components_label_components" : "Components control",
"remote_components_label" : "Components control",
"remote_components_intro" : "Enable and disable components of Hyperion during runtime. $1",
"remote_optgroup_usreffets" : "User Effects",
"remote_optgroup_syseffets" : "Provided Effects",
"remote_help_text" : "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.",
"remote_maptype_label" : "Mapping type",
"remote_maptype_intro" : "Change the mapping type during runtime. $1",
"remote_maptype_label_multicolor_mean" : "Multicolor",
"remote_maptype_label_unicolor_mean" : "Unicolor",
"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:",
"hue_help_text" : "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. If you already have a working User you will see it below. But you can always create a new one as well. Remember: This is only a helper. You have to copy and paste them in your config above.",
"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",
@ -205,12 +221,20 @@
"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",
"support_label_ghtext" : "Visit us on Github",
"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",
"about_version" : "Version",
"about_build" : "Build",
"about_builddate" : "Build date",
"about_translations" : "Translations",
"about_resources" : "$1 libraries",
"about_contribute" : "Add more languages to Hyperion!",
"about_credits" : "Credits to all these developers!",
"info_conlost_label_title" : "Lost connection to Hyperion service!",
"info_conlost_label_reason" : "Possible reasons:",
"info_conlost_label_reason1" : "- Bad WLAN connection",
@ -226,13 +250,10 @@
"infoDialog_general_success_title" : "Success",
"infoDialog_general_error_title" : "Error",
"infoDialog_general_warning_title" : "Warning",
"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_checklist_title" : "Checklist!",
"InfoDialog_leds_validfail_title" : "JSON Validation failed!",
"infoDialog_effconf_deleted_text" : "The effect \"$1\" has been deleted successfully!",
"infoDialog_effconf_created_text" : "The effect \"$1\" has been created successfully!",
"infoDialog_effconf_invalidvalue_title" : "INVALID VALUE",
"infoDialog_effconf_invalidvalue_text" : "Please check for red marked input(s) and try again!",
"InfoDialog_lang_title" : "Language setting",
"InfoDialog_lang_text" : "If you don't like the result of the automatic language detection you could overwrite it here.",
"InfoDialog_access_title" : "Settings level",
@ -256,6 +277,37 @@
"wiz_rgb_q" : "Which color show your leds, when the color dot above shows...",
"wiz_rgb_qrend" : "...red?",
"wiz_rgb_qgend" : "...green?",
"wiz_hue_title" : "Hue Bridge Wizard",
"wiz_hue_intro1" : "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.",
"wiz_hue_intro2" : "Remember: This is only a wizard. You have to copy and paste them in your config.",
"wiz_hue_ip" : "Hue Bridge IP:",
"wiz_hue_username" : "Username:",
"wiz_hue_create_user" : "Create User",
"wiz_hue_failure_ip" : "Please check your IP Address.",
"wiz_hue_failure_connection" : "Connection Timeout. Please press the button in time.",
"wiz_hue_press_link" : "Please press link button on the Hue Bridge.",
"wiz_cc_title" : "Color calibration wizard",
"wiz_cc_intro1" : "This wizard will guide you through your led calibration. If you are using Kodi, the calibration pictures and videos can be send directly to kodi without further tasks on your side. If not, you need to download these files yourself and apply them, if the wizard wants it.",
"wiz_cc_kwebs" : "Kodi webserver (IP:Port)",
"wiz_cc_kodidiscon" : "Kodi webserver not found, proceed without Kodi support.",
"wiz_cc_kodidisconlink" : "Download link pictures:",
"wiz_cc_kodicon" : "Kodi webserver found, proceed with Kodi support.",
"wiz_cc_kodimsg_start" : "Test success - time to proceed!",
"wiz_cc_kodishould" : "Kodi should the following picture: $1",
"wiz_cc_lettvshow" : "Let your TV show the following picture: $1",
"wiz_cc_lettvshowm" : "Check this with the following pictures: $1",
"wiz_cc_adjustit" : "Adjust your \"$1\", until your are fine with it.",
"wiz_cc_adjustgamma" : "Gamma: Was du jetzt tun musst ist, jeden Gamma-Kanal so einstellen, dass der \"Grauverlauf\" auf den LEDs nicht grünlich/rötlich/bläulich aussieht. Beispiel: Sollte dein grau etwas rötlich sein bedeutet dies, dass du dein Gamma für Rot erhöhen musst um den Rot-Anteil zu verringern (Je mehr Gamma, desto weniger Farbe).",
"wiz_cc_chooseid" : "Select a name for this profile.",
"wiz_cc_btn_switchpic" : "Switch picture",
"wiz_cc_minBright" : "Additional you could define a minimum brightness to sort out \"bad colors\" on nearly dark areas or if you don't like the switch between color and off during watching. This is disabled during the state \"Off\" ,color and effect.",
"wiz_cc_testintro" : "Time for a real test!",
"wiz_cc_testintrok" : "Push on a button below to start a test video.",
"wiz_cc_testintrowok" : "Checkout the following link to download test videos:",
"wiz_cc_link" : "Click me!",
"wiz_cc_morethanone" : "You have more than one profile, please choose the profile you want to calibrate.",
"wiz_cc_btn_stop" : "Stop video",
"wiz_cc_summary" : "A conclusen of your settings. During video playback, you could change or test values again. If you are done, click on save.",
"edt_dev_enum_subtract_minimum" : "Substract minimum",
"edt_dev_enum_sub_min_warm_adjust" : "Min warm adjust",
"edt_dev_enum_white_off" : "White off",
@ -340,12 +392,10 @@
"edt_conf_gen_showOptHelp_title" : "Show explanations",
"edt_conf_gen_showOptHelp_expl" : "Show all available explanations in each section. Highly recommended for beginners!",
"edt_conf_color_heading_title" : "Color Calibration",
"edt_conf_color_channelAdjustment_header_itemtitle" : "Profile",
"edt_conf_color_channelAdjustment_header_title" : "Color channel adjustments",
"edt_conf_color_imageToLedMappingType_title" : "Led area assignment",
"edt_conf_color_imageToLedMappingType_expl" : "Overwrites the led area assignment of your led layout if it's not \"multicolor\"",
"edt_conf_color_channelAdjustment_enable_title" : "Enable channel adjustment",
"edt_conf_color_channelAdjustment_enable_expl" : "Activates the adjustment option",
"edt_conf_color_channelAdjustment_v4l_only_title" : "Assign USB Capture only",
"edt_conf_color_id_title" : "ID",
"edt_conf_color_id_expl" : "User given name",
"edt_conf_color_leds_title" : "LED index",
@ -366,14 +416,14 @@
"edt_conf_color_magenta_expl" : "The calibrated magenta value.",
"edt_conf_color_yellow_title" : "yellow",
"edt_conf_color_yellow_expl" : "The calibrated yellow value.",
"edt_conf_color_gamma_red_title" : "gamma red",
"edt_conf_color_gamma_red_expl" : "The gamma of red.",
"edt_conf_color_gamma_green_title" : "gamma green",
"edt_conf_color_gamma_green_expl" : "The gamma of green.",
"edt_conf_color_gamma_blue_title" : "gamma blue",
"edt_conf_color_gamma_blue_expl" : "The gamma of blue.",
"edt_conf_color_brightness_min_title" : "minimal brightness",
"edt_conf_color_brightness_min_expl" : "The minimum amount of brightness (backlight).",
"edt_conf_color_gammaRed_title" : "gamma red",
"edt_conf_color_gammaRed_expl" : "The gamma of red.",
"edt_conf_color_gammaGreen_title" : "gamma green",
"edt_conf_color_gammaGreen_expl" : "The gamma of green.",
"edt_conf_color_gammaBlue_title" : "gamma blue",
"edt_conf_color_gammaBlue_expl" : "The gamma of blue.",
"edt_conf_color_brightnessMin_title" : "minimal brightness",
"edt_conf_color_brightnessMin_expl" : "The minimum amount of brightness (backlight).",
"edt_conf_color_brightness_title" : "maximal brightness",
"edt_conf_color_brightness_expl" : "From 0.0 to 0.5 the brightness is linearised, from 0.5 to 1.0 cyan, magenta, yellow is up to 2x brighter and white 3x.",
"edt_conf_smooth_heading_title" : "Smoothing",
@ -447,7 +497,7 @@
"edt_conf_kodic_kodiAddress_title" : "Kodi IP address",
"edt_conf_kodic_kodiAddress_expl" : "The IP address of Kodi.",
"edt_conf_kodic_kodiTcpPort_title" : "Kodi TCP port",
"edt_conf_kodic_kodiTcpPort_expl" : "The TCP port of Kodi.",
"edt_conf_kodic_kodiTcpPort_expl" : "The TCP port of Kodi. Don't use the webserver port!",
"edt_conf_kodic_grabVideo_title" : "Video",
"edt_conf_kodic_grabVideo_expl" : "If checked, the capturing is enabled during video playback, else it's disabled.",
"edt_conf_kodic_grabPictures_title" : "Pictures",
@ -484,8 +534,11 @@
"edt_conf_bobls_heading_title" : "Boblight Server",
"edt_conf_udpl_heading_title" : "UDP Listener",
"edt_conf_udpl_address_title" : "Address",
"edt_conf_udpl_address_expl" : "The address where UDP packages are accepted.",
"edt_conf_udpl_timeout_title" : "Timeout",
"edt_conf_udpl_timeout_expl" : "If no packages are received for the given period, the component will be (soft) disabled.",
"edt_conf_udpl_shared_title" : "Shared",
"edt_conf_udpl_shared_expl" : "Shared across all Hyperion instances.",
"edt_conf_webc_heading_title" : "Web Configuration",
"edt_conf_webc_docroot_title" : "Document Root",
"edt_conf_webc_docroot_expl" : "Local webinterface root path (just for webui developer)",
@ -502,7 +555,9 @@
"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_lightclock_header_title" : "Clock 1",
"edt_eff_clock_header_title" : "Clock 2",
"edt_eff_pacman_header_title" : "Pac-Man",
"edt_eff_moodblobs_header_title" : "Mood Blobs",
"edt_eff_rainbowswirl_header_title" : "Rainbow Swirl",
"edt_eff_random_header_title" : "Random",
@ -555,6 +610,13 @@
"edt_eff_min_len_title" : "Minimal length",
"edt_eff_max_len_title" : "Maximal length",
"edt_eff_height_title" : "Height",
"edt_eff_offset_title" : "Offset",
"edt_eff_colorHour_title" : "Color hour",
"edt_eff_colorMinute_title" : "Color minute",
"edt_eff_colorSecond_title" : "Color second",
"edt_eff_hourMargin_title" : "Margin hour",
"edt_eff_minuteMargin_title" : "Margin minute",
"edt_eff_secondMargin_title" : "Margin second",
"edt_append_ns" : "ns",
"edt_append_ms" : "ms",
"edt_append_s" : "s",

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -74,13 +74,12 @@
<!-- Navigation -->
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<button type="button" class="navbar-toggle closed" aria-controls="navbar" style="background-color:#d0d0d0;">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar top-bar"></span>
<span class="icon-bar middle-bar"></span>
<span class="icon-bar bottom-bar"></span>
</button>
<a class="navbar-brand" href="https://www.hyperion-project.org?pk_campaign=WebUI&pk_kwd=mainlogo" target="_blank"><img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" height="55"></a>
<a class="navbar-brand" href="/"><img src="img/hyperion/hyperionlostconnection.png" alt="Redefine ambient light!" style="display:none;"></a>
@ -89,17 +88,17 @@
<ul class="nav navbar-top-links navbar-right">
<li class="dropdown" id="btn_setlang">
<a href="#">
<a>
<i class="fa fa-globe fa-fw"></i>
</a>
</li>
<li class="dropdown" id="btn_setaccess">
<a href="#">
<a>
<i class="fa fa-key fa-fw"></i>
</a>
</li>
<li class="dropdown" id="btn_open_ledsim">
<a href="#">
<a>
<i class="fa fa-television fa-fw"></i>
</a>
</li>
@ -110,7 +109,7 @@
</a>
<ul class="dropdown-menu dropdown-alerts">
<li id="btn_wizard_byteorder">
<a href="#">
<a>
<div>
<i class="fa fa-magic fa-fw"></i>
<span data-i18n="wiz_rgb_title"></span>
@ -119,9 +118,19 @@
</li>
<li class="divider"></li>
<li id="btn_wizard_colorcalibration">
<a href="#">
<a>
<div>
<i class="fa fa-magic fa-fw"></i> Color Calibration Wizard
<i class="fa fa-magic fa-fw"></i>
<span data-i18n="wiz_cc_title"></span>
</div>
</a>
</li>
<li class="divider"></li>
<li id="btn_wizard_philipshue">
<a>
<div>
<i class="fa fa-magic fa-fw"></i>
<span data-i18n="wiz_hue_title"></span>
</div>
</a>
</li>
@ -135,28 +144,29 @@
<div id="main-nav" class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<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> <a class="inactive mnava" href="#dashboard"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></a> </li>
<li>
<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">
<li> <a class="inactive" id="load_confGeneral"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_general_conf_token">General</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 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 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 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 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 data-i18n="main_menu_network_conf_token">Network</span></a> </li>
<li> <a class="inactive mnava" href="#conf_general"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_general_conf_token">General</span></a> </li>
<li> <a class="inactive mnava" href="#conf_leds"><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 mnava" href="#conf_grabber"><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 mnava" href="#conf_effect"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></a> </li>
<li> <a class="inactive mnava" href="#conf_colors"><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 mnava" href="#conf_kodi"><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 mnava" href="#conf_network"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network</span></a> </li>
</ul>
</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 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 data-i18n="main_menu_support_token">Support</span></a> </li>
<li> <a class="inactive mnava" href="#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 mnava" href="#effects_configurator"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></a> </li>
<li> <a class="inactive mnava" href="#support"><i class="fa fa-info fa-fw"></i><span data-i18n="main_menu_support_token">Support</span></a> </li>
<li>
<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">
<li> <a class="inactive" id="load_webconfig"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_webconfig_token">Webconfiguration</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 data-i18n="main_menu_update_token">Update</span></a> </li>
<li> <a class="inactive mnava" href="#conf_webconfig" id="load_webconfig"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_webconfig_token">Webconfiguration</span></a> </li>
<li> <a class="inactive mnava" href="#conf_logging"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></a> </li>
<li> <a class="inactive mnava" href="#update"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></a> </li>
<li> <a class="inactive mnava" href="#about"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="main_menu_about_token">Update</span></a> </li>
</ul>
</li>
</ul>
@ -202,15 +212,30 @@
<div class="modal-content">
<div id="wiz_header" class="modal-header"></div>
<div id="wizp1">
<div id="wizp1_body" class="modal-body" style="text-align:center"></div>
<div class="modal-body" style="text-align:center">
<img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:15px">
<div id="wizp1_body" ></div>
</div>
<div id="wizp1_footer" class="modal-footer" style="text-align:center"></div>
</div>
<div id="wizp2" style="display:none">
<center>
<div id="wizp2_body" class="modal-body"></div>
<div class="modal-body">
<img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:15px">
<div id="wizp2_body"></div>
</div>
</center>
<div id="wizp2_footer" class="modal-footer" style="text-align:center"></div>
</div>
<div id="wizp3" style="display:none">
<center>
<div class="modal-body">
<img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:15px">
<div id="wizp3_body"></div>
</div>
</center>
<div id="wizp3_footer" class="modal-footer" style="text-align:center"></div>
</div>
</div>
</div>
</div>
@ -218,7 +243,7 @@
<!-- ledsimDialog -->
<div id="ledsim_dialog" style="display:none; z-index:9998">
<div data-role="body" style="padding:0px;">
<p id="ledsim_text" data-i18n="main_ledsim_text" style="font-weight:bold; margin: 10px 15px 0px 15px">Live visualization of led colors and if available the current picture of your capture device</p>
<div id="ledsim_text"></div>
<div id="leds_canvas"></div>
</div>
<div data-role="footer" style="text-align:center">

View File

@ -1,9 +1,8 @@
var editor_color = null;
var editor_smoothing = null;
var editor_blackborder = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
$(document).ready( function() {
performTranslation();
var editor_color = null;
var editor_smoothing = null;
var editor_blackborder = null;
if(showOptHelp)
{
@ -68,11 +67,15 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$('#btn_submit_blackborder').off().on('click',function() {
requestWriteConfig(editor_blackborder.getValue());
});
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
//create introduction
if(showOptHelp)
{
createHint("intro", $.i18n('conf_colors_color_intro'), "editor_container_color");
createHint("intro", $.i18n('conf_colors_smoothing_intro'), "editor_container_smoothing");
createHint("intro", $.i18n('conf_colors_blackborder_intro'), "editor_container_blackborder");
}
removeOverlay();
});

View File

@ -0,0 +1,46 @@
$(document).ready( function() {
performTranslation();
function updateComponents()
{
var components = serverInfo.info.components;
components_html = "";
for ( idx=0; idx<components.length;idx++)
{
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);
}
// get active led device
var leddevice = serverInfo.info.ledDevices.active;
$('#dash_leddevice').html(leddevice);
// get host
var hostname = serverInfo.info.hostname;
$('#dash_systeminfo').html(hostname+':'+jsonPort);
$.get( "https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/version.json", function( data ) {
parsedUpdateJSON = JSON.parse(data);
latestVersion = parsedUpdateJSON[0].versionnr;
var cleanLatestVersion = latestVersion.replace(/\./g, '');
var cleanCurrentVersion = currentVersion.replace(/\./g, '');
$('#currentversion').html(currentVersion);
$('#latestversion').html(latestVersion);
if ( cleanCurrentVersion < cleanLatestVersion )
$('#versioninforesult').html('<div style="margin:0px;" class="alert alert-warning">'+$.i18n('dashboard_infobox_message_updatewarning', latestVersion)+'</div>');
else
$('#versioninforesult').html('<div style="margin:0px;" class="alert alert-success">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
});
//interval update
updateComponents();
$(hyperion).on("cmd-serverinfo",updateComponents);
if(showOptHelp)
createHintH("intro", $.i18n('dashboard_label_intro'), "dash_intro");
removeOverlay();
});

View File

@ -1,13 +1,12 @@
var olddEffects = [];
var editorReady = false;
var effects_editor = null;
var confFgEff = parsedConfJSON.foregroundEffect.effect;
var confBgEff = parsedConfJSON.backgroundEffect.effect;
var foregroundEffect_editor = null;
var backgroundEffect_editor = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
$(document).ready( function() {
performTranslation();
var oldEffects = [];
var editorReady = false;
var effects_editor = null;
var confFgEff = serverConfig.foregroundEffect.effect;
var confBgEff = serverConfig.backgroundEffect.effect;
var foregroundEffect_editor = null;
var backgroundEffect_editor = null;
if(showOptHelp)
{
@ -109,43 +108,49 @@ $(hyperion).one("cmd-config-getschema", function(event) {
console.log(backgroundEffect_editor.getValue());
});
});
function updateEffectlist(event){
if(editorReady)
//create introduction
if(showOptHelp)
{
var newEffects = event.response.info.effects;
if (newEffects.length != olddEffects.length)
createHint("intro", $.i18n('conf_effect_path_intro'), "editor_container_effects");
createHint("intro", $.i18n('conf_effect_fgeff_intro'), "editor_container_foregroundEffect");
createHint("intro", $.i18n('conf_effect_bgeff_intro'), "editor_container_backgroundEffect");
}
function updateEffectlist(){
if(editorReady)
{
$('#root_foregroundEffect_effect').html('');
var usrEffArr = [];
var sysEffArr = [];
for(i = 0; i < newEffects.length; i++)
var newEffects = serverInfo.info.effects;
if (newEffects.length != oldEffects.length)
{
var effectName = newEffects[i].name;
if(!/^\:/.test(newEffects[i].file))
usrEffArr.push(effectName);
else
sysEffArr.push(effectName);
$('#root_foregroundEffect_effect').html('');
var usrEffArr = [];
var sysEffArr = [];
for(i = 0; i < newEffects.length; i++)
{
var effectName = newEffects[i].name;
if(!/^\:/.test(newEffects[i].file))
usrEffArr.push(effectName);
else
sysEffArr.push(effectName);
}
$('#root_foregroundEffect_effect').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets')));
$('#root_foregroundEffect_effect').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets')));
$('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html());
oldEffects = newEffects;
$('#root_foregroundEffect_effect').val(confFgEff).change();
//$('select').trigger('change');
//var fgeff = foregroundEffect_editor.getEditor('root.foregroundEffect.effect').setValue(confFgEff);
//console.log(fgeff);
$('#root_backgroundEffect_effect').val(confBgEff).change();
}
$('#root_foregroundEffect_effect').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets')));
$('#root_foregroundEffect_effect').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets')));
$('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html());
olddEffects = newEffects;
$('#root_foregroundEffect_effect').val(confFgEff).change();
//$('select').trigger('change');
//var fgeff = foregroundEffect_editor.getEditor('root.foregroundEffect.effect').setValue(confFgEff);
//console.log(fgeff);
$('#root_backgroundEffect_effect').val(confBgEff).change();
}
}
}
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
//interval update
$(hyperion).on("cmd-serverinfo",updateEffectlist);
removeOverlay();
});

View File

@ -1,8 +1,15 @@
$(document).ready( function() {
performTranslation();
var oldDelList = [];
var effectName = "";
var effects_editor = null;
var effectPy = "";
function updateDelEffectlist(event){
var newDelList = event.response.info.effects
if(showOptHelp)
createHintH("intro", $.i18n('effectsconfigurator_label_intro'), "intro_effc");
function updateDelEffectlist(){
var newDelList = serverInfo.info.effects;
if(newDelList.length != oldDelList.length)
{
var EffectHtml = null;
@ -19,34 +26,11 @@
}
}
$(hyperion).one("cmd-config-getschema", function(event) {
effects = parsedConfSchemaJSON.properties.effectSchemas.internal
EffectsHtml = "";
for(var idx=0; idx<effects.length; idx++)
{
EffectsHtml += '<option value="'+effects[idx].schemaContent.script+'">'+$.i18n(effects[idx].schemaContent.title)+'</option>';
}
$("#effectslist").html(EffectsHtml);
$("#effectslist").trigger("change");
});
function validateEditor() {
if(effects_editor.validate().length)
{
showInfoDialog('error', $.i18n('infoDialog_effconf_invalidvalue_title'), $.i18n('infoDialog_effconf_invalidvalue_text'));
return false;
}
return true;
};
function triggerTestEffect() {
var args = effects_editor.getEditor('root.args');
requestTestEffect(effectName, ":/effects/" + effectPy.slice(1), JSON.stringify(args.getValue()));
};
effectName = "";
effects_editor = null;
effectPy = "";
$("#effectslist").off().on("change", function(event) {
for(var idx=0; idx<effects.length; idx++){
@ -60,14 +44,24 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$("#name-input").trigger("change");
}
effects_editor.on('change',function() {
if ($("#btn_cont_test").hasClass("btn-success") && validateEditor())
if ($("#btn_cont_test").hasClass("btn-success") && effects_editor.validate().length == 0 && effectName != "")
{
triggerTestEffect();
}
if( effects_editor.validate().length == 0 && effectName != "")
{
$('#btn_start_test').attr('disabled', false);
$('#btn_write').attr('disabled', false);
}
else
{
$('#btn_start_test').attr('disabled', true);
$('#btn_write').attr('disabled', true);
}
});
});
$("#name-input").on('change keydown click focusout', function(event) {
$("#name-input").on('change keyup', function(event) {
effectName = $(this).val();
if ($(this).val() == '') {
effects_editor.disable();
@ -79,18 +73,16 @@ $(hyperion).one("cmd-config-getschema", function(event) {
});
$('#btn_write').off().on('click',function() {
if(validateEditor())
{
requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue()));
showInfoDialog('success', "", $.i18n('infoDialog_effconf_created_text', effectName));
}
requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue()));
$(hyperion).one("cmd-create-effect", function(event) {
if (event.response.success)
showInfoDialog('success', "", $.i18n('infoDialog_effconf_created_text', effectName));
});
});
$('#btn_start_test').off().on('click',function() {
if(validateEditor())
{
triggerTestEffect();
}
triggerTestEffect();
});
$('#btn_stop_test').off().on('click',function() {
@ -104,7 +96,10 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$('#btn_delete').off().on('click',function() {
var name = $("#effectsdellist").val();
requestDeleteEffect(name);
showInfoDialog('success', "", $.i18n('infoDialog_effconf_deleted_text', name));
$(hyperion).one("cmd-delete-effect", function(event) {
if (event.response.success)
showInfoDialog('success', "", $.i18n('infoDialog_effconf_deleted_text', name));
});
});
$('#effectsdellist').off().on('change', function(){
@ -115,8 +110,18 @@ $(hyperion).one("cmd-config-getschema", function(event) {
}
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
//create basic effect list
var effects = serverSchema.properties.effectSchemas.internal
for(var idx=0; idx<effects.length; idx++)
{
$("#effectslist").append(createSelOpt(effects[idx].schemaContent.script, $.i18n(effects[idx].schemaContent.title)));
}
$("#effectslist").trigger("change");
updateDelEffectlist();
//interval update
$(hyperion).on("cmd-serverinfo",updateDelEffectlist);
removeOverlay();
});

View File

@ -1,7 +1,9 @@
$(document).ready( function() {
performTranslation();
var conf_editor = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
var importedConf;
var confName;
var conf_editor = null;
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_gen_heading_title"), 'editor_container', 'btn_submit'));
if(showOptHelp)
@ -23,16 +25,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
requestWriteConfig(conf_editor.getValue());
});
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
var importedConf;
var confName;
//import
function dis_imp_btn(state)
{
state ? $('#btn_import_conf').attr('disabled', true) : $('#btn_import_conf').attr('disabled', false);
@ -68,9 +61,9 @@ $(document).ready( function() {
else
{
//check config revision
if(content.general.configVersion !== parsedConfJSON.general.configVersion)
if(content.general.configVersion !== serverConfig.general.configVersion)
{
showInfoDialog('error', "", $.i18n('infoDialog_import_reverror_text', f.name, content.general.configVersion, parsedConfJSON.general.configVersion));
showInfoDialog('error', "", $.i18n('infoDialog_import_reverror_text', f.name, content.general.configVersion, serverConfig.general.configVersion));
dis_imp_btn(true);
}
else
@ -86,21 +79,6 @@ $(document).ready( function() {
}
}
$('#btn_export_conf').off().on('click', function(){
var crev = parsedConfJSON.general.configVersion;
var name = parsedConfJSON.general.name;
var d = new Date();
var month = d.getMonth()+1;
var day = d.getDate();
var timestamp = d.getFullYear() + '.' +
(month<10 ? '0' : '') + month + '.' +
(day<10 ? '0' : '') + day;
download(JSON.stringify(parsedConfJSON, null, "\t"), 'Hyperion-Config ('+name+') '+timestamp+'.json', "application/json");
});
$('#btn_import_conf').off().on('click', function(){
showInfoDialog('import', $.i18n('infoDialog_import_confirm_title'), $.i18n('infoDialog_import_confirm_text', confName));
@ -117,5 +95,25 @@ $(document).ready( function() {
showInfoDialog('error', "", $.i18n('infoDialog_import_comperror_text'));
});
//export
$('#btn_export_conf').off().on('click', function(){
var name = serverConfig.general.name;
var d = new Date();
var month = d.getMonth()+1;
var day = d.getDate();
var timestamp = d.getFullYear() + '.' +
(month<10 ? '0' : '') + month + '.' +
(day<10 ? '0' : '') + day;
download(JSON.stringify(serverConfig, null, "\t"), 'Hyperion-'+currentVersion+'-Backup ('+name+') '+timestamp+'.json', "application/json");
});
//create introduction
if(showOptHelp)
createHint("intro", $.i18n('conf_general_intro'), "editor_container");
removeOverlay();
});

View File

@ -1,8 +1,7 @@
var conf_editor_v4l2 = null;
var conf_editor_fg = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
$(document).ready( function() {
performTranslation();
var conf_editor_v4l2 = null;
var conf_editor_fg = null;
if(showOptHelp)
{
@ -49,11 +48,13 @@ $(hyperion).one("cmd-config-getschema", function(event) {
requestWriteConfig(conf_editor_v4l2.getValue());
});
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
//create introduction
if(showOptHelp)
{
createHint("intro", $.i18n('conf_grabber_fg_intro'), "editor_container_fg");
createHint("intro", $.i18n('conf_grabber_v4l_intro'), "editor_container_v4l2");
}
removeOverlay();
});

View File

@ -4,86 +4,25 @@ $(document).ready( function() {
loadContentTo("#container_connection_lost","connection_lost");
loadContentTo("#container_restart","restart");
initWebSocket();
bindNavToContent("#load_dashboard","dashboard",true);
bindNavToContent("#load_remote","remote",false);
bindNavToContent("#load_huebridge","huebridge",false);
bindNavToContent("#load_support","support",false);
bindNavToContent("#load_update","update",false);
bindNavToContent("#load_confGeneral","general",false);
bindNavToContent("#load_confEffects","effects",false);
bindNavToContent("#load_confKodi","kodiconf",false);
bindNavToContent("#load_confLeds","leds",false);
bindNavToContent("#load_confGrabber","grabber",false);
bindNavToContent("#load_confColors","colors",false);
bindNavToContent("#load_confNetwork","network",false);
bindNavToContent("#load_effectsconfig","effects_configurator",false);
bindNavToContent("#load_logging","logging",false);
bindNavToContent("#load_webconfig","webconfig",false);
$(hyperion).on("cmd-serverinfo",function(event){
showOptHelp = parsedConfJSON.general.showOptHelp;
parsedServerInfoJSON = event.response;
currentVersion = parsedServerInfoJSON.info.hyperion[0].version;
cleanCurrentVersion = currentVersion.replace(/\./g, '');
serverInfo = event.response;
currentVersion = serverInfo.info.hyperion[0].version;
$(hyperion).trigger("ready");
if (parsedServerInfoJSON.info.hyperion[0].config_modified)
if (serverInfo.info.hyperion[0].config_modified)
$("#hyperion_reload_notify").fadeIn("fast");
else
$("#hyperion_reload_notify").fadeOut("fast");
// get active led device
var leddevice = parsedServerInfoJSON.info.ledDevices.active;
if ($("#content_dashboard").length > 0)
{
$('#dash_leddevice').html(leddevice);
}
// get host
var hostname = parsedServerInfoJSON.info.hostname;
if ($("#content_dashboard").length > 0)
{
$('#dash_systeminfo').html(hostname+':'+hyperionport);
}
if ($("#content_dashboard").length > 0)
{
var components = parsedServerInfoJSON.info.components;
components_html = "";
for ( idx=0; idx<components.length;idx++)
{
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);
$.get( "https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/version.json", function( data ) {
parsedUpdateJSON = JSON.parse(data);
latestVersion = parsedUpdateJSON[0].versionnr;
cleanLatestVersion = latestVersion.replace(/\./g, '');
$('#currentversion').html(' V'+currentVersion);
$('#latestversion').html(' V'+latestVersion);
if ( cleanCurrentVersion < cleanLatestVersion )
{
$('#versioninforesult').html('<div style="margin:0px;" class="alert alert-warning">'+$.i18n('dashboard_infobox_message_updatewarning', latestVersion)+'</div>');
}
else
{
$('#versioninforesult').html('<div style="margin:0px;" class="alert alert-success">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
}
});
}
if ($("#logmessages").length == 0 && loggingStreamActive)
{
requestLoggingStop();
loggingStreamActive = false;
}
$("#loading_overlay").removeClass("overlay");
if (!parsedServerInfoJSON.info.hyperion[0].config_writeable)
if (!serverInfo.info.hyperion[0].config_writeable)
{
showInfoDialog('uilock',$.i18n('InfoDialog_nowrite_title'),$.i18n('InfoDialog_nowrite_text'));
$('#wrapper').toggle(false);
@ -99,13 +38,17 @@ $(document).ready( function() {
}); // end cmd-serverinfo
$(hyperion).one("cmd-config-getschema", function(event) {
parsedConfSchemaJSON = event.response.result;
serverSchema = event.response.result;
requestServerConfig();
schema = serverSchema.properties;
});
$(hyperion).one("cmd-config-getconfig", function(event) {
parsedConfJSON = event.response.result;
serverConfig = event.response.result;
requestServerInfo();
showOptHelp = serverConfig.general.showOptHelp;
});
$(hyperion).on("error",function(event){
@ -116,9 +59,18 @@ $(document).ready( function() {
requestServerConfigSchema();
});
$(hyperion).one("ready", function(event) {
loadContent();
});
$("#btn_hyperion_reload").on("click", function(){
initRestart();
});
$(".mnava").on('click', function(e){
loadContent(e);
});
});
$(function(){

View File

@ -1,7 +1,6 @@
var conf_editor = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
$(document).ready( function() {
var conf_editor = null;
performTranslation();
$('#conf_cont').append(createOptPanel('fa-play-circle-o', $.i18n("conf_kodi_label_title"), 'editor_container', 'btn_submit'));
if(showOptHelp)
@ -21,11 +20,10 @@ $(hyperion).one("cmd-config-getschema", function(event) {
requestWriteConfig(conf_editor.getValue());
});
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
//create introduction
if(showOptHelp)
createHint("intro", $.i18n('conf_kodi_intro'), "editor_container");
removeOverlay();
});

View File

@ -5,21 +5,6 @@ var IntListIds;
var StrListIds;
var BoolListIds;
function get_hue_lights(){
$.ajax({
type: "GET",
url: 'http://'+$("#ip").val()+'/api/'+$("#user").val()+'/lights',
processData: false,
contentType: 'application/json',
success: function(r) {
for(var lightid in r){
//console.log(r[lightid].name);
$('#hue_lights').append('ID: '+lightid+' Name: '+r[lightid].name+'<br />');
}
}
});
}
function validateText(){
e = isJsonString($("#ledconfig").val());
@ -34,6 +19,7 @@ function loadStoredValues()
{
if (storageComp() && getStorage('ip_cl_ledstop') != null)
{
for(var i = 0; i < IntListIds.length; i++)
{
$('#'+IntListIds[i]).val(parseInt(getStorage(IntListIds[i])));
@ -139,22 +125,21 @@ function createClassicLeds(){
var reverse = $("#ip_cl_reverse").is(":checked");
//advanced values
var rawledsvdepth = parseInt($("#ip_cl_rawledsvdepth").val());
var rawledshdepth = parseInt($("#ip_cl_rawledshdepth").val());
var rawledsedgegap = parseInt($("#ip_cl_rawledsedgegap").val());
var rawledscornergap = parseInt($("#ip_cl_rawledscornergap").val());
var ledsVDepth = parseInt($("#ip_cl_ledsvdepth").val())/100;
var ledsHDepth = parseInt($("#ip_cl_ledshdepth").val())/100;
var edgeVGap = parseInt($("#ip_cl_ledsedgegap").val())/100/2;
//var cornerVGap = parseInt($("#ip_cl_ledscornergap").val())/100/2;
var overlap = $("#ip_cl_overlap").val()/4000;
//helper
var ledsVDepth = rawledsvdepth /100;
var ledsHDepth = rawledshdepth /100;
var edgeVGap = rawledsedgegap /100/2;
var edgeHGap = edgeVGap/(16/9);
var cornerVGap = rawledscornergap /100/2;
var cornerHGap = cornerVGap/(16/9);
//var cornerHGap = cornerVGap/(16/9);
var Vmin = 0.0 + edgeVGap;
var Vmax = 1.0 - edgeVGap;
var Hmin = 0.0 + edgeHGap;
var Hmax = 1.0 - edgeHGap;
var Hdiff = Hmax-Hmin;
var Vdiff = Vmax-Vmin;
var ledArray = [];
function createFinalArray(array){
@ -169,14 +154,6 @@ function createClassicLeds(){
createLedPreview(finalLedArray, 'classic');
}
function validateGap(){
if (ledsgpos+ledsglength > ledArray.length){
showInfoDialog('error', $.i18n('infoDialog_leds_gap_title'), $.i18n('infoDialog_leds_gap_text'));
return false
}
return true
}
function rotateArray(array, times){
if (times > "0"){
while( times-- ){
@ -193,6 +170,23 @@ function createClassicLeds(){
}
}
function valScan(val)
{
if(val > 1)
return val = 1;
if(val < 0)
return val = 0;
return val;
}
function ovl(scan,val)
{
if(scan == "+")
return valScan(val += overlap);
else
return valScan(val -= overlap);
}
function createLedArray(hmin, hmax, vmin, vmax){
hmin = round(hmin);
hmax = round(hmax);
@ -203,79 +197,82 @@ function createClassicLeds(){
function createTopLeds(){
step=(Hmax-Hmin)/ledstop;
hmin=Hmin
if(cornerVGap != '0'){
step=(Hmax-Hmin-(cornerHGap*2))/ledstop;
hmin=Hmin+(cornerHGap);
}
vmin=Vmin
//if(cornerVGap != '0')
// step=(Hmax-Hmin-(cornerHGap*2))/ledstop;
vmin=Vmin;
vmax=vmin+ledsHDepth;
hmax=hmin+step
for (var i = 0; i<ledstop; i++){
hmin = ovl("-",(Hdiff/ledstop*[i])+edgeHGap);
hmax = ovl("+",(Hdiff/ledstop*[i])+step+edgeHGap);
createLedArray(hmin, hmax, vmin, vmax);
hmin += step
hmax += step
}
}
function createLeftLeds(){
step=(Vmax-Vmin)/ledsleft;
vmax=Vmax
if(cornerVGap != '0'){
step=(Vmax-Vmin-(cornerVGap*2))/ledsleft;
vmax=Vmax-(cornerVGap);
}
//if(cornerVGap != '0')
// step=(Vmax-Vmin-(cornerVGap*2))/ledsleft;
hmin=Hmin;
hmax=hmin+ledsVDepth;
vmin=vmax-step
for (var i = ledsleft; i>0; i--){
for (var i = ledsleft-1; i>-1; --i){
vmin = ovl("-",(Vdiff/ledsleft*[i])+edgeVGap);
vmax = ovl("+",(Vdiff/ledsleft*[i])+step+edgeVGap);
createLedArray(hmin, hmax, vmin, vmax);
vmin -= step
vmax -= step
}
}
function createRightLeds(){
step=(Vmax-Vmin)/ledsright;
vmin=Vmin
if(cornerVGap != '0'){
step=(Vmax-Vmin-(cornerVGap*2))/ledsright;
vmin=Vmin+(cornerVGap);
}
//if(cornerVGap != '0')
// step=(Vmax-Vmin-(cornerVGap*2))/ledsright;
hmax=Hmax;
hmin=hmax-ledsVDepth;
vmax=vmin+step
for (var i = 0; i<ledsright; i++){
vmin = ovl("-",(Vdiff/ledsright*[i])+edgeVGap);
vmax = ovl("+",(Vdiff/ledsright*[i])+step+edgeVGap);
createLedArray(hmin, hmax, vmin, vmax);
vmin += step
vmax += step
}
}
function createBottomLeds(){
step=(Hmax-Hmin)/ledsbottom;
hmax=Hmax
if(cornerVGap != '0'){
step=(Hmax-Hmin-(cornerHGap*2))/ledsbottom;
hmax=Hmax-(cornerHGap);
}
//if(cornerVGap != '0')
// step=(Hmax-Hmin-(cornerHGap*2))/ledsbottom;
vmax=Vmax;
vmin=vmax-ledsHDepth;
hmin=hmax-step
for (var i = ledsbottom; i>0; i--){
for (var i = ledsbottom-1; i>-1; i--){
hmin = ovl("-",(Hdiff/ledsbottom*[i])+edgeHGap);
hmax = ovl("+",(Hdiff/ledsbottom*[i])+step+edgeHGap);
createLedArray(hmin, hmax, vmin, vmax);
hmin -= step;
hmax -= step;
}
}
createLeftLeds(createBottomLeds(createRightLeds(createTopLeds())));
if(ledsglength != "0" && validateGap()){
//check led gap pos
if (ledsgpos+ledsglength > ledArray.length)
{
var mpos = Math.max(0,ledArray.length-ledsglength);
$('#ip_cl_ledsgpos').val(mpos);
ledsgpos = mpos;
}
//check led gap length
if(ledsglength >= ledArray.length)
{
$('#ip_cl_ledsglength').val(ledArray.length-1);
ledsglength = ledArray.length-ledsglength-1;
}
if(ledsglength != 0){
ledArray.splice(ledsgpos, ledsglength);
}
if (position != "0"){
if (position != 0){
rotateArray(ledArray, position);
}
@ -368,6 +365,14 @@ $(document).ready(function() {
// translate
performTranslation();
//add intros
if(showOptHelp)
{
createHintH("intro", $.i18n('conf_leds_device_intro'), "leddevice_intro");
createHintH("intro", $.i18n('conf_leds_layout_intro'), "layout_intro");
$('#led_vis_help').html('<div><div class="led_ex" style="background-color:black;margin-right:5px;margin-top:3px"></div><div style="display:inline-block;vertical-align:top">'+$.i18n('conf_leds_layout_preview_l1')+'</div></div><div class="led_ex" style="background-color:grey;margin-top:3px;margin-right:2px"></div><div class="led_ex" style="background-color: rgb(169, 169, 169);margin-right:5px;margin-top:3px;"></div><div style="display:inline-block;vertical-align:top">'+$.i18n('conf_leds_layout_preview_l2')+'</div>');
}
//gather ids
IntListIds = $('.led_val_int').map(function() { return this.id; }).get();
StrListIds = $('.led_val_string').map(function() { return this.id; }).get();
@ -420,54 +425,82 @@ $(document).ready(function() {
});
// fill textfield with current led conf and copy to finalLedArray
$(hyperion).one("cmd-config-getconfig",function(event){
$("#ledconfig").text(JSON.stringify(event.response.result.leds, null, "\t"));
finalLedArray = event.response.result.leds;
$("#ledconfig").text(JSON.stringify(serverConfig.leds, null, "\t"));
finalLedArray = serverConfig.leds;
// create and update editor
var conf_editor = null;
$("#leddevices").off().on("change", function() {
generalOptions = serverSchema.properties.device;
specificOptions = serverSchema.properties.alldevices[$(this).val()];
conf_editor = createJsonEditor('editor_container', {
generalOptions : generalOptions,
specificOptions : specificOptions,
});
values_general = {};
values_specific = {};
isCurrentDevice = (serverInfo.info.ledDevices.active == $(this).val());
for(var key in serverConfig.device){
if (key != "type" && key in generalOptions.properties)
values_general[key] = serverConfig.device[key];
};
conf_editor.getEditor("root.generalOptions").setValue( values_general );
if (isCurrentDevice)
{
specificOptions_val = conf_editor.getEditor("root.specificOptions").getValue()
for(var key in specificOptions_val){
values_specific[key] = (key in serverConfig.device) ? serverConfig.device[key] : specificOptions_val[key];
};
conf_editor.getEditor("root.specificOptions").setValue( values_specific );
};
// change save button state based on validation result
conf_editor.validate().length ? $('#btn_submit_controller').attr('disabled', true) : $('#btn_submit_controller').attr('disabled', false);
});
// create led device selection
$(hyperion).one("cmd-serverinfo",function(event){
server = event.response;
ledDevices = server.info.ledDevices.available
devRPiSPI = ['apa102', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'ws2812spi'];
devRPiPWM = ['ws281x'];
devRPiGPIO = ['piblaster'];
devNET = ['atmoorb', 'fadecandy', 'philipshue', 'tinkerforge', 'tpm2net', 'udpe131', 'udph801', 'udpraw'];
devUSB = ['adalight', 'dmx', 'atmo', 'hyperionusbasp', 'lightpack', 'multilightpack', 'paintpack', 'rawhid', 'sedu', 'tpm2'];
ledDevices = serverInfo.info.ledDevices.available
devRPiSPI = ['apa102', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'ws2812spi'];
devRPiPWM = ['ws281x'];
devRPiGPIO = ['piblaster'];
devNET = ['atmoorb', 'fadecandy', 'philipshue', 'tinkerforge', 'tpm2net', 'udpe131', 'udph801', 'udpraw'];
devUSB = ['adalight', 'dmx', 'atmo', 'hyperionusbasp', 'lightpack', 'multilightpack', 'paintpack', 'rawhid', 'sedu', 'tpm2'];
var optArr = [[]];
optArr[1]=[];
optArr[2]=[];
optArr[3]=[];
optArr[4]=[];
optArr[5]=[];
var optArr = [[]];
optArr[1]=[];
optArr[2]=[];
optArr[3]=[];
optArr[4]=[];
optArr[5]=[];
for (idx=0; idx<ledDevices.length; idx++)
{
if($.inArray(ledDevices[idx], devRPiSPI) != -1)
optArr[0].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devRPiPWM) != -1)
optArr[1].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devRPiGPIO) != -1)
optArr[2].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devNET) != -1)
optArr[3].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devUSB) != -1)
optArr[4].push(ledDevices[idx]);
else
optArr[5].push(ledDevices[idx]);
}
for (idx=0; idx<ledDevices.length; idx++)
{
if($.inArray(ledDevices[idx], devRPiSPI) != -1)
optArr[0].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devRPiPWM) != -1)
optArr[1].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devRPiGPIO) != -1)
optArr[2].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devNET) != -1)
optArr[3].push(ledDevices[idx]);
else if($.inArray(ledDevices[idx], devUSB) != -1)
optArr[4].push(ledDevices[idx]);
else
optArr[5].push(ledDevices[idx]);
}
$("#leddevices").append(createSel(optArr[0], $.i18n('conf_leds_optgroup_RPiSPI')));
$("#leddevices").append(createSel(optArr[1], $.i18n('conf_leds_optgroup_RPiPWM')));
$("#leddevices").append(createSel(optArr[2], $.i18n('conf_leds_optgroup_RPiGPIO')));
$("#leddevices").append(createSel(optArr[3], $.i18n('conf_leds_optgroup_network')));
$("#leddevices").append(createSel(optArr[4], $.i18n('conf_leds_optgroup_usb')));
$("#leddevices").append(createSel(optArr[5], $.i18n('conf_leds_optgroup_debug')));
$("#leddevices").val(server.info.ledDevices.active);
$("#leddevices").trigger("change");
});
$("#leddevices").append(createSel(optArr[0], $.i18n('conf_leds_optgroup_RPiSPI')));
$("#leddevices").append(createSel(optArr[1], $.i18n('conf_leds_optgroup_RPiPWM')));
$("#leddevices").append(createSel(optArr[2], $.i18n('conf_leds_optgroup_RPiGPIO')));
$("#leddevices").append(createSel(optArr[3], $.i18n('conf_leds_optgroup_network')));
$("#leddevices").append(createSel(optArr[4], $.i18n('conf_leds_optgroup_usb')));
$("#leddevices").append(createSel(optArr[5], $.i18n('conf_leds_optgroup_debug')));
$("#leddevices").val(serverInfo.info.ledDevices.active);
$("#leddevices").trigger("change");
// validate textfield and update preview
$("#leds_custom_updsim").off().on("click", function() {
@ -494,6 +527,21 @@ $(document).ready(function() {
toggleClass('#leds_prev_toggle_num', "btn-danger", "btn-success");
});
// open checklist
$('#leds_prev_checklist').off().on("click", function() {
var liList = [$.i18n('conf_leds_leyout_checkp1'),$.i18n('conf_leds_leyout_checkp3'),$.i18n('conf_leds_leyout_checkp2'),$.i18n('conf_leds_leyout_checkp4')];
var ul = document.createElement("ul");
ul.className = "checklist"
for(var i = 0; i<liList.length; i++)
{
var li = document.createElement("li");
li.innerHTML = liList[i];
ul.appendChild(li);
}
showInfoDialog('checklist', "", ul);
});
// nav
$('#leds_cfg_nav a[data-toggle="tab"]').off().on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href") // activated tab
@ -504,57 +552,6 @@ $(document).ready(function() {
}
});
// create and update editor
var conf_editor = null;
$("#leddevices").off().on("change", function(event) {
generalOptions = parsedConfSchemaJSON.properties.device;
specificOptions = parsedConfSchemaJSON.properties.alldevices[$(this).val()];
conf_editor = createJsonEditor('editor_container', {
generalOptions : generalOptions,
specificOptions : specificOptions,
});
values_general = {};
values_specific = {};
isCurrentDevice = (server.info.ledDevices.active == $(this).val());
for(var key in parsedConfJSON.device){
if (key != "type" && key in generalOptions.properties)
values_general[key] = parsedConfJSON.device[key];
};
conf_editor.getEditor("root.generalOptions").setValue( values_general );
if (isCurrentDevice)
{
specificOptions_val = conf_editor.getEditor("root.specificOptions").getValue()
for(var key in specificOptions_val){
values_specific[key] = (key in parsedConfJSON.device) ? parsedConfJSON.device[key] : specificOptions_val[key];
};
conf_editor.getEditor("root.specificOptions").setValue( values_specific );
};
if ($(this).val() == "philipshue")
{
$("#huebridge").show();
$("#ip").attr('value', values_specific.output);
$("#user").attr('value', values_specific.username);
if($("#ip").val() != '' && $("#user").val() != '') {
get_hue_lights();
}
}
else
{
$("#huebridge").hide();
}
// change save button state based on validation result
conf_editor.validate().length ? $('#btn_submit_controller').attr('disabled', true) : $('#btn_submit_controller').attr('disabled', false);
});
// save led device config
$("#btn_submit_controller").off().on("click", function(event) {
@ -574,7 +571,7 @@ $(document).ready(function() {
requestWriteConfig(result)
});
requestServerConfig();
removeOverlay();
});

View File

@ -1,17 +1,15 @@
var conf_editor = null;
$(document).ready(function() {
var conf_editor = null;
var createdCont = false;
performTranslation();
requestLoggingStart();
schema = parsedConfSchemaJSON.properties;
$(document).ready(function() {
$('#conf_cont').append(createOptPanel('fa-reorder', $.i18n("edt_conf_log_heading_title"), 'editor_container', 'btn_submit'));
if(showOptHelp)
{
$('#conf_cont').append(createHelpTable(schema.logger.properties, $.i18n("edt_conf_log_heading_title")));
createHintH("intro", $.i18n('conf_logging_label_intro'), "log_head");
}
conf_editor = createJsonEditor('editor_container', {
@ -26,45 +24,45 @@ $(document).ready(function() {
requestWriteConfig(conf_editor.getValue());
});
$('#btn_autoscroll').off().on('click',function() {
toggleClass('#btn_autoscroll', "btn-success", "btn-danger");
});
if (!loggingHandlerInstalled)
{
loggingHandlerInstalled = true;
$(hyperion).on("cmd-logging-update",function(event){
if ($("#logmessages").length == 0 && loggingStreamActive)
messages = (event.response.result.messages);
if(messages.length != 0 && !createdCont)
{
requestLoggingStop();
$('#log_content').html('<pre><div id="logmessages" style="overflow:scroll;max-height:400px"></div></pre><button class="btn btn-primary" id="btn_pbupload">'+$.i18n('conf_logging_btn_pbupload')+'</button><button class="btn btn-success" id="btn_autoscroll" style="margin-left:10px;">'+$.i18n('conf_logging_btn_autoscroll')+'</button>');
createdCont = true;
$('#btn_autoscroll').off().on('click',function() {
toggleClass('#btn_autoscroll', "btn-success", "btn-danger");
});
}
else
for(var idx=0; idx<messages.length; idx++)
{
messages = (event.response.result.messages);
for(var idx=0; idx<messages.length; idx++)
{
app_name = messages[idx].appName;
logger_name = messages[idx].loggerName;
function_ = messages[idx].function;
line = messages[idx].line;
file_name = messages[idx].fileName;
msg = messages[idx].message;
level_string = messages[idx].levelString;
app_name = messages[idx].appName;
logger_name = messages[idx].loggerName;
function_ = messages[idx].function;
line = messages[idx].line;
file_name = messages[idx].fileName;
msg = messages[idx].message;
level_string = messages[idx].levelString;
var debug = "";
var debug = "";
if(level_string == "DEBUG") {
debug = "&lt;"+file_name+":"+line+":"+function_+"()&gt; ";
}
$("#logmessages").html($("#logmessages").html()+"\n <code>"+"["+app_name+" "+logger_name+"] &lt;"+level_string+"&gt; "+debug+msg+"</code>");
}
if($("#btn_autoscroll").hasClass('btn-success')){
$('#logmessages').stop().animate({
scrollTop: $('#logmessages')[0].scrollHeight
}, 800);
if(level_string == "DEBUG") {
debug = "&lt;"+file_name+":"+line+":"+function_+"()&gt; ";
}
$("#logmessages").html($("#logmessages").html()+"\n <code>"+"["+app_name+" "+logger_name+"] &lt;"+level_string+"&gt; "+debug+msg+"</code>");
}
if($("#btn_autoscroll").hasClass('btn-success')){
$('#logmessages').stop().animate({
scrollTop: $('#logmessages')[0].scrollHeight
}, 800);
}
});
}
removeOverlay();
});

View File

@ -1,13 +1,11 @@
$(document).ready( function() {
performTranslation();
var conf_editor_json = null;
var conf_editor_proto = null;
var conf_editor_bobl = null;
var conf_editor_udpl = null;
var conf_editor_forw = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
var conf_editor_json = null;
var conf_editor_proto = null;
var conf_editor_bobl = null;
var conf_editor_udpl = null;
var conf_editor_forw = null;
if(showOptHelp)
{
@ -118,11 +116,16 @@ $(hyperion).one("cmd-config-getschema", function(event) {
});
}
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
//create introduction
if(showOptHelp)
{
createHint("intro", $.i18n('conf_network_json_intro'), "editor_container_jsonserver");
createHint("intro", $.i18n('conf_network_proto_intro'), "editor_container_protoserver");
createHint("intro", $.i18n('conf_network_bobl_intro'), "editor_container_boblightserver");
createHint("intro", $.i18n('conf_network_udpl_intro'), "editor_container_udplistener");
createHint("intro", $.i18n('conf_network_forw_intro'), "editor_container_forwarder");
}
removeOverlay();
});

View File

@ -1,9 +1,81 @@
$(document).ready(function() {
performTranslation();
var oldEffects = [];
var cpcolor = '#B500FF';
var mappingList = serverSchema.properties.color.properties.imageToLedMappingType.enum;
//create html
createTable('ssthead', 'sstbody', 'sstcont');
$('.ssthead').html(createTableRow([$.i18n('remote_input_origin'), $.i18n('remote_input_owner'), $.i18n('remote_input_priority'), $.i18n('remote_input_status')], true, true));
createTable('crthead', 'crtbody', 'adjust_content', true);
//create introduction
if(showOptHelp)
{
createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro");
createHint("intro", $.i18n('remote_input_intro', $.i18n('remote_losthint')), "sstcont");
createHint("intro", $.i18n('remote_adjustment_intro', $.i18n('remote_losthint')), "adjust_content");
createHint("intro", $.i18n('remote_components_intro', $.i18n('remote_losthint')), "comp_intro");
createHint("intro", $.i18n('remote_maptype_intro', $.i18n('remote_losthint')), "maptype_intro");
}
//color adjustment
var sColor = sortProperties(serverSchema.properties.color.properties.channelAdjustment.items.properties)
var values = serverInfo.info.adjustment[0]
for(key in sColor)
{
if(sColor[key].key != "id" && sColor[key].key != "leds")
{
var title = '<label for="cr_'+sColor[key].key+'">'+$.i18n(sColor[key].title)+'</label>';
var property;
var value = values[sColor[key].key]
if(sColor[key].type == "array")
{
property = '<div id="cr_'+sColor[key].key+'" class="input-group colorpicker-component" ><input type="text" class="form-control" /><span class="input-group-addon"><i></i></span></div>';
$('.crtbody').append(createTableRow([title, property], false, true));
createCP('cr_'+sColor[key].key, value, function(rgb,hex,e){
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), '['+rgb.r+','+rgb.g+','+rgb.b+']');
});
}
else
{
if(sColor[key].key == "brightness" || sColor[key].key == "brightnessMin")
property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.0" max="1.0" step="0.05" value="'+value+'"/>';
else
property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.0" max="4.0" step="0.1" value="'+value+'"/>';
$('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_'+sColor[key].key).off().on('change', function(e){
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value);
});
}
}
}
function updateRemote()
{
if ($('#componentsbutton').length == 0)
{
$(hyperion).off("cmd-serverinfo",updateRemote);
}
else
{
updateInputSelect();
updateLedMapping();
updateComponents();
updateEffectlist();
}
}
function updateInputSelect()
{
$('#sstbody').html("");
$('.sstbody').html("");
var data = "";
var prios = parsedServerInfoJSON.info.priorities
var prios = serverInfo.info.priorities
var i;
for(i = 0; i < prios.length; i++)
{
@ -30,7 +102,7 @@
if(compId == "10")
owner = $.i18n('remote_effects_label_effects')+' '+owner;
if(compId == "9")
owner = $.i18n('remote_colors_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+prios[i].value.RGB+'); display:inline-block" title="RGB: ('+prios[i].value.RGB+')"></div>';
owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+prios[i].value.RGB+'); display:inline-block" title="RGB: ('+prios[i].value.RGB+')"></div>';
if(compId == "7")
owner = $.i18n('general_comp_GRABBER')+': ('+owner+')';
if(compId == "8")
@ -39,6 +111,8 @@
owner = $.i18n('general_comp_BOBLIGHTSERVER');
if(compId == "5")
owner = $.i18n('general_comp_UDPLISTENER');
if(owner == "Off")
owner = $.i18n('general_btn_off');
if(duration)
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
@ -48,11 +122,11 @@
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>';
if(btn_type != 'default')
$('#sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
}
var btn_auto_color = (parsedServerInfoJSON.info.priorities_autoselect? "btn-success" : "btn-danger");
var btn_auto_state = (parsedServerInfoJSON.info.priorities_autoselect? "disabled" : "enabled");
var btn_auto_text = (parsedServerInfoJSON.info.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
var btn_auto_color = (serverInfo.info.priorities_autoselect? "btn-success" : "btn-danger");
var btn_auto_state = (serverInfo.info.priorities_autoselect? "disabled" : "enabled");
var btn_auto_text = (serverInfo.info.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
$('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin:10px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>');
var max_width=100;
@ -65,8 +139,7 @@
function updateLedMapping()
{
mappingList = ["multicolor_mean", "unicolor_mean"];
mapping = parsedServerInfoJSON.info.ledMAppingType;
mapping = serverInfo.info.ledMAppingType;
$('#mappingsbutton').html("");
for(var ix = 0; ix < mappingList.length; ix++)
@ -76,52 +149,42 @@
else
btn_style = 'btn-warning';
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn btn-lg '+btn_style+'" style="margin:10px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:10px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
}
}
function updateComponents(event) {
if ($('#componentsbutton').length == 0)
function updateComponents()
{
components = serverInfo.info.components;
// create buttons
$('#componentsbutton').html("");
for ( idx=0; idx<components.length;idx++)
{
$(hyperion).off("cmd-serverinfo",updateComponents);
}
else
{
updateInputSelect();
updateLedMapping();
components = event.response.info.components;
// create buttons
$('#componentsbutton').html("");
for ( idx=0; idx<components.length;idx++)
enable_style = (components[idx].enabled? "btn-success" : "btn-danger");
enable_icon = (components[idx].enabled? "fa-play" : "fa-stop");
comp_name = components[idx].name;
comp_btn_id = "comp_btn_"+comp_name;
// create btn if not there
if ($("#"+comp_btn_id).length == 0)
{
enable_style = (components[idx].enabled? "btn-success" : "btn-danger");
enable_icon = (components[idx].enabled? "fa-play" : "fa-stop");
comp_name = components[idx].name;
comp_btn_id = "comp_btn_"+comp_name;
// create btn if not there
if ($("#"+comp_btn_id).length == 0)
{
d='<p><button type="button" id="'+comp_btn_id+'" class="btn '+enable_style
+'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</p>';
$('#componentsbutton').append(d);
}
else // already create, update state
{
setClassByBool( $('#'+comp_btn_id) , components[idx].enabled, "btn-danger", "btn-success" );
setClassByBool( $('#'+comp_btn_id+"_icon"), components[idx].enabled, "fa-stop" , "fa-play" );
$('#'+comp_btn_id).attr("onclick",'requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)+')');
}
d='<p><button type="button" id="'+comp_btn_id+'" class="btn '+enable_style
+'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</p>';
$('#componentsbutton').append(d);
}
else // already create, update state
{
setClassByBool( $('#'+comp_btn_id) , components[idx].enabled, "btn-danger", "btn-success" );
setClassByBool( $('#'+comp_btn_id+"_icon"), components[idx].enabled, "fa-stop" , "fa-play" );
$('#'+comp_btn_id).attr("onclick",'requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)+')');
}
}
}
var oldEffects = [];
function updateEffectlist(event){
var newEffects = event.response.info.effects;
function updateEffectlist()
{
var newEffects = serverInfo.info.effects;
if (newEffects.length != oldEffects.length)
{
$('#effect_select').html('<option value="__none__"></option>');
@ -143,53 +206,37 @@
}
}
$(document).ready(function() {
performTranslation();
createTable('ssthead', 'sstbody', 'sstcont');
$('#ssthead').html(createTableRow([$.i18n('remote_input_origin'), $.i18n('remote_input_owner'), $.i18n('remote_input_priority'), $.i18n('remote_input_status')], true, true));
// colorpicker and effect
if (getStorage('rmcpcolor') != null)
cpcolor = getStorage('rmcpcolor');
// color
$(function() {
$('#cp2').colorpicker({
format: 'rgb',
customClass: 'colorpicker-2x',
color: '#B500FF',
sliders: {
saturation: {
maxLeft: 200,
maxTop: 200
},
hue: {
maxTop: 200
},
alpha: {
maxTop: 200
},
}
createCP('cp2', cpcolor, function(rgb,hex){
requestSetColor(rgb.r, rgb.g, rgb.b);
$("#effect_select").val("__none__");
setStorage('rmcpcolor', hex);
});
$("#reset_color").off().on("click", function(){
requestPriorityClear();
$("#effect_select").val("__none__");
});
$("#effect_select").off().on("change", function(event) {
efx = $(this).val();
if(efx != "__none__")
{
requestPriorityClear();
$(hyperion).one("cmd-clear", function(event) {
setTimeout(function() {requestPlayEffect(efx)}, 100);
});
$('#cp2').colorpicker().on('changeColor', function(e) {
color = e.color.toRGB();
$("#effect_select").val("__none__");
requestSetColor(color.r, color.g, color.b);
});
});
}
});
$("#reset_color").off().on("click", requestPriorityClear);
//force first update
updateRemote();
$("#effect_select").off().on("change", function(event) {
efx = $(this).val();
if(efx != "__none__")
{
requestPriorityClear();
$(hyperion).one("cmd-clear", function(event) {
setTimeout(function() {requestPlayEffect(efx)}, 100);
});
}
});
// components
$(hyperion).on("cmd-serverinfo",updateComponents);
// effects
$(hyperion).on("cmd-serverinfo",updateEffectlist);
// interval updates
$(hyperion).on("cmd-serverinfo",updateRemote);
removeOverlay();
});

View File

@ -1,7 +1,7 @@
$(document).ready( function() {
performTranslation();
var conf_editor = null;
$(hyperion).one("cmd-config-getschema", function(event) {
schema = parsedConfSchemaJSON.properties;
var conf_editor = null;
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_webc_heading_title"), 'editor_container', 'btn_submit'));
if(showOptHelp)
@ -20,11 +20,10 @@ $(hyperion).one("cmd-config-getschema", function(event) {
$('#btn_submit').off().on('click',function() {
requestWriteConfig(conf_editor.getValue());
});
});
$(document).ready( function() {
performTranslation();
requestServerConfigSchema();
if(showOptHelp)
createHint("intro", $.i18n('conf_webconfig_label_intro'), "editor_container");
removeOverlay();
});

View File

@ -1,16 +1,15 @@
// global vars
var webPrio = 1;
var showOptHelp = true;
var showOptHelp;
var currentVersion;
var cleanCurrentVersion;
var latestVersion;
var cleanLatestVersion;
var parsedServerInfoJSON = {};
var serverInfo = {};
var parsedUpdateJSON = {};
var parsedConfSchemaJSON = {};
var parsedConfJSON = {};
var hyperionport = 19444;
var serverSchema = {};
var serverConfig = {};
var schema;
var jsonPort = 19444;
var websocket = null;
var hyperion = {};
var wsTan = 1;
@ -71,7 +70,7 @@ function initWebSocket()
if (websocket == null)
{
$.ajax({ url: "/cgi/cfg_jsonserver" }).done(function(data) {
hyperionport = data.substr(1);
jsonPort = data.substr(1);
websocket = new WebSocket('ws://'+document.location.hostname+data);
websocket.onopen = function (event) {
@ -104,6 +103,8 @@ function initWebSocket()
default: reason = "Unknown reason";
}
$(hyperion).trigger({type:"close", reason:reason});
watchdog = 10;
connectionLostDetection();
};
websocket.onmessage = function (event) {
@ -243,15 +244,15 @@ function requestSetSource(prio)
function requestWriteConfig(config, full)
{
if(full === true)
parsedConfJSON = config;
serverConfig = config;
else
{
jQuery.each(config, function(i, val) {
parsedConfJSON[i] = val;
serverConfig[i] = val;
});
}
var config_str = escape(encode_utf8(JSON.stringify(parsedConfJSON)));
var config_str = escape(encode_utf8(JSON.stringify(serverConfig)));
$.post( "/cgi/cfg_set", { cfg: config_str })
.done(function( data ) {
@ -295,3 +296,10 @@ function requestMappingType(type)
sendToHyperion("processing", "", '"mappingType": "'+type+'"');
}
function requestAdjustment(type, value, complete)
{
if(complete === true)
sendToHyperion("adjustment", "", '"adjustment": '+type+'');
else
sendToHyperion("adjustment", "", '"adjustment": {"'+type+'": '+value+'}');
}

View File

@ -4,11 +4,19 @@ $(document).ready(function() {
var ledsim_height = 489;
var dialog;
var leds;
var lC = false;
$(hyperion).one("cmd-config-getconfig",function(event){
leds = event.response.result.leds;
$(hyperion).one("ready",function(){
leds = serverConfig.leds;
if(storageComp() && getStorage('ledsim_width') != null)
if(showOptHelp)
{
createHint('intro', $.i18n('main_ledsim_text'), 'ledsim_text');
$('#ledsim_text').css({'margin':'10px 15px 0px 15px'});
$('#ledsim_text .intro-hint').css("margin","0px")
}
if(getStorage('ledsim_width') != null)
{
ledsim_width = getStorage('ledsim_width');
ledsim_height = getStorage('ledsim_height');
@ -29,7 +37,11 @@ $(document).ready(function() {
updateLedLayout();
},
opened: function (e) {
updateLedLayout();
if(!lC)
{
updateLedLayout();
lC = true;
}
modalOpened = true;
requestLedColorsStart();
@ -40,11 +52,8 @@ $(document).ready(function() {
modalOpened = false;
},
resizeStop: function (e) {
if(storageComp())
{
setStorage("ledsim_width", $("#ledsim_dialog").outerWidth());
setStorage("ledsim_height", $("#ledsim_dialog").outerHeight());
}
setStorage("ledsim_width", $("#ledsim_dialog").outerWidth());
setStorage("ledsim_height", $("#ledsim_dialog").outerHeight());
}
});
});

File diff suppressed because one or more lines are too long

View File

@ -494,7 +494,7 @@ JSONEditor.prototype = {
return this.editors[path];
},
watch: function(path,callback) {
this.watchlist = this.watchlist || {};
this.watchlist = this.watchlist || {};
this.watchlist[path] = this.watchlist[path] || [];
this.watchlist[path].push(callback);
@ -517,7 +517,7 @@ JSONEditor.prototype = {
return this;
},
notifyWatchers: function(path) {
if(!this.watchlist || !this.watchlist[path]) return this;
if(!this.watchlist || !this.watchlist[path]) return this;
for(var i=0; i<this.watchlist[path].length; i++) {
this.watchlist[path][i]();
}
@ -6284,7 +6284,7 @@ JSONEditor.AbstractTheme = Class.extend({
return el;
},
getHeader: function(text) {
var el = document.createElement('h3');
var el = document.createElement('h4');
if(text.innerHTML == ''){
text.style.display = 'none';
return text;

View File

@ -1,9 +1,11 @@
$(function() {
$('#side-menu').metisMenu();
});
var oldWidth;
//Loads the correct sidebar on window load,
//collapses the sidebar on window resize.
// Sets the min-height of #page-wrapper to window size
@ -11,19 +13,29 @@ $(function() {
$(window).bind("load resize", function() {
var topOffset = 50;
var width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width;
if (width < 768) {
$('div.navbar-collapse').addClass('collapse');
topOffset = 100; // 2-row-menu
} else {
$('div.navbar-collapse').removeClass('collapse');
}
if(oldWidth != width)
{
if (width < 768)
{
$('#main-nav').css({"position":"fixed","right":"-235px","top":"45px","width":"230px","border":"1px solid rgba(0, 0, 0, .2)","box-shadow":"0 3px 9px rgba(0, 0, 0, .5)"});
topOffset = 100; // 2-row-menu
$('.mnava').on('click', function(){
$("html, body").animate({ scrollTop: 0 }, "fast");
$( "#main-nav" ).animate({right: "-235px",}, 300 );
$(".navbar-toggle").addClass("closed");
});
}
else
$( "#main-nav" ).removeAttr("style").css({"position":"absolute"});
var height = ((this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height) - 1;
height = height - topOffset;
if (height < 1) height = 1;
if (height > topOffset) {
$("#page-wrapper").css("min-height", (height-11) + "px");
}
var height = ((this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height) - 1;
height = height - topOffset;
if (height < 1) height = 1;
if (height > topOffset) {
$("#page-wrapper").css("min-height", (height-11) + "px");
}
}
});
var url = window.location;
@ -42,3 +54,16 @@ $(function() {
}
}
});
$('.navbar-toggle').off().on('click', function(){
if($('#main-nav').css("right") != "-2px")
{
$('#main-nav').animate({right: "-2px",}, 300 );
$(".navbar-toggle").removeClass("closed");
}
else
{
$('#main-nav').animate({right: "-235px",}, 300 );
$(".navbar-toggle").addClass("closed");
}
});

View File

@ -45,8 +45,8 @@ $(document).ready( function() {
initTrans('auto');
storedLang = 'auto';
storedAccess = "default";
$('#btn_setlang').toggle();
$('#btn_setaccess').toggle();
$('#btn_setlang').attr("disabled", true);
$('#btn_setaccess').attr("disabled", true);
}
$('#btn_setlang').off().on('click',function() {
@ -78,14 +78,11 @@ $(document).ready( function() {
});
//access
if (storageComp())
storedAccess = getStorage("accesslevel");
if (storedAccess == null)
{
storedAccess = getStorage("accesslevel");
if (storedAccess == null)
{
setStorage("accesslevel", "default");
storedAccess = "default";
}
setStorage("accesslevel", "default");
storedAccess = "default";
}
$('#btn_setaccess').off().on('click',function() {

View File

@ -1,3 +1,10 @@
var prevTag;
function removeOverlay()
{
$("#loading_overlay").removeClass("overlay");
}
function reload()
{
location.reload();
@ -10,15 +17,27 @@ function storageComp()
return false;
}
function getStorage(item)
function getStorage(item, session)
{
return localStorage.getItem(item);
if(storageComp())
{
if(session === true)
return sessionStorage.getItem(item);
else
return localStorage.getItem(item);
}
return null;
}
function setStorage(item, value)
function setStorage(item, value, session)
{
localStorage.setItem(item, value);
return true;
if(storageComp())
{
if(session === true)
sessionStorage.setItem(item, value);
else
localStorage.setItem(item, value);
}
}
function debugMessage(msg)
@ -29,15 +48,42 @@ function debugMessage(msg)
}
}
function bindNavToContent(containerId, fileName, loadNow)
function getHashtag()
{
$("#page-content").off();
$(containerId).on("click", function() {
$("#page-content").load("/content/"+fileName+".html");
});
if (loadNow)
if(getStorage('lasthashtag', true) != null)
return getStorage('lasthashtag', true);
else
{
$(containerId).trigger("click");
var tag = document.URL;
tag = tag.substr(tag.indexOf("#") + 1);
if(tag == "" || typeof tag === "undefined" || tag.startsWith("http"))
tag = "dashboard"
return tag;
}
}
function loadContent(event)
{
var tag;
if(typeof event != "undefined")
{
tag = event.currentTarget.hash;
tag = tag.substr(tag.indexOf("#") + 1);
setStorage('lasthashtag', tag, true);
}
else
tag = getHashtag();
if(prevTag != tag)
{
prevTag = tag;
$("#page-content").off();
$("#page-content").load("/content/"+tag+".html", function(response,status,xhr){
if(status == "error")
$("#page-content").html('<h3>The page you requested is no longer available, click on another menu item!</h3>');
removeOverlay();
});
}
}
@ -97,7 +143,7 @@ function showInfoDialog(type,header,message)
}
else if (type == "select"){
$('#id_body').html('<img style="margin-bottom:20px" src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!">');
$('#id_footer').html('<button type="button" id="id_btn_saveset" class="btn btn-success" data-dismiss="modal"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saveandreload')+'</button>');
$('#id_footer').html('<button type="button" id="id_btn_saveset" class="btn btn-primary" data-dismiss="modal"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saveandreload')+'</button>');
$('#id_footer').append('<button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
}
else if (type == "uilock"){
@ -109,6 +155,13 @@ function showInfoDialog(type,header,message)
$('#id_footer').html('<button type="button" id="id_btn_import" class="btn btn-warning" data-dismiss="modal"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saverestart')+'</button>');
$('#id_footer').append('<button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
}
else if (type == "checklist")
{
$('#id_body').html('<img style="margin-bottom:20px" src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!">');
$('#id_body').append('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('infoDialog_checklist_title')+'</h4>');
$('#id_body').append(message);
$('#id_footer').html('<button type="button" class="btn btn-primary" data-dismiss="modal">'+$.i18n('general_btn_ok')+'</button>');
}
$('#id_body').append('<h4 style="font-weight:bold;text-transform:uppercase;">'+header+'</h4>');
$('#id_body').append(message);
@ -123,6 +176,48 @@ function showInfoDialog(type,header,message)
});
}
function createHintH(type, text, container)
{
if(type = "intro")
tclass = "introd";
$('#'+container).prepend('<div class="'+tclass+'"><h4 style="font-size:16px">'+text+'</h4><hr/></div>');
}
function createHint(type, text, container)
{
var fe, tclass;
if(type == "intro")
{
fe = '';
tclass = "intro-hint";
}
else if(type == "info")
{
fe = '<div style="font-size:25px;text-align:center"><i class="fa fa-info"></i></div><div style="text-align:center;font-size:13px">Information</div>';
tclass = "info-hint";
}
else if(type == "wizard")
{
fe = '<div style="font-size:25px;text-align:center"><i class="fa fa-magic"></i></div><div style="text-align:center;font-size:13px">Information</div>';
tclass = "wizard-hint";
}
else if(type == "warning")
{
fe = '<div style="font-size:25px;text-align:center"><i class="fa fa-info"></i></div><div style="text-align:center;font-size:13px">Information</div>';
tclass = "warning-hint";
}
if(fe == "")
$('#'+container).prepend('<div class="'+tclass+'">'+text+'</div>');
else
{
createTable('','htb',container, true, tclass);
$('#'+container+' .htb').append(createTableRow([fe ,text],false,true));
}
}
function isJsonString(str)
{
try
@ -163,7 +258,7 @@ function createJsonEditor(container,schema,setconfig,usePanel)
if(usePanel)
{
$('#'+container+' .well').first().removeClass('well well-sm');
$('#'+container+' h3').remove();
$('#'+container+' h4').remove();
$('#'+container+' .well').first().removeClass('well well-sm');
}
@ -171,32 +266,84 @@ function createJsonEditor(container,schema,setconfig,usePanel)
{
for(var key in editor.root.editors)
{
editor.getEditor("root."+key).setValue( parsedConfJSON[key] );
editor.getEditor("root."+key).setValue( serverConfig[key] );
}
}
return editor;
}
function rgbToHex(rgb)
{
if(rgb.length == 3)
{
return "#" +
("0" + parseInt(rgb[0],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[2],10).toString(16)).slice(-2);
}
else
debugMessage('rgbToHex: Given rgb is no array or has wrong length');
}
function createCP(id, color, cb)
{
if(Array.isArray(color))
color = rgbToHex(color);
else if(color == "undefined")
color = "#AA3399";
if(color.startsWith("#"))
{
$('#'+id).colorpicker({
format: 'rgb',
customClass: 'colorpicker-2x',
color: color,
sliders: {
saturation: {
maxLeft: 200,
maxTop: 200
},
hue: {
maxTop: 200
},
}
});
$('#'+id).colorpicker().on('changeColor', function(e) {
rgb = e.color.toRGB();
hex = e.color.toHex();
cb(rgb,hex,e);
});
}
else
debugMessage('createCP: Given color is not legit');
}
// Creates a table with thead and tbody ids
// @param string hid : a id for thead
// @param string bid : a id for tbody
// @param string hid : a class for thead
// @param string bid : a class for tbody
// @param string cont : a container id to html() the table
function createTable(hid, bid, cont)
// @param string bless: if true the table is borderless
function createTable(hid, bid, cont, bless, tclass)
{
var table = document.createElement('table');
var thead = document.createElement('thead');
var tbody = document.createElement('tbody');
table.className = "table";
if(bless === true)
table.className += " borderless";
if(typeof tclass !== "undefined")
table.className += " "+tclass;
table.style.marginBottom = "0px";
thead.setAttribute("id", hid);
tbody.setAttribute("id", bid);
table.appendChild(thead);
if(hid != "")
thead.className = hid;
tbody.className = bid;
if(hid != "")
table.appendChild(thead);
table.appendChild(tbody);
$('#'+cont).html(table);
$('#'+cont).append(table);
}
// Creates a table row <tr>
@ -237,43 +384,58 @@ function createOptPanel(phicon, phead, bodyid, footerid)
{
phead = '<i class="fa '+phicon+' fa-fw"></i>'+phead;
pfooter = document.createElement('button');
pfooter.className = "btn btn-success";
pfooter.className = "btn btn-primary";
pfooter.setAttribute("id", footerid);
pfooter.innerHTML = '<i class="fa fa-fw fa-save"></i>'+$.i18n('general_button_savesettings');
return createPanel(phead, "", pfooter, "panel-default", bodyid);
}
function sortProperties(list)
{
for(key in list)
{
list[key].key = key;
}
list = $.map(list, function(value, index) {
return [value];
});
return list.sort(function(a,b) {
return a.propertyOrder - b.propertyOrder;
});
}
function createHelpTable(list, phead){
var table = document.createElement('table');
var thead = document.createElement('thead');
var tbody = document.createElement('tbody');
//console.log(sortProperties(list));
list = sortProperties(list);
phead = '<i class="fa fa-fw fa-info-circle"></i>'+phead+' '+$.i18n("conf_helptable_expl");
table.className = 'table table-hover borderless';
thead.appendChild(createTableRow([$.i18n('conf_helptable_option'), $.i18n('conf_helptable_expl')], true, false));
for (key in list)
for (key in list)
{
if(list[key].access != 'system')
{
if(list[key].access != 'system')
var text = list[key].title.replace('title', 'expl');
tbody.appendChild(createTableRow([$.i18n(list[key].title), $.i18n(text)], false, false));
if(list[key].items && list[key].items.properties)
{
var text = list[key].title.replace('title', 'expl');
tbody.appendChild(createTableRow([$.i18n(list[key].title), $.i18n(text)], false, false));
if(list[key].items && list[key].items.properties)
var ilist = sortProperties(list[key].items.properties);
for (ikey in ilist)
{
var ilist = list[key].items.properties;
for (ikey in ilist)
{
var itext = ilist[ikey].title.replace('title', 'expl');
tbody.appendChild(createTableRow([$.i18n(ilist[ikey].title), $.i18n(itext)], false, false));
}
var itext = ilist[ikey].title.replace('title', 'expl');
tbody.appendChild(createTableRow([$.i18n(ilist[ikey].title), $.i18n(itext)], false, false));
}
}
}
}
table.appendChild(thead);
table.appendChild(tbody);

View File

@ -1,23 +1,35 @@
$(document).ready( function() {
//clear priority if people reload the page or lost connection while a wizard was active
$(hyperion).one("cmd-config-getschema", function(event) {
//clear priority and other tasks if people reload the page or lost connection while a wizard was active
$(hyperion).one("ready", function(event) {
if(getStorage("wizardactive") === 'true')
{
requestPriorityClear();
setStorage("wizardactive", false);
if(getStorage("kodiAddress" != null))
{
kodiAddress = getStorage("kodiAddress");
sendToKodi("stop");
}
}
});
function resetWizard()
{
$("#wizard_modal").modal('hide');
clearInterval(colorIntveralId);
clearInterval(wIntveralId);
requestPriorityClear();
setStorage("wizardactive", false);
$('#wizp1').toggle(true);
$('#wizp2').toggle(false);
$('#wizp3').toggle(false);
//cc
if(withKodi)
sendToKodi("stop");
step = 0;
}
//rgb byte order wizard
var colorIntveralId;
var wIntveralId;
var new_rgb_order;
function changeColor()
@ -40,13 +52,13 @@ $(document).ready( function() {
{
//create html
$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_rgb_title'));
$('#wizp1_body').html('<img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:20px"><h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_rgb_title')+'</h4><p>'+$.i18n('wiz_rgb_intro1')+'</p><p style="font-weight:bold;">'+$.i18n('wiz_rgb_intro2')+'</p>');
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_rgb_title')+'</h4><p>'+$.i18n('wiz_rgb_intro1')+'</p><p style="font-weight:bold;">'+$.i18n('wiz_rgb_intro2')+'</p>');
$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
$('#wizp2_body').html('<img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:20px"><p style="font-weight:bold">'+$.i18n('wiz_rgb_expl')+'</p>');
$('#wizp2_body').html('<p style="font-weight:bold">'+$.i18n('wiz_rgb_expl')+'</p>');
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_rgb_switchevery')+'</label><div class="input-group" style="width:100px"><select id="wiz_switchtime_select" class="form-control"></select><div class="input-group-addon">'+$.i18n('edt_append_s')+'</div></div></div>');
$('#wizp2_body').append('<canvas id="wiz_canv_color" width="100" height="100" style="border-radius:60px;background-color:red; display:block; margin: 10px 0;border:4px solid grey;"></canvas><label>'+$.i18n('wiz_rgb_q')+'</label>');
$('#wizp2_body').append('<table class="table borderless" style="width:200px"><tbody><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qrend')+'</label></td><td class="itd"><select id="wiz_r_select" class="form-control wselect"></select></td></tr><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qgend')+'</label></td><td class="itd"><select id="wiz_g_select" class="form-control wselect"></select></td></tr></tbody></table>');
$('#wizp2_footer').html('<button type="button" class="btn btn-success" id="btn_wiz_save"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saverestart')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_checkok" style="display:none" data-dismiss="modal"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_ok')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>')
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_save"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saverestart')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_checkok" style="display:none" data-dismiss="modal"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_ok')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>')
//open modal
$("#wizard_modal").modal({
@ -66,36 +78,43 @@ $(document).ready( function() {
function beginWizardRGB()
{
$("#wiz_switchtime_select").off().on('change',function() {
clearInterval(colorIntveralId);
clearInterval(wIntveralId);
var time = $("#wiz_switchtime_select").val();
colorIntveralId = setInterval(function() { changeColor(); }, time*1000);
wIntveralId = setInterval(function() { changeColor(); }, time*1000);
});
$('.wselect').change(function () {
var rgb_order = order = parsedConfJSON.device.colorOrder.split("");
var rgb_order = serverConfig.device.colorOrder.split("");
var redS = $("#wiz_r_select").val();
var greenS = $("#wiz_g_select").val();
var blueS = rgb_order.toString().replace(/,/g,"").replace(redS, "").replace(greenS,"");
for (var i = 0; i<order.length; i++)
for (var i = 0; i<rgb_order.length; i++)
{
if (redS == order[i])
$('#wiz_g_select option[value='+order[i]+']').attr('disabled',true);
if (redS == rgb_order[i])
$('#wiz_g_select option[value='+rgb_order[i]+']').attr('disabled',true);
else
$('#wiz_g_select option[value='+order[i]+']').attr('disabled',false);
if (greenS == order[i])
$('#wiz_r_select option[value='+order[i]+']').attr('disabled',true);
$('#wiz_g_select option[value='+rgb_order[i]+']').attr('disabled',false);
if (greenS == rgb_order[i])
$('#wiz_r_select option[value='+rgb_order[i]+']').attr('disabled',true);
else
$('#wiz_r_select option[value='+order[i]+']').attr('disabled',false);
$('#wiz_r_select option[value='+rgb_order[i]+']').attr('disabled',false);
}
if(redS != 'null' && greenS != 'null')
{
$('#btn_wiz_save').attr('disabled',false);
var blueS = parsedConfJSON.device.colorOrder.replace(redS, "").replace(greenS, "");
rgb_order[0] = redS;
rgb_order[1] = greenS;
rgb_order[2] = blueS;
for (var i = 0; i<rgb_order.length; i++)
{
if(rgb_order[i] == "r")
rgb_order[i] = redS;
else if(rgb_order[i] == "g")
rgb_order[i] = greenS;
else
rgb_order[i] = blueS;
}
rgb_order = rgb_order.toString().replace(/,/g,"");
if(redS == "r" && greenS == "g")
@ -125,9 +144,7 @@ $(document).ready( function() {
setTimeout(requestSetSource, 100, 'auto');
setStorage("wizardactive", true);
$('#btn_wiz_abort').off().on('click',function() {
resetWizard()
});
$('#btn_wiz_abort').off().on('click', resetWizard);
$('#btn_wiz_checkok').off().on('click',function() {
showInfoDialog('success', "", $.i18n('infoDialog_wizrgb_text'));
@ -136,14 +153,484 @@ $(document).ready( function() {
$('#btn_wiz_save').off().on('click',function() {
resetWizard();
parsedConfJSON.device.colorOrder = new_rgb_order;
requestWriteConfig({"device" : parsedConfJSON.device});
serverConfig.device.colorOrder = new_rgb_order;
requestWriteConfig({"device" : serverConfig.device});
setTimeout(initRestart, 100);
});
}
$('#btn_wizard_byteorder').off().on('click',function() {
startWizardRGB();
});
$('#btn_wizard_byteorder').off().on('click',startWizardRGB);
//color calibration wizard
var kodiAddress = document.location.hostname+':8080';
var wiz_editor;
var colorLength;
var cobj;
var step = 0;
var withKodi = false;
var profile = 0;
var websAddress;
var imgAddress;
var vidAddress = "https://sourceforge.net/projects/hyperion-project/files/resources/vid/";
var picnr = 0;
var availVideos = ["Sweet_Cocoon","Caminandes_2_GranDillama","Caminandes_3_Llamigos"];
if(getStorage("kodiAddress" != null))
kodiAddress = getStorage("kodiAddress");
function switchPicture(pictures)
{
if(typeof pictures[picnr] === 'undefined')
picnr = 0;
sendToKodi('playP',pictures[picnr]);
picnr++;
}
function sendToKodi(type, content, cb)
{
var command;
if(type == "playP")
content = imgAddress+content+'.png';
if(type == "playV")
content = vidAddress+content;
if(type == "msg")
command = '{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title": "'+$.i18n('wiz_cc_title')+'", "message": "'+content+'", "image":"info", "displaytime":5000 },"id":"1"}';
else if (type == "stop")
command = '{"jsonrpc":"2.0","method":"Player.Stop","params":{"playerid": 2},"id":"1"}';
else if (type == "playP" || type == "playV")
command = '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"' + content + '"}},"id":"1"}';
else if (type == "rotate")
command = '{"jsonrpc":"2.0","method":"Player.Rotate","params":{"playerid": 2},"id":"1"}';
$.ajax({
url: 'http://' + kodiAddress + '/jsonrpc',
dataType: 'jsonp',
jsonpCallback: 'jsonCallback',
type: 'POST',
async: true,
timeout: 2000,
data: 'request=' + encodeURIComponent( command )
})
.done( function( data, textStatus, jqXHR ) {
if ( jqXHR.status == 200 && data['result'] == 'OK' && type == "msg")
cb("success");
})
// Older Versions Of Kodi/XBMC Tend To Fail Due To CORS But Typically If A '200' Is Returned Then It Has Worked!
.fail( function( jqXHR, textStatus ) {
if ( jqXHR.status != 200 && type == "msg")
cb("error")
});
}
function performAction()
{
var h;
if(step == 1)
{
$('#wiz_cc_desc').html($.i18n('wiz_cc_chooseid'));
updateWEditor(["id"]);
$('#btn_wiz_back').attr("disabled", true)
}
else
$('#btn_wiz_back').attr("disabled", false)
if(step == 2)
{
updateWEditor(["white"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_white_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_white_title'));
sendToKodi('playP',"white");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_white_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 3)
{
updateWEditor(["gammaRed","gammaGreen","gammaBlue"]);
h = '<p>'+$.i18n('wiz_cc_adjustgamma')+'</p>';
if(withKodi)
{
sendToKodi('playP',"HGradient");
h +='<button id="wiz_cc_btn_sp" class="btn btn-primary">'+$.i18n('wiz_cc_btn_switchpic')+'</button>';
}
else
h += '<p>'+$.i18n('wiz_cc_lettvshowm', "gey_1, grey_2, grey_3, HGradient, VGradient")+'</p>';
$('#wiz_cc_desc').html(h);
$('#wiz_cc_btn_sp').off().on('click', function(){
switchPicture(["VGradient","grey_1","grey_2","grey_3","HGradient"]);
});
}
if(step == 4)
{
updateWEditor(["red"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_red_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_red_title'));
sendToKodi('playP',"red");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_red_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 5)
{
updateWEditor(["green"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_green_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_green_title'));
sendToKodi('playP',"green");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_green_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 6)
{
updateWEditor(["blue"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_blue_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_blue_title'));
sendToKodi('playP',"blue");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_blue_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 7)
{
updateWEditor(["cyan"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_cyan_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_cyan_title'));
sendToKodi('playP',"cyan");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_cyan_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 8)
{
updateWEditor(["magenta"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_magenta_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_magenta_title'));
sendToKodi('playP',"magenta");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_magenta_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 9)
{
updateWEditor(["yellow"]);
h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_yellow_title'));
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_yellow_title'));
sendToKodi('playP',"yellow");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_yellow_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 10)
{
updateWEditor(["brightnessMin"]);
h = $.i18n('wiz_cc_minBright');
if(withKodi)
{
h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_black_title'));
sendToKodi('playP',"black");
}
else
h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_black_title'));
$('#wiz_cc_desc').html(h);
}
if(step == 11)
{
updateWEditor([""], true);
h = '<p>'+$.i18n('wiz_cc_testintro')+'</p>';
if(withKodi)
{
h += '<p>'+$.i18n('wiz_cc_testintrok')+'</p>';
sendToKodi('stop');
for(var i = 0; i<availVideos.length; i++)
{
var txt = availVideos[i].replace(/_/g," ");
h +='<div><button id="'+availVideos[i]+'" class="btn btn-sm btn-primary videobtn"><i class="fa fa-fw fa-play"></i> '+txt+'</button></div>';
}
h +='<div><button id="stop" class="btn btn-sm btn-danger videobtn" style="margin-bottom:15px"><i class="fa fa-fw fa-stop"></i> '+$.i18n('wiz_cc_btn_stop')+'</button></div>';
}
else
h += '<p>'+$.i18n('wiz_cc_testintrowok')+' <a href="https://sourceforge.net/projects/hyperion-project/files/resources/vid/" target="_blank">'+$.i18n('wiz_cc_link')+'</a></p>';
h += '<p>'+$.i18n('wiz_cc_summary')+'</p>';
$('#wiz_cc_desc').html(h);
$('.videobtn').off().on('click', function(e){
if(e.target.id == "stop")
sendToKodi("stop");
else
sendToKodi("playV",e.target.id+'.mp4');
$(this).attr("disabled", true);
setTimeout(function(){$('.videobtn').attr("disabled", false)},10000);
});
$('#btn_wiz_next').attr("disabled", true);
$('#btn_wiz_save').toggle(true);
}
else
{
$('#btn_wiz_next').attr("disabled", false);
$('#btn_wiz_save').toggle(false);
}
}
function updateWEditor(el, all)
{
for (var key in cobj)
{
if(all === true || el[0] == key || el[1] == key || el[2] == key)
$('#editor_container_wiz [data-schemapath*=".'+profile+'.'+key+'"]').toggle(true);
else
$('#editor_container_wiz [data-schemapath*=".'+profile+'.'+key+'"]').toggle(false);
}
}
function startWizardCC()
{
//create html
$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_cc_title'));
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_cc_title')+'</h4><p>'+$.i18n('wiz_cc_intro1')+'</p><label>'+$.i18n('wiz_cc_kwebs')+'</label><input class="form-control" style="width:170px;margin:auto" id="wiz_cc_kodiip" type="text" placeholder="'+kodiAddress+'" value="'+kodiAddress+'" /><span id="kodi_status"></span><span id="multi_cali"></span>');
$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont" disabled="disabled"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
$('#wizp2_body').html('<div id="wiz_cc_desc" style="font-weight:bold"></div><div id="editor_container_wiz"></div>');
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_back"><i class="fa fa-fw fa-chevron-left"></i>'+$.i18n('general_btn_back')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_next">'+$.i18n('general_btn_next')+'<i style="margin-left:4px;"class="fa fa-fw fa-chevron-right"></i></button><button type="button" class="btn btn-warning" id="btn_wiz_save" style="display:none"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saverestart')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>')
//open modal
$("#wizard_modal").modal({
backdrop : "static",
keyboard: false,
show: true
});
$('#wiz_cc_kodiip').off().on('change',function() {
kodiAddress = $(this).val();
setStorage("kodiAddress", kodiAddress);
sendToKodi("msg", $.i18n('wiz_cc_kodimsg_start'), function(cb){
if(cb == "error")
{
$('#kodi_status').html('<p style="color:red;font-weight:bold;margin-top:5px">'+$.i18n('wiz_cc_kodidiscon')+'</p><p>'+$.i18n('wiz_cc_kodidisconlink')+' <a href="https://sourceforge.net/projects/hyperion-project/files/resources/Hyperion_calibration_pictures.zip/download" target="_blank">'+$.i18n('wiz_cc_link')+'</p>');
withKodi = false;
}
else
{
$('#kodi_status').html('<p style="color:green;font-weight:bold;margin-top:5px">'+$.i18n('wiz_cc_kodicon')+'</p>');
withKodi = true;
}
$('#btn_wiz_cont').attr('disabled', false);
});
});
//listen for continue
$('#btn_wiz_cont').off().on('click',function() {
beginWizardCC();
$('#wizp1').toggle(false);
$('#wizp2').toggle(true);
});
$('#wiz_cc_kodiip').trigger("change")
colorLength = serverConfig.color.channelAdjustment;
cobj = schema.color.properties.channelAdjustment.items.properties;
websAddress = document.location.hostname+':'+serverConfig.webConfig.port;
imgAddress = 'http://'+websAddress+'/img/cc/';
setStorage("wizardactive", true);
//check profile count
if(colorLength.length > 1)
{
$('#multi_cali').html('<p style="font-weight:bold;">'+$.i18n('wiz_cc_morethanone')+'</p><select id="wiz_select" class="form-control" style="width:200px;margin:auto"></select>');
for(var i = 0; i<colorLength.length; i++)
$('#wiz_select').append(createSelOpt(i,i+1+' ('+colorLength[i].id+')'));
$('#wiz_select').off().on('change', function(){
profile = $(this).val();
});
}
//prepare editor
wiz_editor = createJsonEditor('editor_container_wiz', {
color : schema.color
}, true, true);
$('#editor_container_wiz h4').toggle(false);
$('#editor_container_wiz .btn-group').toggle(false);
$('#editor_container_wiz [data-schemapath="root.color.imageToLedMappingType"]').toggle(false);
for(var i = 0; i<colorLength.length; i++)
$('#editor_container_wiz [data-schemapath*="root.color.channelAdjustment.'+i+'."]').toggle(false);
}
function beginWizardCC()
{
$('#btn_wiz_next').off().on('click',function() {
step++;
performAction();
});
$('#btn_wiz_back').off().on('click',function() {
step--;
performAction();
});
$('#btn_wiz_abort').off().on('click', resetWizard);
$('#btn_wiz_save').off().on('click',function() {
requestWriteConfig(wiz_editor.getValue());
resetWizard();
setTimeout(initRestart, 200);
});
wiz_editor.on("change", function(e){
var val = wiz_editor.getEditor('root.color.channelAdjustment.'+profile+'').getValue();
var temp = JSON.parse(JSON.stringify(val));
delete temp.leds
requestAdjustment(JSON.stringify(temp),"",true);
});
step++
performAction();
}
$('#btn_wizard_colorcalibration').off().on('click', startWizardCC);
//hue wizard
function startWizardPhilipsHue()
{
//create html
$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_hue_title'));
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_hue_title')+'</h4><p>'+$.i18n('wiz_hue_intro1')+'</p><p style="font-weight:bold;">'+$.i18n('wiz_hue_intro2')+'</p>');
$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
$('#wizp2_body').append('<span id="ip_alert" style="display:none; color:red; font-weight: bold;">'+$.i18n('wiz_hue_failure_ip')+'</span>');
$('#wizp2_body').append('<span id="abortConnection" style="display:none; color:red; font-weight: bold;">'+$.i18n('wiz_hue_failure_connection')+'</span><br />');
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_hue_ip')+'</label><div class="input-group" style="width:150px"><input type="text" class="input-group" id="ip"></div></div>');
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_hue_username')+'</label<div class="input-group" style="width:150px"><input type="text" class="input-group" id="user" readonly="readonly"></div></div>');
$('#wizp2_body').append('<div id="hue_lights" class="row"><table></table></div>');
$('#wizp2_footer').html('<button type="button" class="btn btn-success" id="wiz_hue_create_user"> <i class="fa fa-floppy-o"></i>'+$.i18n('wiz_hue_create_user')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
$('#wizp3_body').html('<span>'+$.i18n('wiz_hue_press_link')+'</span> <br /><br /><center><span id="connectionTime"></span><br /><img src="/img/hyperion/ring-alt.svg" /><center>');
//open modal
$("#wizard_modal").modal({
backdrop : "static",
keyboard: false,
show: true
});
//listen for continue
$('#btn_wiz_cont').off().on('click',function() {
beginWizardHue();
$('#wizp1').toggle(false);
$('#wizp2').toggle(true);
});
}
function beginWizardHue()
{
//listen for continue
$('#wiz_hue_create_user').off().on('click',function() {
doWizardHue();
});
}
function doWizardHue()
{
var connectionRetries = 15;
var data = {"devicetype":"hyperion#"+Date.now()};
var UserInterval = setInterval(function(){
$.ajax({
type: "POST",
url: 'http://'+$("#ip").val()+'/api',
processData: false,
timeout: 1000,
contentType: 'application/json',
data: JSON.stringify(data),
success: function(r) {
$('#wizp1').toggle(false);
$('#wizp2').toggle(false);
$('#wizp3').toggle(true);
connectionRetries--;
$("#connectionTime").html(connectionRetries);
if(connectionRetries == 0) {
abortConnection(UserInterval);
}
else
{
$("#abortConnection").hide();
$("#ip_alert").hide();
if (typeof r[0].error != 'undefined') {
console.log(connectionRetries+": link not pressed");
}
if (typeof r[0].success != 'undefined') {
$('#wizp1').toggle(false);
$('#wizp2').toggle(true);
$('#wizp3').toggle(false);
$('#user').val(r[0].success.username);
$( "#hue_lights" ).empty();
get_hue_lights();
clearInterval(UserInterval);
}
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
$('#wizp1').toggle(false);
$('#wizp2').toggle(true);
$('#wizp3').toggle(false);
$("#ip_alert").show();
clearInterval(UserInterval);
}
});
},1000);
}
function get_hue_lights(){
$.ajax({
type: "GET",
url: 'http://'+$("#ip").val()+'/api/'+$("#user").val()+'/lights',
processData: false,
contentType: 'application/json',
success: function(r) {
for(var lightid in r){
$('#hue_lights').append('<tr><td>ID: '+lightid+'</td><td>Name: '+r[lightid].name+'</td></tr>');
}
}
});
}
function abortConnection(UserInterval){
clearInterval(UserInterval);
$('#wizp1').toggle(false);
$('#wizp2').toggle(true);
$('#wizp3').toggle(false);
$("#abortConnection").show();
}
$('#btn_wizard_philipshue').off().on('click',startWizardPhilipsHue);
});

View File

@ -5,22 +5,32 @@ install_file()
src="$1"
dest="$2"
if [ -e "$dest" ] && ! cmp --quiet "$src" "$dest"
then
echo "INFO: $dest exists, new version copied to ${dest}.new"
cp "$src" "${dest}.new"
if [ ! -e "$dest" ]
cp "$src" "${dest}"
return 1
else
echo "--> Service file already exists, skip creation"
return 0
fi
cp "$src" "${dest}"
return 0
}
echo "--- hyperion ambient light postinstall ---"
echo "- install configuration template"
mkdir -p /etc/hyperion
mkdir -p /usr/share/hyperion/custom-effects
#check system
CPU_RPI=`grep -m1 -c 'BCM2708\|BCM2709\|BCM2710\|BCM2835' /proc/cpuinfo`
CPU_X32X64=`uname -m | grep 'x86_32\|i686\|x86_64' | wc -l`
#Check for a bootloader as Berryboot
BOOT_BERRYBOOT=$(grep -m1 -c '\(/var/media\|/media/pi\)/berryboot' /etc/mtab)
#get current system ip + add default port
address=$(ip -o -4 a | awk '$2 == "eth0" { gsub(/\/.*/, "", $4); print $4 }')":8099"
#check if hyperion is running
HYPERION_RUNNING=false
pgrep hyperiond > /dev/null 2>&1 && HYPERION_RUNNING=true
@ -30,38 +40,91 @@ SERVICE_POSTFIX=""
if grep -m1 systemd /proc/1/comm > /dev/null
then
echo "- init deamon: systemd"
echo "--> init deamon: systemd"
# systemd
$HYPERION_RUNNING && systemctl stop hyperion 2> /dev/null
install_file /usr/share/hyperion/service/hyperion.systemd.sh /etc/systemd/system/hyperiond.service || SERVICE_POSTFIX=".new"
systemctl -q enable hyperiond.service
start_msg="systemctl start hyperion"
$HYPERION_RUNNING && systemctl start hyperiond
$HYPERION_RUNNING && systemctl stop hyperiond 2> /dev/null
install_file /usr/share/hyperion/service/hyperion.systemd /etc/systemd/system/hyperiond.service && systemctl -q enable hyperiond.service
start_msg="--> systemctl start hyperiond"
systemctl start hyperiond
elif [ -e /sbin/initctl ]
then
echo "- init deamon: upstart"
echo "--> init deamon: upstart"
# upstart
$HYPERION_RUNNING && initctl stop hyperiond
install_file /usr/share/hyperion/service/hyperiond.initctl.sh /etc/init/hyperion.conf || SERVICE_POSTFIX=".new"
initctl reload-configuration
start_msg="initctl start hyperion"
$HYPERION_RUNNING && initctl start hyperiond
install_file /usr/share/hyperion/service/hyperiond.initctl /etc/init/hyperion.conf && initctl reload-configuration
start_msg="--> initctl start hyperiond"
initctl start hyperiond
else
echo "- init deamon: sysV"
echo "--> init deamon: sysV"
# sysV
$HYPERION_RUNNING && service hyperiond stop 2>/dev/null
install_file /usr/share/hyperion/service/hyperion.init.sh /etc/init.d/hyperiond || SERVICE_POSTFIX=".new"
chmod +x /etc/init.d/hyperiond
update-rc.d hyperiond defaults 98 02
start_msg="service hyperion start"
$HYPERION_RUNNING && service hyperiond start
install_file /usr/share/hyperion/service/hyperion.init /etc/init.d/hyperiond && chmod +x /etc/init.d/hyperiond && update-rc.d hyperiond defaults 98 02
start_msg="--> service hyperiond start"
service hyperiond start
fi
#cleanup
rm -r /usr/share/hyperion/service
#link binarys and set exec bit
BINSP=/usr/share/hyperion/bin
BINTP=/usr/bin
chmod +x -R $BINSP
ln -fs $BINSP/hyperiond $BINTP/hyperiond
ln -fs $BINSP/hyperion-remote $BINTP/hyperion-remote
ln -fs $BINSP/hyperion-v4l2 $BINTP/hyperion-v4l2
ln -fs $BINSP/hyperion-framebuffer $BINTP/hyperion-framebuffer 2>/dev/null
ln -fs $BINSP/hyperion-dispmanx $BINTP/hyperion-dispmanx 2>/dev/null
ln -fs $BINSP/hyperion-x11 $BINTP/hyperion-x11 2>/dev/null
ln -fs $BINSP/hyperion-aml $BINTP/hyperion-aml 2>/dev/null
#Check, if dtparam=spi=on is in place
if [ $CPU_RPI -eq 1 ]; then
BOOT_DIR="/boot"
if [ $BOOT_BERRYBOOT -eq 1 ]; then
BOOT_DIR=$(sed -ne "s#/dev/mmcblk0p1 \([^ ]*\) vfat rw,.*#\1#p" /etc/mtab)
fi
if [ -z "$BOOT_DIR" -o ! -f "$BOOT_DIR/config.txt" ]; then
echo '---> Warning: RPi using BERRYBOOT found but can not locate where config.txt is to enable SPI. (BOOT_DIR='"$BOOT_DIR)"
SPIOK=1 # Not sure if OK, but don't ask to reboot
else
SPIOK=`grep '^\dtparam=spi=on' "$BOOT_DIR/config.txt" | wc -l`
if [ $SPIOK -ne 1 ]; then
echo '---> Raspberry Pi found, but SPI is not set, we write "dtparam=spi=on" to '"$BOOT_DIR/config.txt"
sed -i '$a dtparam=spi=on' "$BOOT_DIR/config.txt"
REBOOTMESSAGE="echo Please reboot your Raspberry Pi, we inserted dtparam=spi=on to $BOOT_DIR/config.txt"
fi
fi
fi
echo "-----------------------------------------------------------------------------"
echo "- hyperion is installed, please check your configuration in /etc/hyperion/ -"
echo "--> Hyperion has been installed/updated!"
echo "--> For configuration, visit with your browser: ${address}"
$REBOOTMESSAGE
echo "-----------------------------------------------------------------------------"
echo "Webpage: www.hyperion-project.org"
echo "Wiki: wiki.hyperion-project.org"
echo "Forum: forum.hyperion-project.org"
echo "-----------------------------------------------------------------------------"
# try to open the browser for desktops. TODO: add headless detection(?)
if [ $CPU_X32X64 -eq 1]
echo "--> Will open browser with target: ${address}"
if [[ -e /usr/bin/xdg-open ]]
then
xdg-open http://"$address"
elif [[ -e /usr/bin/x-www-browser ]]
then
x-www-browser http://"$address"
elif [[ -e /usr/bin/www-browser ]]
then
www-browser http://"$address"
fi
fi
if [ -e /opt/hyperion/ ]
then

51
cmake/debian/preinst Normal file
View File

@ -0,0 +1,51 @@
#!/bin/sh
# check which init script we should use
USE_SYSTEMD=`grep -m1 -c systemd /proc/1/comm`
USE_INITCTL=`which /sbin/initctl | wc -l`
USE_SERVICE=`which /usr/sbin/service | wc -l`
#check for hyperion install
if [ -d /usr/share/hyperion/bin ];then
if [ -e /etc/hyperion/hyperion.config.json ];then
file=`grep -m1 -c '"general"' /etc/hyperion/hyperion.config.json`
if [ $file -ne 1 ]; then
echo "--> It seems you are running an old version of Hyperion (1.X). Will create a backup at /usr/share/hyperion/Backup_Hyperion_1.0 and reset configuration / system service"
# Stop hyperion daemon if it is running
echo '---> Stop Hyperion, if necessary'
if [ $USE_SYSTEMD -eq 1 ]; then
service hyperion stop 2>/dev/null
elif [ $USE_INITCTL -eq 1 ]; then
/sbin/initctl stop hyperion 2>/dev/null
elif [ $USE_SERVICE -eq 1 ]; then
/usr/sbin/service hyperion stop 2>/dev/null
fi
#Backup
echo "--> Move old config(s) and files to /usr/share/hyperion/Backup_Hyperion_1.0"
mkdir /usr/share/hyperion/Backup_Hyperion_1.0
mv /usr/share/hyperion /usr/share/hyperion/Backup_Hyperion_1.0
mv /etc/hyperion/* /usr/share/hyperion/Backup_Hyperion_1.0
#Disabling and delete service files
if [ $USE_SYSTEMD -eq 1 ]; then
# Delete and disable Hyperion systemd script
echo '---> Delete and disable Hyperion systemd service'
systemctl disable hyperion.service
rm -v /etc/systemd/system/hyperion* 2>/dev/null
elif [ $USE_INITCTL -eq 1 ]; then
echo '---> Delete and disable Hyperion initctl script'
rm -v /etc/init/hyperion* 2>/dev/null
initctl reload-configuration
elif [ $USE_SERVICE -eq 1 ]; then
# Delete and disable Hyperion init.d script
echo '---> Delete and disable Hyperion init.d script'
update-rc.d -f hyperion remove
rm /etc/init.d/hyperion* 2>/dev/null
fi
echo "--> Hyperion 1.0 installation has been moved"
fi
fi
fi

View File

@ -9,9 +9,9 @@ SET ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" )
SET ( CPACK_DEBIAN_PACKAGE_MAINTAINER "Hyperion Team")
SET ( CPACK_DEBIAN_PACKAGE_NAME "Hyperion" )
SET ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/cmake/debian/postinst" )
SET ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/cmake/debian/postinst;${CMAKE_CURRENT_SOURCE_DIR}/cmake/debian/preinst" )
SET ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.hyperion-project.org" )
SET ( CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a (>= 5.2.0), libqt5network5 (>= 5.2.0), libqt5gui5 (>= 5.2.0), libqt5serialport5 (>= 5.2.0), libavahi-core-dev (>= 0.6.0), libavahi-compat-libdnssd-dev (>= 0.6.0), libusb-1.0-0, libpython2.7, libc6" )
SET ( CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a (>= 5.2.0), libqt5network5 (>= 5.2.0), libqt5gui5 (>= 5.2.0), libqt5serialport5 (>= 5.2.0), libavahi-core7 (>= 0.6.31), libavahi-compat-libdnssd1 (>= 0.6.31), libusb-1.0-0, libpython2.7, libc6" )
SET ( CPACK_DEBIAN_PACKAGE_SECTION "Miscellaneous" )
SET ( CPACK_RPM_PACKAGE_NAME "Hyperion" )

View File

@ -41,8 +41,6 @@
/// following fields:
/// * 'imageToLedMappingType' : multicolor_mean - every led has it's own calculatedmean color
/// unicolor_mean - every led has same color, color is the mean of whole image
/// * 'channelAdjustment_enable' : true/false enables/disables this channelAdjustment section
/// * 'channelAdjustment_v4l_only' : if enabled and set to true, then channelAdjustment is only for v4l devices
/// * 'channelAdjustment'
/// * 'id' : The unique identifier of the channel adjustments (eg 'device_1')
/// * 'leds' : The indices (or index ranges) of the leds to which this channel adjustment applies
@ -57,8 +55,6 @@
"color" :
{
"imageToLedMappingType" : "multicolor_mean",
"channelAdjustment_enable" : true,
"channelAdjustment_v4l_only" : false,
"channelAdjustment" :
[
{

View File

@ -22,8 +22,6 @@
"color" :
{
"imageToLedMappingType" : "multicolor_mean",
"channelAdjustment_enable" : true,
"channelAdjustment_v4l_only" : false,
"channelAdjustment" :
[
{

View File

@ -0,0 +1,79 @@
{
"type":"object",
"script" : "clock.py",
"title":"edt_eff_clock_header_title",
"required":true,
"properties":{
"offset": {
"type": "number",
"title":"edt_eff_offset_title",
"default": 0,
"append" : "edt_append_leds",
"propertyOrder" : 1
},
"hour-color": {
"type": "array",
"title":"edt_eff_colorHour_title",
"format":"colorpicker",
"default": [255,0,0],
"items" : {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder" : 2
},
"minute-color": {
"type": "array",
"title":"edt_eff_colorMinute_title",
"format":"colorpicker",
"default": [0,255,0],
"items" : {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder" : 3
},
"second-color": {
"type": "array",
"title":"edt_eff_colorSecond_title",
"format":"colorpicker",
"default": [0,0,255],
"items" : {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder" : 4
},
"hour-margin": {
"type": "number",
"title":"edt_eff_hourMargin_title",
"default": 2,
"append" : "edt_append_leds",
"propertyOrder" : 5
},
"minute-margin": {
"type": "number",
"title":"edt_eff_minuteMargin_title",
"default": 1,
"append" : "edt_append_leds",
"propertyOrder" : 6
},
"second-margin": {
"type": "number",
"title":"edt_eff_secondMargin_title",
"default": 0,
"append" : "edt_append_leds",
"propertyOrder" : 7
}
},
"additionalProperties": false
}

View File

@ -0,0 +1,18 @@
{
"type":"object",
"script" : "pacman.py",
"title":"edt_eff_pacman_header_title",
"required":true,
"properties":{
"sleep-time": {
"type": "number",
"title":"edt_eff_sleeptime_title",
"default": 0.3,
"step" : 0.1,
"minimum": 0.01,
"append" : "edt_append_s",
"propertyOrder" : 1
}
},
"additionalProperties": false
}

View File

@ -355,12 +355,6 @@ private:
/// register of input sources and it's prio channel
PriorityRegister _priorityRegister;
/// flag for v4l color correction
bool _colorAdjustmentV4Lonly;
/// flag for color adjustment enable
bool _adjustmentEnabled;
/// flag indicates state for autoselection of input source
bool _sourceAutoSelectEnabled;

View File

@ -392,7 +392,7 @@ Hyperion::Hyperion(const QJsonObject &qjsonConfig, const QString configFile)
, _timer()
, _log(CORE_LOGGER)
, _hwLedCount(_ledString.leds().size())
, _colorAdjustmentV4Lonly(false)
, _sourceAutoSelectEnabled(true)
, _configHash()
, _ledGridSize(getLedLayoutGridSize(qjsonConfig["leds"]))
@ -405,11 +405,6 @@ Hyperion::Hyperion(const QJsonObject &qjsonConfig, const QString configFile)
}
// set color correction activity state
const QJsonObject& color = qjsonConfig["color"].toObject();
_adjustmentEnabled = color["channelAdjustment_enable"].toBool(true);
_colorAdjustmentV4Lonly = color["channelAdjustment_v4l_only"].toBool(false);
InfoIf(!_adjustmentEnabled , _log, "Color adjustment disabled" );
InfoIf(_colorAdjustmentV4Lonly , _log, "Color adjustment for v4l inputs only" );
// initialize the image processor factory
_ledMAppingType = ImageProcessor::mappingTypeToInt(color["imageToLedMappingType"].toString());
@ -721,7 +716,7 @@ void Hyperion::update()
_ledBuffer.reserve(_hwLedCount);
_ledBuffer = priorityInfo.ledColors;
if ( _adjustmentEnabled && priority < PriorityMuxer::LOWEST_PRIORITY && (!_colorAdjustmentV4Lonly || priorityInfo.componentId == hyperion::COMP_V4L) )
if ( priority < PriorityMuxer::LOWEST_PRIORITY)
{
_raw2ledAdjustment->applyAdjustment(_ledBuffer);
}

View File

@ -114,30 +114,17 @@
},
"propertyOrder" : 1
},
"channelAdjustment_enable" :
{
"type" : "boolean",
"title" : "edt_conf_color_channelAdjustment_enable_title",
"default" : true,
"propertyOrder" : 2
},
"channelAdjustment_v4l_only" :
{
"type" : "boolean",
"title" : "edt_conf_color_channelAdjustment_v4l_only_title",
"default" : false,
"propertyOrder" : 3
},
"channelAdjustment" :
{
"type" : "array",
"title" : "edt_conf_color_channelAdjustment_header_title",
"required" : true,
"propertyOrder" : 4,
"propertyOrder" : 3,
"items" :
{
"type" : "object",
"required" : true,
"title" : "edt_conf_color_channelAdjustment_header_itemtitle",
"properties" :
{
"id" :
@ -287,7 +274,7 @@
"brightnessMin" :
{
"type" : "number",
"title" : "edt_conf_color_brightness_min_title",
"title" : "edt_conf_color_brightnessMin_title",
"required" : true,
"minimum" : 0.0,
"maximum": 1.0,
@ -309,7 +296,7 @@
"gammaRed" :
{
"type" : "number",
"title" : "edt_conf_color_gamma_red_title",
"title" : "edt_conf_color_gammaRed_title",
"required" : true,
"minimum" : 0.0,
"maximum": 100.0,
@ -320,7 +307,7 @@
"gammaGreen" :
{
"type" : "number",
"title" : "edt_conf_color_gamma_green_title",
"title" : "edt_conf_color_gammaGreen_title",
"required" : true,
"minimum" : 0.0,
"maximum": 100.0,
@ -331,7 +318,7 @@
"gammaBlue" :
{
"type" : "number",
"title" : "edt_conf_color_gamma_blue_title",
"title" : "edt_conf_color_gammaBlue_title",
"required" : true,
"minimum" : 0.0,
"maximum": 100.0,

View File

@ -669,7 +669,6 @@ void JsonClientConnection::handleServerInfoCommand(const QJsonObject&, const QSt
info["priorities"] = priorities;
info["priorities_autoselect"] = _hyperion->sourceAutoSelectEnabled();
// collect adjustment information
QJsonArray adjustmentArray;
for (const std::string& adjustmentId : _hyperion->getAdjustmentIds())
@ -684,23 +683,59 @@ void JsonClientConnection::handleServerInfoCommand(const QJsonObject&, const QSt
QJsonObject adjustment;
adjustment["id"] = QString::fromStdString(adjustmentId);
QJsonArray blackAdjust;
blackAdjust.append(colorAdjustment->_rgbBlackAdjustment.getAdjustmentR());
blackAdjust.append(colorAdjustment->_rgbBlackAdjustment.getAdjustmentG());
blackAdjust.append(colorAdjustment->_rgbBlackAdjustment.getAdjustmentB());
adjustment.insert("black", blackAdjust);
QJsonArray whiteAdjust;
whiteAdjust.append(colorAdjustment->_rgbWhiteAdjustment.getAdjustmentR());
whiteAdjust.append(colorAdjustment->_rgbWhiteAdjustment.getAdjustmentG());
whiteAdjust.append(colorAdjustment->_rgbWhiteAdjustment.getAdjustmentB());
adjustment.insert("white", whiteAdjust);
QJsonArray redAdjust;
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getAdjustmentR());
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getAdjustmentG());
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getAdjustmentB());
adjustment.insert("redAdjust", redAdjust);
adjustment.insert("red", redAdjust);
QJsonArray greenAdjust;
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getAdjustmentR());
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getAdjustmentG());
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getAdjustmentB());
adjustment.insert("greenAdjust", greenAdjust);
adjustment.insert("green", greenAdjust);
QJsonArray blueAdjust;
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getAdjustmentR());
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getAdjustmentG());
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getAdjustmentB());
adjustment.insert("blueAdjust", blueAdjust);
adjustment.insert("blue", blueAdjust);
QJsonArray cyanAdjust;
cyanAdjust.append(colorAdjustment->_rgbCyanAdjustment.getAdjustmentR());
cyanAdjust.append(colorAdjustment->_rgbCyanAdjustment.getAdjustmentG());
cyanAdjust.append(colorAdjustment->_rgbCyanAdjustment.getAdjustmentB());
adjustment.insert("cyan", cyanAdjust);
QJsonArray magentaAdjust;
magentaAdjust.append(colorAdjustment->_rgbMagentaAdjustment.getAdjustmentR());
magentaAdjust.append(colorAdjustment->_rgbMagentaAdjustment.getAdjustmentG());
magentaAdjust.append(colorAdjustment->_rgbMagentaAdjustment.getAdjustmentB());
adjustment.insert("magenta", magentaAdjust);
QJsonArray yellowAdjust;
yellowAdjust.append(colorAdjustment->_rgbYellowAdjustment.getAdjustmentR());
yellowAdjust.append(colorAdjustment->_rgbYellowAdjustment.getAdjustmentG());
yellowAdjust.append(colorAdjustment->_rgbYellowAdjustment.getAdjustmentB());
adjustment.insert("yellow", yellowAdjust);
adjustment["brightnessMin"] = colorAdjustment->_rgbTransform.getBrightnessMin();
adjustment["brightness"] = colorAdjustment->_rgbTransform.getBrightness();
adjustment["gammaRed"] = colorAdjustment->_rgbTransform.getGammaR();
adjustment["gammaGreen"] = colorAdjustment->_rgbTransform.getGammaG();
adjustment["gammaBlue"] = colorAdjustment->_rgbTransform.getGammaB();
adjustmentArray.append(adjustment);
}
@ -806,76 +841,76 @@ void JsonClientConnection::handleAdjustmentCommand(const QJsonObject& message, c
return;
}
if (adjustment.contains("redAdjust"))
if (adjustment.contains("red"))
{
const QJsonArray & values = adjustment["redAdjust"].toArray();
const QJsonArray & values = adjustment["red"].toArray();
colorAdjustment->_rgbRedAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbRedAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbRedAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("greenAdjust"))
if (adjustment.contains("green"))
{
const QJsonArray & values = adjustment["greenAdjust"].toArray();
const QJsonArray & values = adjustment["green"].toArray();
colorAdjustment->_rgbGreenAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbGreenAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbGreenAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("blueAdjust"))
if (adjustment.contains("blue"))
{
const QJsonArray & values = adjustment["blueAdjust"].toArray();
const QJsonArray & values = adjustment["blue"].toArray();
colorAdjustment->_rgbBlueAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbBlueAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbBlueAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("cyanAdjust"))
if (adjustment.contains("cyan"))
{
const QJsonArray & values = adjustment["cyanAdjust"].toArray();
const QJsonArray & values = adjustment["cyan"].toArray();
colorAdjustment->_rgbCyanAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbCyanAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbCyanAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("magentaAdjust"))
if (adjustment.contains("magenta"))
{
const QJsonArray & values = adjustment["magentaAdjust"].toArray();
const QJsonArray & values = adjustment["magenta"].toArray();
colorAdjustment->_rgbMagentaAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbMagentaAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbMagentaAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("yellowAdjust"))
if (adjustment.contains("yellow"))
{
const QJsonArray & values = adjustment["yellowAdjust"].toArray();
const QJsonArray & values = adjustment["yellow"].toArray();
colorAdjustment->_rgbYellowAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbYellowAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbYellowAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("blackAdjust"))
if (adjustment.contains("black"))
{
const QJsonArray & values = adjustment["blackAdjust"].toArray();
const QJsonArray & values = adjustment["black"].toArray();
colorAdjustment->_rgbBlackAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbBlackAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbBlackAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("whiteAdjust"))
if (adjustment.contains("white"))
{
const QJsonArray & values = adjustment["whiteAdjust"].toArray();
const QJsonArray & values = adjustment["white"].toArray();
colorAdjustment->_rgbWhiteAdjustment.setAdjustmentR(values[0u].toInt());
colorAdjustment->_rgbWhiteAdjustment.setAdjustmentG(values[1u].toInt());
colorAdjustment->_rgbWhiteAdjustment.setAdjustmentB(values[2u].toInt());
}
if (adjustment.contains("gammaR"))
if (adjustment.contains("gammaRed"))
{
colorAdjustment->_rgbTransform.setGamma(adjustment["gammaR"].toDouble(), colorAdjustment->_rgbTransform.getGammaG(), colorAdjustment->_rgbTransform.getGammaB());
colorAdjustment->_rgbTransform.setGamma(adjustment["gammaRed"].toDouble(), colorAdjustment->_rgbTransform.getGammaG(), colorAdjustment->_rgbTransform.getGammaB());
}
if (adjustment.contains("gammaG"))
if (adjustment.contains("gammaGreen"))
{
colorAdjustment->_rgbTransform.setGamma(colorAdjustment->_rgbTransform.getGammaR(), adjustment["gammaG"].toDouble(), colorAdjustment->_rgbTransform.getGammaB());
colorAdjustment->_rgbTransform.setGamma(colorAdjustment->_rgbTransform.getGammaR(), adjustment["gammaGreen"].toDouble(), colorAdjustment->_rgbTransform.getGammaB());
}
if (adjustment.contains("gammaB"))
if (adjustment.contains("gammaBlue"))
{
colorAdjustment->_rgbTransform.setGamma(colorAdjustment->_rgbTransform.getGammaR(), colorAdjustment->_rgbTransform.getGammaG(), adjustment["gammaB"].toDouble());
colorAdjustment->_rgbTransform.setGamma(colorAdjustment->_rgbTransform.getGammaR(), colorAdjustment->_rgbTransform.getGammaG(), adjustment["gammaBlue"].toDouble());
}
if (adjustment.contains("brightnessMin"))

View File

@ -18,7 +18,7 @@
"type" : "string",
"required" : false
},
"redAdjust": {
"red": {
"type": "array",
"required": false,
"items" : {
@ -29,7 +29,7 @@
"minItems": 3,
"maxItems": 3
},
"greenAdjust": {
"green": {
"type": "array",
"required": false,
"items" : {
@ -40,7 +40,7 @@
"minItems": 3,
"maxItems": 3
},
"blueAdjust": {
"blue": {
"type": "array",
"required": false,
"items" : {
@ -51,7 +51,7 @@
"minItems": 3,
"maxItems": 3
},
"yellowAdjust": {
"yellow": {
"type": "array",
"required": false,
"items" : {
@ -62,7 +62,7 @@
"minItems": 3,
"maxItems": 3
},
"magentaAdjust": {
"magenta": {
"type": "array",
"required": false,
"items" : {
@ -73,7 +73,7 @@
"minItems": 3,
"maxItems": 3
},
"cyanAdjust": {
"cyan": {
"type": "array",
"required": false,
"items" : {
@ -84,7 +84,7 @@
"minItems": 3,
"maxItems": 3
},
"blackAdjust": {
"black": {
"type": "array",
"required": false,
"items" : {
@ -95,7 +95,7 @@
"minItems": 3,
"maxItems": 3
},
"whiteAdjust": {
"white": {
"type": "array",
"required": false,
"items" : {
@ -106,19 +106,19 @@
"minItems": 3,
"maxItems": 3
},
"gammaR": {
"gammaRed": {
"type" : "number",
"required" : false,
"minimum" : 0.0,
"maximum" : 100.0
},
"gammaG": {
"gammaGreen": {
"type" : "number",
"required" : false,
"minimum" : 0.0,
"maximum" : 100.0
},
"gammaB": {
"gammaBlue": {
"type" : "number",
"required" : false,
"minimum" : 0.0,

View File

@ -492,13 +492,13 @@ void KODIVideoChecker::setVideoMode(VideoMode newVideoMode)
switch (newVideoMode)
{
case VIDEO_2D:
Info(_log, "KODICHECK INFO: switching to 2D mode");
Info(_log, "switching to 2D mode");
break;
case VIDEO_3DSBS:
Info(_log, "KODICHECK INFO: switching to 3D SBS mode");
Info(_log, "switching to 3D SBS mode");
break;
case VIDEO_3DTAB:
Info(_log, "KODICHECK INFO: switching to 3D TAB mode");
Info(_log, "switching to 3D TAB mode");
break;
}

View File

@ -110,7 +110,7 @@ void QJsonSchemaChecker::validate(const QJsonValue & value, const QJsonObject &s
else if (attribute == "id")
; // references have already been collected
else if (attribute == "title" || attribute == "description" || attribute == "default" || attribute == "format"
|| attribute == "defaultProperties" || attribute == "propertyOrder" || attribute == "append" || attribute == "step" || attribute == "access" || attribute == "options")
|| attribute == "defaultProperties" || attribute == "propertyOrder" || attribute == "append" || attribute == "step" || attribute == "access" || attribute == "options" || attribute == "script")
; // nothing to do.
else
{

View File

@ -49,7 +49,7 @@ void StaticFileServing::onServerStarted (quint16 port)
BonjourServiceRegister *bonjourRegister_http = new BonjourServiceRegister();
bonjourRegister_http->registerService(
BonjourRecord(mDNSDescr.c_str(), "_http._tcp", QString()),
BonjourRecord(mDNSDescr.c_str(), "_hyperiond-http._tcp", QString()),
port
);
Debug(_log, "Web Config mDNS responder started");

View File

@ -434,7 +434,7 @@ void JsonConnection::setAdjustment(
red.append(redAdjustment.red());
red.append(redAdjustment.green());
red.append(redAdjustment.blue());
adjust["redAdjust"] = red;
adjust["red"] = red;
}
if (greenAdjustment.isValid())
@ -443,7 +443,7 @@ void JsonConnection::setAdjustment(
green.append(greenAdjustment.red());
green.append(greenAdjustment.green());
green.append(greenAdjustment.blue());
adjust["greenAdjust"] = green;
adjust["green"] = green;
}
if (blueAdjustment.isValid())
@ -452,7 +452,7 @@ void JsonConnection::setAdjustment(
blue.append(blueAdjustment.red());
blue.append(blueAdjustment.green());
blue.append(blueAdjustment.blue());
adjust["blueAdjust"] = blue;
adjust["blue"] = blue;
}
if (cyanAdjustment.isValid())
{
@ -460,7 +460,7 @@ void JsonConnection::setAdjustment(
cyan.append(cyanAdjustment.red());
cyan.append(cyanAdjustment.green());
cyan.append(cyanAdjustment.blue());
adjust["cyanAdjust"] = cyan;
adjust["cyan"] = cyan;
}
if (magentaAdjustment.isValid())
{
@ -468,7 +468,7 @@ void JsonConnection::setAdjustment(
magenta.append(magentaAdjustment.red());
magenta.append(magentaAdjustment.green());
magenta.append(magentaAdjustment.blue());
adjust["magentaAdjust"] = magenta;
adjust["magenta"] = magenta;
}
if (yellowAdjustment.isValid())
{
@ -476,7 +476,7 @@ void JsonConnection::setAdjustment(
yellow.append(yellowAdjustment.red());
yellow.append(yellowAdjustment.green());
yellow.append(yellowAdjustment.blue());
adjust["yellowAdjust"] = yellow;
adjust["yellow"] = yellow;
}
if (whiteAdjustment.isValid())
{
@ -484,7 +484,7 @@ void JsonConnection::setAdjustment(
white.append(whiteAdjustment.red());
white.append(whiteAdjustment.green());
white.append(whiteAdjustment.blue());
adjust["whiteAdjust"] = white;
adjust["white"] = white;
}
if (blackAdjustment.isValid())
{
@ -492,7 +492,7 @@ void JsonConnection::setAdjustment(
black.append(blackAdjustment.red());
black.append(blackAdjustment.green());
black.append(blackAdjustment.blue());
adjust["blackAdjust"] = black;
adjust["black"] = black;
}
if (brightnessMin != nullptr)
{
@ -504,15 +504,15 @@ void JsonConnection::setAdjustment(
}
if (gammaR != nullptr)
{
adjust["gammaR"] = *gammaR;
adjust["gammaRed"] = *gammaR;
}
if (gammaG != nullptr)
{
adjust["gammaG"] = *gammaG;
adjust["gammaGreen"] = *gammaG;
}
if (gammaB != nullptr)
{
adjust["gammaB"] = *gammaB;
adjust["gammaBlue"] = *gammaB;
}
command["adjustment"] = adjust;

View File

@ -85,7 +85,7 @@ int main(int argc, char * argv[])
ColorOption & argYAdjust = parser.add<ColorOption> ('Y', "yellowAdjustment", "Set the adjustment of the yellow color (requires colors in hex format as RRGGBB)");
ColorOption & argWAdjust = parser.add<ColorOption> ('W', "whiteAdjustment", "Set the adjustment of the white color (requires colors in hex format as RRGGBB)");
ColorOption & argbAdjust = parser.add<ColorOption> ('b', "blackAdjustment", "Set the adjustment of the black color (requires colors in hex format as RRGGBB)");
Option & argMapping = parser.add<Option> ('m', "ledMapping" , "Set the methode for image to led mapping valif values: multicolor:mean, unicolor_mean");
Option & argMapping = parser.add<Option> ('m', "ledMapping" , "Set the methode for image to led mapping valid values: multicolor_mean, unicolor_mean");
IntOption & argSource = parser.add<IntOption> (0x0, "sourceSelect" , "Set current active priority channel and deactivate auto source switching");
BooleanOption & argSourceAuto = parser.add<BooleanOption>(0x0, "sourceAutoSelect", "Enables auto source, if disabled prio by manual selecting input source");
BooleanOption & argSourceOff = parser.add<BooleanOption>(0x0, "sourceOff", "select no source, this results in leds activly set to black (=off)");

View File

@ -376,7 +376,7 @@ void HyperionDaemon::startNetworkServices()
if (_udpListener != nullptr) {
BonjourServiceRegister *bonjourRegister_udp = new BonjourServiceRegister();
bonjourRegister_udp->registerService(
BonjourRecord(mDNSDescr.c_str(), "_hyperiond-rgbled._udp", QString()),
BonjourRecord(mDNSDescr.c_str(), "_hyperiond-udp._udp", QString()),
_udpListener->getPort()
);
Debug(_log, "UDP LIstener mDNS responder started");