1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-14 11:59:51 +03:00

Merge branch 'master' into release_6.1.0

This commit is contained in:
Marcelo Bezerra 2023-06-09 15:41:27 +02:00 committed by GitHub
commit 7fa0f7e695
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 1400 additions and 584 deletions

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ var appUpdater = appUpdater || {};
appUpdater.checkRelease = function (currVersion) { appUpdater.checkRelease = function (currVersion) {
var modalStart; var modalStart;
$.get('https://api.github.com/repos/iNavFlight/inav-configurator/releases', function (releaseData) { $.get('https://api.github.com/repos/iNavFlight/inav-configurator/releases', function (releaseData) {
GUI.log('Loaded release information from GitHub.'); GUI.log(chrome.i18n.getMessage('loadedReleaseInfo'));
//Git return sorted list, 0 - last release //Git return sorted list, 0 - last release
let newVersion = releaseData[0].tag_name; let newVersion = releaseData[0].tag_name;
@ -15,7 +15,7 @@ appUpdater.checkRelease = function (currVersion) {
GUI.log(newVersion, chrome.runtime.getManifest().version); GUI.log(newVersion, chrome.runtime.getManifest().version);
GUI.log(currVersion); GUI.log(currVersion);
GUI.log('New version available!'); GUI.log(chrome.i18n.getMessage('newVersionAvailable'));
modalStart = new jBox('Modal', { modalStart = new jBox('Modal', {
width: 400, width: 400,
height: 200, height: 200,

View file

@ -2,8 +2,8 @@
var CONFIGURATOR = { var CONFIGURATOR = {
// all versions are specified and compared using semantic versioning http://semver.org/ // all versions are specified and compared using semantic versioning http://semver.org/
'minfirmwareVersionAccepted': '6.0.0', 'minfirmwareVersionAccepted': '7.0.0',
'maxFirmwareVersionAccepted': '7.0.0', // Condition is < (lt) so we accept all in 6.x branch 'maxFirmwareVersionAccepted': '8.0.0', // Condition is < (lt) so we accept all in 7.x branch
'connectionValid': false, 'connectionValid': false,
'connectionValidCliOnly': false, 'connectionValidCliOnly': false,
'cliActive': false, 'cliActive': false,

View file

@ -3003,7 +3003,7 @@ var mspHelper = (function (gui) {
if (waypointId < MISSION_PLANNER.getCountBusyPoints()) { if (waypointId < MISSION_PLANNER.getCountBusyPoints()) {
MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, loadWaypoint); MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, loadWaypoint);
} else { } else {
GUI.log('Receive time: ' + (new Date().getTime() - startTime) + 'ms'); GUI.log(chrome.i18n.getMessage('ReceiveTime') + (new Date().getTime() - startTime) + 'ms');
MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, callback); MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, callback);
} }
}; };
@ -3025,7 +3025,7 @@ var mspHelper = (function (gui) {
}; };
function endMission() { function endMission() {
GUI.log('Send time: ' + (new Date().getTime() - startTime) + 'ms'); GUI.log(chrome.i18n.getMessage('SendTime') + (new Date().getTime() - startTime) + 'ms');
MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, callback); MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, callback);
} }
}; };

View file

@ -81,7 +81,7 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
self.initialize(); self.initialize();
} else { } else {
GUI.log('<span style="color: red">Failed</span> to open serial port'); GUI.log(chrome.i18n.getMessage('failedToOpenSerialPort'));
} }
}); });
} else { } else {
@ -108,7 +108,7 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
retries++; retries++;
if (retries > maxRetries) { if (retries > maxRetries) {
clearInterval(interval); clearInterval(interval);
GUI.log('<span style="color: red">Failed</span> to flash ' + port); GUI.log(chrome.i18n.getMessage('failedToFlash') + port);
} }
} }
// Check for DFU devices // Check for DFU devices
@ -145,7 +145,7 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
}); });
}); });
} else { } else {
GUI.log('<span style="color: red">Failed</span> to open serial port'); GUI.log(chrome.i18n.getMessage('failedToOpenSerialPort'));
} }
}); });
} }

View file

@ -60,6 +60,10 @@ a.disabled {
transition: none; transition: none;
} }
.inputRequiredWarning {
border: 3px solid #d40000 !important;
}
.cf_doc_version_bt a { .cf_doc_version_bt a {
padding: 1px 9px 1px 9px; padding: 1px 9px 1px 9px;
margin-top: -45px; margin-top: -45px;

View file

@ -23,11 +23,11 @@
<div class="headerbar"> <div class="headerbar">
<div id="logo"> <div id="logo">
<div class="logo_text"> <div class="logo_text">
CONFIGURATOR <span i18n="mainLogoText"></span>
<div class="version"></div> <div class="version"></div>
</div> </div>
<div class="logo_text_firmware"> <div class="logo_text_firmware">
FC FIRMWARE <span i18n="mainLogoTextFirmware"></span>
<div class="firmware_version"></div> <div class="firmware_version"></div>
</div> </div>
</div> </div>
@ -43,13 +43,13 @@
<div id="portsinput"> <div id="portsinput">
<div class="portsinput__row"> <div class="portsinput__row">
<div id="port-override-option" class="portsinput__top-element portsinput__top-element--port-override"> <div id="port-override-option" class="portsinput__top-element portsinput__top-element--port-override">
<label id="port-override-label" for="port-override">Port: </label> <label id="port-override-label" for="port-override" i18n="mainPortOverrideLabel"></label>
<input id="port-override" type="text" value="/dev/rfcomm0" /> <input id="port-override" type="text" value="/dev/rfcomm0" />
</div> </div>
<div class="dropdown dropdown-dark portsinput__top-element"> <div class="dropdown dropdown-dark portsinput__top-element">
<!--suppress HtmlFormInputWithoutLabel --> <!--suppress HtmlFormInputWithoutLabel -->
<select class="dropdown-select" id="port" title="Port"> <select class="dropdown-select" id="port" title="Port">
<option value="manual">Manual</option> <option value="manual" i18n="mainManual"></option>
<!-- port list gets generated here --> <!-- port list gets generated here -->
</select> </select>
</div> </div>
@ -81,10 +81,10 @@
</div> </div>
<div class="header-wrapper"> <div class="header-wrapper">
<div id="dataflash_wrapper_global"> <div id="dataflash_wrapper_global">
<div class="noflash_global" align="center">No dataflash <br>chip found</div> <div class="noflash_global" align="center" i18n="sensorDataFlashNotFound"></div>
<ul class="dataflash-contents_global"> <ul class="dataflash-contents_global">
<li class="dataflash-free_global"> <li class="dataflash-free_global">
<div class="legend">Dataflash: free space</div> <div class="legend" i18n="sensorDataFlashFreeSpace"></div>
</li> </li>
</ul> </ul>
<div id="profile_change"> <div id="profile_change">
@ -92,9 +92,9 @@
<form name="profile-change" id="profile-change"> <form name="profile-change" id="profile-change">
<!--suppress HtmlFormInputWithoutLabel --> <!--suppress HtmlFormInputWithoutLabel -->
<select class="dropdown-select" id="profilechange"> <select class="dropdown-select" id="profilechange">
<option value="0">Profile 1</option> <option value="0" i18n="sensorProfile1"></option>
<option value="1">Profile 2</option> <option value="1" i18n="sensorProfile2"></option>
<option value="2">Profile 3</option> <option value="2" i18n="sensorProfile3"></option>
</select> </select>
</form> </form>
</div> </div>
@ -104,9 +104,9 @@
<form name="battery-profile-change" id="battery-profile-change"> <form name="battery-profile-change" id="battery-profile-change">
<!--suppress HtmlFormInputWithoutLabel --> <!--suppress HtmlFormInputWithoutLabel -->
<select class="dropdown-select" id="batteryprofilechange"> <select class="dropdown-select" id="batteryprofilechange">
<option value="0">Battery profile 1</option> <option value="0" i18n="sensorBatteryProfile1"></option>
<option value="1">Battery profile 2</option> <option value="1" i18n="sensorBatteryProfile2"></option>
<option value="2">Battery profile 3</option> <option value="2" i18n="sensorBatteryProfile3"></option>
</select> </select>
</form> </form>
</div> </div>
@ -114,29 +114,30 @@
</div> </div>
<div id="sensor-status" class="sensor_state mode-connected"> <div id="sensor-status" class="sensor_state mode-connected">
<ul> <ul>
<li class="gyro" title="Gyroscope"> <li class="gyro" i18n_title="sensorStatusGyro">
<div class="gyroicon">Gyro</div> <div class="gyroicon" i18n="sensorStatusGyroShort"></div>
</li> </li>
<li class="accel" title="Accelerometer"> <li class="accel" i18n_title="sensorStatusAccel">
<div class="accicon">Accel</div> <div class="accicon" i18n="sensorStatusAccelShort"></div>
</li> </li>
<li class="mag" title="Magnetometer"> <li class="mag" i18n_title="sensorStatusMag">
<div class="magicon">Mag</div> <div class="magicon" i18n="sensorStatusMagShort"></div>
</li> </li>
<li class="baro" title="Barometer"> <li class="baro" i18n_title="sensorStatusBaro">
<div class="baroicon">Baro</div> <div class="baroicon" i18n="sensorStatusBaroShort"></div>
</li> </li>
<li class="gps" title="GPS"> <li class="gps" i18n_title="sensorStatusGPS">
<div class="gpsicon">GPS</div> <div class="gpsicon" i18n="sensorStatusGPSShort"></div>
</li> </li>
<li class="opflow" title="Optical flow">
<div class="opflowicon">Flow</div> <li class="opflow" i18n_title="sensorOpticalFlow">
<div class="opflowicon" i18n="sensorOpticalFlowShort"></div>
</li> </li>
<li class="sonar" title="Sonar / Range finder"> <li class="sonar" i18n_title="sensorStatusSonar">
<div class="sonaricon">Sonar</div> <div class="sonaricon" i18n="sensorStatusSonarShort"></div>
</li> </li>
<li class="airspeed" title="Airspeed"> <li class="airspeed" i18n_title="sensorAirspeed">
<div class="airspeedicon">Speed</div> <div class="airspeedicon" i18n="sensorAirspeedShort"></div>
</li> </li>
</ul> </ul>
</div> </div>
@ -146,7 +147,7 @@
<div class="battery-status"></div> <div class="battery-status"></div>
</div> </div>
</div> </div>
<div class="battery-legend">Battery voltage</div> <div class="battery-legend" i18n="sensorBatteryVoltage"></div>
<div class="bottomStatusIcons"> <div class="bottomStatusIcons">
<div class="armedicon cf_tip" data-i18n_title="mainHelpArmed"></div> <div class="armedicon cf_tip" data-i18n_title="mainHelpArmed"></div>
<div class="failsafeicon cf_tip" data-i18n_title="mainHelpFailsafe"></div> <div class="failsafeicon cf_tip" data-i18n_title="mainHelpFailsafe"></div>
@ -158,7 +159,7 @@
<div class="clear-both"></div> <div class="clear-both"></div>
<div id="log"> <div id="log">
<div class="logswitch"> <div class="logswitch">
<a href="#" id="showlog">Show Log</a> <a href="#" id="showlog" i18n="mainShowLog"></a>
</div> </div>
<div id="scrollicon"></div> <div id="scrollicon"></div>
<div class="wrapper"></div> <div class="wrapper"></div>
@ -294,7 +295,7 @@
</div> </div>
<div id="cache"> <div id="cache">
<div class="data-loading"> <div class="data-loading">
<p>Waiting for data ...</p> <p i18n="waitingForData"></p>
</div> </div>
</div> </div>
</div> </div>

View file

@ -85,9 +85,9 @@ $(document).ready(function () {
} }
// alternative - window.navigator.appVersion.match(/Chrome\/([0-9.]*)/)[1]; // alternative - window.navigator.appVersion.match(/Chrome\/([0-9.]*)/)[1];
GUI.log('Running - OS: <strong>' + GUI.operating_system + '</strong>, ' + GUI.log(chrome.i18n.getMessage('getRunningOS') + GUI.operating_system + '</strong>, ' +
'Chrome: <strong>' + window.navigator.appVersion.replace(/.*Chrome\/([0-9.]*).*/, "$1") + '</strong>, ' + 'Chrome: <strong>' + window.navigator.appVersion.replace(/.*Chrome\/([0-9.]*).*/, "$1") + '</strong>, ' +
'Configurator: <strong>' + chrome.runtime.getManifest().version + '</strong>'); chrome.i18n.getMessage('getConfiguratorVersion') + chrome.runtime.getManifest().version + '</strong>');
$('#status-bar .version').text(chrome.runtime.getManifest().version); $('#status-bar .version').text(chrome.runtime.getManifest().version);
$('#logo .version').text(chrome.runtime.getManifest().version); $('#logo .version').text(chrome.runtime.getManifest().version);
@ -540,7 +540,7 @@ $(document).ready(function () {
state = true; state = true;
} }
$(this).text(state ? 'Hide Log' : 'Show Log'); $(this).html(state ? chrome.i18n.getMessage("mainHideLog") : chrome.i18n.getMessage("mainShowLog"));
$(this).data('state', state); $(this).data('state', state);
}); });

View file

@ -1,7 +1,7 @@
{ {
"manifest_version": 2, "manifest_version": 2,
"minimum_chrome_version": "38", "minimum_chrome_version": "38",
"version": "6.1.0", "version": "7.0.0",
"author": "Several", "author": "Several",
"name": "INAV - Configurator", "name": "INAV - Configurator",
"short_name": "INAV", "short_name": "INAV",

View file

@ -1,7 +1,7 @@
{ {
"name": "inav-configurator", "name": "inav-configurator",
"description": "INAV Configurator", "description": "INAV Configurator",
"version": "6.1.0", "version": "7.0.0",
"main": "main.html", "main": "main.html",
"default_locale": "en", "default_locale": "en",
"scripts": { "scripts": {

View file

@ -1,6 +1,6 @@
<div class="tab-configuration tab-advanced-tuning toolbar_fixed_bottom"> <div class="tab-configuration tab-advanced-tuning toolbar_fixed_bottom">
<div class="content_wrapper"> <div class="content_wrapper">
<div class="tab_title"><span data-i18n="tabAdvancedTuningTitle">Advanced Tuning</span><span class="airplaneTuningTitle">: Fixed Wing</span><span class="multirotorTuningTitle">: Multirotors</span></div> <div class="tab_title"><span data-i18n="tabAdvancedTuningTitle"></span><span class="airplaneTuningTitle" data-i18n="tabAdvancedTuningAirplaneTuningTitle"></span><span class="multirotorTuningTitle" data-i18n="tabAdvancedTuningMultirotorTuningTitle"></span></div>
<!-- Airplane Advanced Tuning--> <!-- Airplane Advanced Tuning-->
<div class="airplaneTuning"> <div class="airplaneTuning">
@ -96,7 +96,8 @@
</div> </div>
</div> </div>
</div> <!-- left wrapper --> </div>
<!-- left wrapper -->
<div class="rightWrapper"> <div class="rightWrapper">
<div class="config-section gui_box grey"> <div class="config-section gui_box grey">
@ -204,10 +205,12 @@
</div> </div>
</div> </div>
</div> <!-- right wrapper --> </div>
<!-- right wrapper -->
<div class="clear-both"></div> <div class="clear-both"></div>
</div> <!-- Airplane Advanced Tuning --> </div>
<!-- Airplane Advanced Tuning -->
<!-- Multirotor Advanced tuning --> <!-- Multirotor Advanced tuning -->
<div class="multirotorTuning"> <div class="multirotorTuning">
@ -255,7 +258,8 @@
</div> </div>
</div> </div>
</div> </div>
</div> <!-- left wrapper --> </div>
<!-- left wrapper -->
<div class="rightWrapper"> <div class="rightWrapper">
<div class="config-section gui_box grey"> <div class="config-section gui_box grey">
@ -295,7 +299,7 @@
</div> </div>
<div class="number"> <div class="number">
<input id="brakingBoostSpeedThreshold" type="number" data-unit="cms"data-setting="nav_mc_braking_boost_speed_threshold" data-setting-multiplier="1" step="1" min="100" max="1000" /> <input id="brakingBoostSpeedThreshold" type="number" data-unit="cms" data-setting="nav_mc_braking_boost_speed_threshold" data-setting-multiplier="1" step="1" min="100" max="1000" />
<label for="brakingBoostSpeedThreshold"><span data-i18n="brakingBoostSpeedThreshold"></span></label> <label for="brakingBoostSpeedThreshold"><span data-i18n="brakingBoostSpeedThreshold"></span></label>
<div for="brakingBoostSpeedThreshold" class="helpicon cf_tip" data-i18n_title="brakingBoostSpeedThresholdTip"></div> <div for="brakingBoostSpeedThreshold" class="helpicon cf_tip" data-i18n_title="brakingBoostSpeedThresholdTip"></div>
</div> </div>
@ -314,10 +318,12 @@
</div> </div>
</div> </div>
</div> <!-- right wrapper --> </div>
<!-- right wrapper -->
<div class="clear-both"></div> <div class="clear-both"></div>
</div> <!-- Multirotor Advanced Tuning --> </div>
<!-- Multirotor Advanced Tuning -->
<!-- Common tuning --> <!-- Common tuning -->
<div class="tab_subtitle" data-i18n="tabAdvancedTuningGenericTitle">Advanced Tuning: Generic settings</div> <div class="tab_subtitle" data-i18n="tabAdvancedTuningGenericTitle">Advanced Tuning: Generic settings</div>
@ -365,6 +371,18 @@
<div for="rthTwoStageAlt" class="helpicon cf_tip" data-i18n_title="rthTwoStageAltHelp"></div> <div for="rthTwoStageAlt" class="helpicon cf_tip" data-i18n_title="rthTwoStageAltHelp"></div>
</div> </div>
<div class="checkbox">
<input type="checkbox" class="toggle update_preview" id="rthUseLinearDescent" data-setting="nav_rth_use_linear_descent" data-live="true" />
<label for="rthUseLinearDescent"><span data-i18n="rthUseLinearDescent"></span></label>
<div for="rthUseLinearDescent" class="helpicon cf_tip" data-i18n_title="rthUseLinearDescentHelp"></div>
</div>
<div class="number">
<input type="number" id="rthLinearDescentStart" data-unit="m" data-setting="nav_rth_linear_descent_start_distance" data-setting-multiplier="1" step="1" min="0" max="10000" />
<label for="rthLinearDescentStart"><span data-i18n="rthLinearDescentStart"></span></label>
<div for="rthLinearDescentStart" class="helpicon cf_tip" data-i18n_title="rthLinearDescentStartHelp"></div>
</div>
<div class="checkbox"> <div class="checkbox">
<input type="checkbox" class="toggle update_preview" id="rthClimbIgnoreEmergency" data-setting="nav_rth_climb_ignore_emerg" data-live="true" /> <input type="checkbox" class="toggle update_preview" id="rthClimbIgnoreEmergency" data-setting="nav_rth_climb_ignore_emerg" data-live="true" />
<label for="rthClimbIgnoreEmergency"><span data-i18n="rthClimbIgnoreEmergency"></span></label> <label for="rthClimbIgnoreEmergency"><span data-i18n="rthClimbIgnoreEmergency"></span></label>
@ -427,7 +445,7 @@
<label for="fsMissionDelay"><span data-i18n="fsMissionDelay"></span></label> <label for="fsMissionDelay"><span data-i18n="fsMissionDelay"></span></label>
<div for="fsMissionDelay" class="helpicon cf_tip" data-i18n_title="fsMissionDelayHelp"></div> <div for="fsMissionDelay" class="helpicon cf_tip" data-i18n_title="fsMissionDelayHelp"></div>
</div> </div>
<!-- <!--
<div class="checkbox"> <div class="checkbox">
<input type="checkbox" class="toggle update_preview" id="drNavigation" data-setting="inav_allow_dead_reckoning" data-live="true" /> <input type="checkbox" class="toggle update_preview" id="drNavigation" data-setting="inav_allow_dead_reckoning" data-live="true" />
<label for="drNavigation"><span data-i18n="drNavigation"></span></label> <label for="drNavigation"><span data-i18n="drNavigation"></span></label>
@ -437,7 +455,8 @@
</div> </div>
</div> </div>
</div> <!-- Left wrapper --> </div>
<!-- Left wrapper -->
<div class="rightWrapper"> <div class="rightWrapper">
@ -561,9 +580,11 @@
</div> </div>
</div> </div>
</div> <!-- Right wrapper --> </div>
<!-- Right wrapper -->
</div> <!-- Common tuning --> </div>
<!-- Common tuning -->
<div class="clear-both"></div> <div class="clear-both"></div>

View file

@ -38,6 +38,27 @@ TABS.advanced_tuning.initialize = function (callback) {
localize(); localize();
// Set up required field warnings
$('#launchIdleThr').keyup(function() {
TABS.advanced_tuning.checkRequirements_IdleThrottle();
});
$('#launchIdleDelay').keyup(function() {
TABS.advanced_tuning.checkRequirements_IdleThrottle();
});
$('#rthHomeAltitude').keyup(function() {
TABS.advanced_tuning.checkRequirements_LinearDescent();
});
$('#rthUseLinearDescent').change(function() {
TABS.advanced_tuning.checkRequirements_LinearDescent();
});
// Preload required field warnings
TABS.advanced_tuning.checkRequirements_IdleThrottle();
TABS.advanced_tuning.checkRequirements_LinearDescent();
$('a.save').click(function () { $('a.save').click(function () {
Settings.saveInputs().then(function () { Settings.saveInputs().then(function () {
var self = this; var self = this;
@ -68,8 +89,28 @@ TABS.advanced_tuning.initialize = function (callback) {
GUI.log(chrome.i18n.getMessage('deviceRebooting')); GUI.log(chrome.i18n.getMessage('deviceRebooting'));
GUI.handleReconnect($('.tab_advanced_tuning a')); GUI.handleReconnect($('.tab_advanced_tuning a'));
} }
};
$incLD = 0;
TABS.advanced_tuning.checkRequirements_IdleThrottle = function() {
let idleThrottle = $('#launchIdleThr');
if ($('#launchIdleDelay').val() > 0 && (idleThrottle.val() == "" || idleThrottle.val() < "1150")) {
idleThrottle.addClass('inputRequiredWarning');
} else {
idleThrottle.removeClass('inputRequiredWarning');
}
};
TABS.advanced_tuning.checkRequirements_LinearDescent = function() {
let rthHomeAlt = $('#rthHomeAltitude');
let minRthHomeAlt = 1000.0 / rthHomeAlt.data('setting-multiplier'); // 10 metres minimum recommended for safety.
if ($('#rthUseLinearDescent').is(":checked") && (rthHomeAlt.val() == "" || parseFloat(rthHomeAlt.val()) < minRthHomeAlt)) {
rthHomeAlt.addClass('inputRequiredWarning');
} else {
rthHomeAlt.removeClass('inputRequiredWarning');
}
}; };
TABS.advanced_tuning.cleanup = function (callback) { TABS.advanced_tuning.cleanup = function (callback) {

View file

@ -23,7 +23,7 @@
</div> </div>
</div> </div>
<div class="acroEnabled"> <div class="acroEnabled">
ACRO <span i18n="auxiliaryAcroEnabled"></span>
</div> </div>
</div> </div>
<div id="tab-auxiliary-templates"> <div id="tab-auxiliary-templates">
@ -63,7 +63,11 @@
</div> </div>
<table> <table>
<tr class="modeSection"> <tr class="modeSection">
<td colspan="2"><div class="modeSectionArea"><p class="modeSectionName"></p></div></td> <td colspan="2">
<div class="modeSectionArea">
<p class="modeSectionName"></p>
</div>
</td>
</tr> </tr>
</table> </table>
</div> </div>

View file

@ -42,7 +42,7 @@ TABS.auxiliary.initialize = function (callback) {
modeSections["Flight Modes"] = ["ANGLE", "HORIZON", "MANUAL"]; modeSections["Flight Modes"] = ["ANGLE", "HORIZON", "MANUAL"];
modeSections["Navigation Modes"] = ["NAV COURSE HOLD", "NAV CRUISE", "NAV POSHOLD", "NAV RTH", "NAV WP", "GCS NAV"]; modeSections["Navigation Modes"] = ["NAV COURSE HOLD", "NAV CRUISE", "NAV POSHOLD", "NAV RTH", "NAV WP", "GCS NAV"];
modeSections["Flight Mode Modifiers"] = ["NAV ALTHOLD", "HEADING HOLD", "AIR MODE", "SOARING", "SURFACE", "TURN ASSIST"]; modeSections["Flight Mode Modifiers"] = ["NAV ALTHOLD", "HEADING HOLD", "AIR MODE", "SOARING", "SURFACE", "TURN ASSIST"];
modeSections["Fixed Wing"] = ["AUTO TUNE", "SERVO AUTOTRIM", "AUTO LEVEL", "NAV LAUNCH", "LOITER CHANGE", "FLAPERON"]; modeSections["Fixed Wing"] = ["AUTO TUNE", "SERVO AUTOTRIM", "AUTO LEVEL TRIM", "NAV LAUNCH", "LOITER CHANGE", "FLAPERON"];
modeSections["Multi-rotor"] = ["FPV ANGLE MIX", "TURTLE", "MC BRAKING", "HEADFREE", "HEADADJ"]; modeSections["Multi-rotor"] = ["FPV ANGLE MIX", "TURTLE", "MC BRAKING", "HEADFREE", "HEADADJ"];
modeSections["OSD Modes"] = ["OSD OFF", "OSD ALT 1", "OSD ALT 2", "OSD ALT 3"]; modeSections["OSD Modes"] = ["OSD OFF", "OSD ALT 1", "OSD ALT 2", "OSD ALT 3"];
modeSections["FPV Camera Modes"] = ["CAMSTAB", "CAMERA CONTROL 1", "CAMERA CONTROL 2", "CAMERA CONTROL 3"]; modeSections["FPV Camera Modes"] = ["CAMSTAB", "CAMERA CONTROL 1", "CAMERA CONTROL 2", "CAMERA CONTROL 3"];

View file

@ -23,27 +23,27 @@
</div> </div>
</div> </div>
<div data-step="1" class="tile step1 finished"> <div data-step="1" class="tile step1 finished">
<div class="steptitle">Step 1</div> <div class="steptitle" data-i18n="stepTitle1"></div>
<div class="indicator"></div> <div class="indicator"></div>
</div> </div>
<div data-step="2" class="tile step2 active"> <div data-step="2" class="tile step2 active">
<div class="steptitle">Step 2</div> <div class="steptitle" data-i18n="stepTitle2"></div>
<div class="indicator"></div> <div class="indicator"></div>
</div> </div>
<div data-step="3" class="tile step3"> <div data-step="3" class="tile step3">
<div class="steptitle">Step 3</div> <div class="steptitle" data-i18n="stepTitle3"></div>
<div class="indicator"></div> <div class="indicator"></div>
</div> </div>
<div data-step="4" class="tile step4"> <div data-step="4" class="tile step4">
<div class="steptitle">Step 4</div> <div class="steptitle" data-i18n="stepTitle4"></div>
<div class="indicator"></div> <div class="indicator"></div>
</div> </div>
<div data-step="5" class="tile step5"> <div data-step="5" class="tile step5">
<div class="steptitle">Step 5</div> <div class="steptitle" data-i18n="stepTitle5"></div>
<div class="indicator"></div> <div class="indicator"></div>
</div> </div>
<div data-step="6" class="tile step6"> <div data-step="6" class="tile step6">
<div class="steptitle">Step 6</div> <div class="steptitle" data-i18n="stepTitle6"></div>
<div class="indicator"></div> <div class="indicator"></div>
</div> </div>
<div class="gui_box grey" id="accPosAll"> <div class="gui_box grey" id="accPosAll">
@ -98,27 +98,27 @@
</div> </div>
<table id="mag-calibrated-data" class="cf_table"> <table id="mag-calibrated-data" class="cf_table">
<tr> <tr>
<td><label for="MagX"><span>Zero X</span></label></td> <td><label for="MagX" data-i18n="MagXText"><span></span></label></td>
<td><input readonly disabled type="number" name="MagX" min="-32768" max="32767"></td> <td><input readonly disabled type="number" name="MagX" min="-32768" max="32767"></td>
</tr> </tr>
<tr> <tr>
<td><label for="MagY"><span>Zero Y</span></label></td> <td><label for="MagY" data-i18n="MagYText"><span></span></label></td>
<td><input readonly disabled type="number" name="MagY" min="-32768" max="32767"></td> <td><input readonly disabled type="number" name="MagY" min="-32768" max="32767"></td>
</tr> </tr>
<tr> <tr>
<td><label for="MagZ"><span>Zero Z</span></label></td> <td><label for="MagZ" data-i18n="MagZText"><span></span></label></td>
<td><input readonly disabled type="number" name="MagZ" min="-32768" max="32767"></td> <td><input readonly disabled type="number" name="MagZ" min="-32768" max="32767"></td>
</tr> </tr>
<tr> <tr>
<td><label for="MagGainX"><span>Gain X</span></label></td> <td><label for="MagGainX" data-i18n="MagGainXText"><span></span></label></td>
<td><input readonly disabled type="number" name="MagGainX" min="-32768" max="32767"></td> <td><input readonly disabled type="number" name="MagGainX" min="-32768" max="32767"></td>
</tr> </tr>
<tr> <tr>
<td><label for="MagGainY"><span>Gain Y</span></label></td> <td><label for="MagGainY" data-i18n="MagGainYText"><span></span></label></td>
<td><input readonly disabled type="number" name="MagGainY" min="-32768" max="32767"></td> <td><input readonly disabled type="number" name="MagGainY" min="-32768" max="32767"></td>
</tr> </tr>
<tr> <tr>
<td><label for="MagGainZ"><span>Gain Z</span></label></td> <td><label for="MagGainZ" data-i18n="MagGainZText"><span></span></label></td>
<td><input readonly disabled type="number" name="MagGainZ" min="-32768" max="32767"></td> <td><input readonly disabled type="number" name="MagGainZ" min="-32768" max="32767"></td>
</tr> </tr>
</table> </table>
@ -137,7 +137,7 @@
</div> </div>
<table id="opflow-calibrated-data" class="cf_table"> <table id="opflow-calibrated-data" class="cf_table">
<tr> <tr>
<td><label for="OpflowScale"><span>Scale</span></label></td> <td><label for="OpflowScale"><span data-i18n="OpflowScaleText"></span></label></td>
<td><input type="number" name="OpflowScale" min="0" max="10000"></td> <td><input type="number" name="OpflowScale" min="0" max="10000"></td>
</tr> </tr>
</table> </table>

View file

@ -11,7 +11,12 @@
<div class="wrapper"></div> <div class="wrapper"></div>
</div> </div>
</div> </div>
<div style="display:flex;align-items:center;">
<textarea name="commands" i18n_placeholder="cliInputPlaceholder" rows="1" cols="0"></textarea> <textarea name="commands" i18n_placeholder="cliInputPlaceholder" rows="1" cols="0"></textarea>
<a class="helpiconLink" style="margin-left:5px;margin-right:5px;" href="https://github.com/iNavFlight/inav/blob/master/docs/Cli.md" target="_blank">
<div class="helpicon cf_tip" style="float:none;" data-i18n_title="cliCommandsHelp"></div>
</a>
</div>
</div> </div>
<div class="content_toolbar"> <div class="content_toolbar">
<div class="btn save_btn" style="float: left; padding-left: 15px"> <div class="btn save_btn" style="float: left; padding-left: 15px">
@ -23,8 +28,9 @@
<a class="cliDocsBtn" href="#" i18n="cliDocsBtn" target="_blank"></a> <a class="cliDocsBtn" href="#" i18n="cliDocsBtn" target="_blank"></a>
<a class="save" href="#" i18n="cliSaveToFileBtn"></a> <a class="save" href="#" i18n="cliSaveToFileBtn"></a>
<a class="load" href="#" i18n="cliLoadFromFileBtn"></a> <a class="load" href="#" i18n="cliLoadFromFileBtn"></a>
<a class="clear" href="#" i18n="cliClearOutputHistoryBtn"></a>
<a class="copy" href="#" i18n="cliCopyToClipboardBtn"></a> <a class="copy" href="#" i18n="cliCopyToClipboardBtn"></a>
<a class="clear" href="#" i18n="cliClearOutputHistoryBtn"></a>
<a class="diffall" href="#" i18n="cliDiffAllBtn"></a>
</div> </div>
</div> </div>

View file

@ -172,10 +172,10 @@ TABS.cli.initialize = function (callback) {
fs.writeFile(result, self.outputHistory, (err) => { fs.writeFile(result, self.outputHistory, (err) => {
if (err) { if (err) {
GUI.log('<span style="color: red">Error writing file</span>'); GUI.log(chrome.i18n.getMessage('ErrorWritingFile'));
return console.error(err); return console.error(err);
} }
GUI.log('File saved'); GUI.log(chrome.i18n.getMessage('FileSaved'));
}); });
}); });
@ -193,6 +193,12 @@ TABS.cli.initialize = function (callback) {
self.send(getCliCommand('msc\n', TABS.cli.cliBuffer)); self.send(getCliCommand('msc\n', TABS.cli.cliBuffer));
}); });
$('.tab-cli .diffall').click(function() {
self.outputHistory = "";
$('.tab-cli .window .wrapper').empty();
self.send(getCliCommand('diff all\n', TABS.cli.cliBuffer));
});
$('.tab-cli .clear').click(function() { $('.tab-cli .clear').click(function() {
self.outputHistory = ""; self.outputHistory = "";
$('.tab-cli .window .wrapper').empty(); $('.tab-cli .window .wrapper').empty();
@ -244,7 +250,7 @@ TABS.cli.initialize = function (callback) {
fs.readFile(result, (err, data) => { fs.readFile(result, (err, data) => {
if (err) { if (err) {
GUI.log('<span style="color: red">Error reading file</span>'); GUI.log(chrome.i18n.getMessage('ErrorReadingFile'));
return console.error(err); return console.error(err);
} }
@ -278,7 +284,7 @@ TABS.cli.initialize = function (callback) {
var out_string = textarea.val(); var out_string = textarea.val();
self.history.add(out_string.trim()); self.history.add(out_string.trim());
if (out_string.trim().toLowerCase() == "cls") { if (out_string.trim().toLowerCase() == "cls" || out_string.trim().toLowerCase() == "clear") {
self.outputHistory = ""; self.outputHistory = "";
$('.tab-cli .window .wrapper').empty(); $('.tab-cli .window .wrapper').empty();
} else { } else {

View file

@ -1,6 +1,6 @@
<div class="tab-failsafe toolbar_fixed_bottom"> <div class="tab-failsafe toolbar_fixed_bottom">
<div class="content_wrapper"> <div class="content_wrapper">
<div class="tab_title">Failsafe</div> <div class="tab_title" data-i18n="tabFailsafe">Failsafe</div>
<div class="gui_box grey"> <div class="gui_box grey">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title" data-i18n="failsafeStageTwoSettingsTitle"></div> <div class="spacer_box_title" data-i18n="failsafeStageTwoSettingsTitle"></div>
@ -14,7 +14,7 @@
<!-- radio buttons --> <!-- radio buttons -->
<div class="subline" data-i18n="failsafeSubTitle1"></div> <div class="subline" data-i18n="failsafeSubTitle1"></div>
<div class="radioarea pro1"> <div class="radioarea pro1">
<div class="radiobuttons"><input class="procedure" id="drop" name="group1" type="radio"/> <div class="radiobuttons"><input class="procedure" id="drop" name="group1" type="radio" />
<label for="drop" data-i18n="failsafeProcedureItemSelect2"></label> <label for="drop" data-i18n="failsafeProcedureItemSelect2"></label>
</div> </div>
</div> </div>
@ -35,18 +35,18 @@
</div> </div>
</div> </div>
<div class="radioarea pro4"> <div class="radioarea pro4">
<div class="radiobuttons"><input class="procedure" id="rth" name="group1" type="radio"/> <div class="radiobuttons"><input class="procedure" id="rth" name="group1" type="radio" />
<label for="rth" data-i18n="failsafeProcedureItemSelect3"></label> <label for="rth" data-i18n="failsafeProcedureItemSelect3"></label>
</div> </div>
</div> </div>
<div class="radioarea pro5"> <div class="radioarea pro5">
<div class="radiobuttons"><input class="procedure" id="nothing" name="group1" type="radio"/> <div class="radiobuttons"><input class="procedure" id="nothing" name="group1" type="radio" />
<label for="nothing" data-i18n="failsafeProcedureItemSelect4"></label> <label for="nothing" data-i18n="failsafeProcedureItemSelect4"></label>
</div> </div>
</div> </div>
<!-- Minimum Failsafe Distance controls --> <!-- Minimum Failsafe Distance controls -->
<div class="checkbox"> <div class="checkbox">
<div class="numberspacer" > <div class="numberspacer">
<input type="checkbox" name="failsafe_use_minimum_distance" class="toggle" id="failsafe_use_minimum_distance" /> <input type="checkbox" name="failsafe_use_minimum_distance" class="toggle" id="failsafe_use_minimum_distance" />
</div> </div>
<label for="failsafe_use_minimum_distance"><span data-i18n="failsafeUseMinimumDistanceItem"></span> <label for="failsafe_use_minimum_distance"><span data-i18n="failsafeUseMinimumDistanceItem"></span>

View file

@ -52,9 +52,9 @@ TABS.firmware_flasher.initialize = function (callback) {
$('input.show_development_releases').click(function() { $('input.show_development_releases').click(function() {
let selectedTarget = String($('select[name="board"]').val()); let selectedTarget = String($('select[name="board"]').val());
GUI.log("selected target = " + selectedTarget); GUI.log(chrome.i18n.getMessage('selectedTarget') + selectedTarget);
buildBoardOptions(); buildBoardOptions();
GUI.log("toggled RCs"); GUI.log(chrome.i18n.getMessage('toggledRCs'));
if (selectedTarget === "0") { if (selectedTarget === "0") {
TABS.firmware_flasher.getTarget(); TABS.firmware_flasher.getTarget();
} else { } else {
@ -274,7 +274,7 @@ TABS.firmware_flasher.initialize = function (callback) {
$('a.load_remote_file').click(function (evt) { $('a.load_remote_file').click(function (evt) {
if ($('select[name="firmware_version"]').val() == "0") { if ($('select[name="firmware_version"]').val() == "0") {
GUI.log("<b>No firmware selected to load</b>"); GUI.log(chrome.i18n.getMessage('noFirmwareSelectedToLoad'));
return; return;
} }
@ -402,7 +402,7 @@ TABS.firmware_flasher.initialize = function (callback) {
STM32.connect(port, baud, parsed_hex, options); STM32.connect(port, baud, parsed_hex, options);
} else { } else {
console.log('Please select valid serial port'); console.log('Please select valid serial port');
GUI.log('<span style="color: red">Please select valid serial port</span>'); GUI.log(chrome.i18n.getMessage('selectValidSerialPort'));
} }
} else { } else {
STM32DFU.connect(usbDevices, parsed_hex, options); STM32DFU.connect(usbDevices, parsed_hex, options);
@ -452,7 +452,7 @@ TABS.firmware_flasher.initialize = function (callback) {
}); });
} else { } else {
console.log('You don\'t have write permissions for this file, sorry.'); console.log('You don\'t have write permissions for this file, sorry.');
GUI.log('You don\'t have <span style="color: red">write permissions</span> for this file'); GUI.log(chrome.i18n.getMessage('writePermissionsForFile'));
} }
}); });
}); });
@ -635,14 +635,14 @@ TABS.firmware_flasher.cleanup = function (callback) {
}; };
TABS.firmware_flasher.getTarget = function() { TABS.firmware_flasher.getTarget = function() {
GUI.log("Attempting automatic target selection"); GUI.log(chrome.i18n.getMessage('automaticTargetSelect'));
var selected_baud = parseInt($('#baud').val()); var selected_baud = parseInt($('#baud').val());
var selected_port = $('#port').find('option:selected').data().isManual ? $('#port-override').val() : String($('#port').val()); var selected_port = $('#port').find('option:selected').data().isManual ? $('#port-override').val() : String($('#port').val());
if (selected_port !== 'DFU') { if (selected_port !== 'DFU') {
if (selected_port == '0') { if (selected_port == '0') {
GUI.log("Cannot prefetch target: No port"); GUI.log(chrome.i18n.getMessage('targetPrefetchFailNoPort'));
} else { } else {
console.log('Connecting to: ' + selected_port); console.log('Connecting to: ' + selected_port);
GUI.connecting_to = selected_port; GUI.connecting_to = selected_port;
@ -654,7 +654,7 @@ TABS.firmware_flasher.getTarget = function() {
} }
} }
} else { } else {
GUI.log("Cannot prefetch target: Flight Controller in DFU"); GUI.log(chrome.i18n.getMessage('targetPrefetchFailDFU'));
} }
}; };
@ -686,7 +686,7 @@ TABS.firmware_flasher.onOpen = function(openInfo) {
// disconnect after 10 seconds with error if we don't get IDENT data // disconnect after 10 seconds with error if we don't get IDENT data
helper.timeout.add('connecting', function () { helper.timeout.add('connecting', function () {
if (!CONFIGURATOR.connectionValid) { if (!CONFIGURATOR.connectionValid) {
GUI.log("Cannot prefetch target: " + chrome.i18n.getMessage('noConfigurationReceived')); GUI.log(chrome.i18n.getMessage('targetPrefetchFail') + chrome.i18n.getMessage('noConfigurationReceived'));
TABS.firmware_flasher.closeTempConnection(); TABS.firmware_flasher.closeTempConnection();
} }
@ -709,7 +709,7 @@ TABS.firmware_flasher.onOpen = function(openInfo) {
if (CONFIG.flightControllerIdentifier == 'INAV') { if (CONFIG.flightControllerIdentifier == 'INAV') {
MSP.send_message(MSPCodes.MSP_FC_VERSION, false, false, function () { MSP.send_message(MSPCodes.MSP_FC_VERSION, false, false, function () {
if (semver.lt(CONFIG.flightControllerVersion, "5.0.0")) { if (semver.lt(CONFIG.flightControllerVersion, "5.0.0")) {
GUI.log("Cannot prefetch target: INAV Firmware too old"); GUI.log(chrome.i18n.getMessage('targetPrefetchFailOld'));
TABS.firmware_flasher.closeTempConnection(); TABS.firmware_flasher.closeTempConnection();
} else { } else {
mspHelper.getCraftName(function(name) { mspHelper.getCraftName(function(name) {
@ -721,13 +721,13 @@ TABS.firmware_flasher.onOpen = function(openInfo) {
} }
}); });
} else { } else {
GUI.log("Cannot prefetch target: Non-INAV Firmware"); GUI.log(chrome.i18n.getMessage('targetPrefetchFailNonINAV'));
TABS.firmware_flasher.closeTempConnection(); TABS.firmware_flasher.closeTempConnection();
} }
}); });
}); });
} else { } else {
GUI.log("Cannot prefetch target: " + chrome.i18n.getMessage('serialPortOpenFail')); GUI.log(chrome.i18n.getMessage('targetPrefetchFail') + chrome.i18n.getMessage('serialPortOpenFail'));
return; return;
} }
}; };
@ -736,7 +736,7 @@ TABS.firmware_flasher.onValidFirmware = function() {
MSP.send_message(MSPCodes.MSP_BUILD_INFO, false, false, function () { MSP.send_message(MSPCodes.MSP_BUILD_INFO, false, false, function () {
MSP.send_message(MSPCodes.MSP_BOARD_INFO, false, false, function () { MSP.send_message(MSPCodes.MSP_BOARD_INFO, false, false, function () {
$('select[name="board"] option[value=' + CONFIG.target + ']').attr("selected", "selected"); $('select[name="board"] option[value=' + CONFIG.target + ']').attr("selected", "selected");
GUI.log("Target prefetch successful: " + CONFIG.target); GUI.log(chrome.i18n.getMessage('targetPrefetchsuccessful') + CONFIG.target);
TABS.firmware_flasher.closeTempConnection(); TABS.firmware_flasher.closeTempConnection();
$('select[name="board"]').change(); $('select[name="board"]').change();

View file

@ -14,7 +14,7 @@
<div class="content_mid"> <div class="content_mid">
<div class="column half text1"> <div class="column half text1">
<div class="wrap"> <div class="wrap">
<h2>Hardware</h2> <h2 i18n="defaultWelcomeHead"></h2>
<div i18n="defaultWelcomeText"></div> <div i18n="defaultWelcomeText"></div>
</div> </div>
</div> </div>
@ -29,7 +29,9 @@
<div class="sponsors"> <div class="sponsors">
<div class="title" i18n="defaultSponsorsHead"></div> <div class="title" i18n="defaultSponsorsHead"></div>
<ul> <ul>
<li><a href="http://www.mateksys.com" title="www.mateksys.com" target="_blank"><img src="./images/partner/mateksys.png" alt="MATEK Systems" height="35" /></a></li> <li>
<a href="http://www.mateksys.com" title="www.mateksys.com" target="_blank"><img src="./images/partner/mateksys.png" alt="MATEK Systems" height="35" /></a>
</li>
</ul> </ul>
</div> </div>
</div> </div>

View file

@ -26,19 +26,19 @@
<div class="block"></div> <div class="block"></div>
</div> </div>
<div class="colorDefineSliders"> <div class="colorDefineSliders">
<div class="">Color setup</div> <div class="" i18n="ledStripColorSetupTitle"></div>
<div class="colorDefineSliderContainer"> <div class="colorDefineSliderContainer">
<Label class="colorDefineSliderLabel">H</Label> <Label class="colorDefineSliderLabel" i18n="ledStripH"></Label>
<input class="sliderHSV" type="range" min="0" max="359" value="0"> <input class="sliderHSV" type="range" min="0" max="359" value="0">
<Label class="colorDefineSliderValue Hvalue">0</Label> <Label class="colorDefineSliderValue Hvalue">0</Label>
</div> </div>
<div class="colorDefineSliderContainer"> <div class="colorDefineSliderContainer">
<Label class="colorDefineSliderLabel">S</Label> <Label class="colorDefineSliderLabel" i18n="ledStripS"></Label>
<input class="sliderHSV" type="range" min="0" max="255" value="0"> <input class="sliderHSV" type="range" min="0" max="255" value="0">
<Label class="colorDefineSliderValue Svalue">0</Label> <Label class="colorDefineSliderValue Svalue">0</Label>
</div> </div>
<div class="colorDefineSliderContainer"> <div class="colorDefineSliderContainer">
<Label class="colorDefineSliderLabel">V</Label> <Label class="colorDefineSliderLabel" i18n="ledStripV"></Label>
<input class="sliderHSV" type="range" min="0" max="255" value="0"> <input class="sliderHSV" type="range" min="0" max="255" value="0">
<Label class="colorDefineSliderValue Vvalue">0</Label> <Label class="colorDefineSliderValue Vvalue">0</Label>
</div> </div>
@ -46,145 +46,145 @@
<div class="controls"> <div class="controls">
<div class="wires-remaining"> <div class="wires-remaining">
<div></div> <div></div>
Remaining <span i18n="ledStripRemainingText"></span>
</div> </div>
<button class="funcClear">Clear selected</button> <button class="funcClear" i18n="ledStripClearSelectedButton"></button>
<button class="funcClearAll">Clear ALL</button> <button class="funcClearAll" i18n="ledStripClearAllButton"></button>
<div class="section">LED Functions</div> <div class="section" i18n="ledStripFunctionSection"></div>
<div class="select"> <div class="select">
<span class="color_section">Function</span> <span class="color_section" i18n="ledStripFunctionTitle"></span>
<select class="functionSelect"> <select class="functionSelect">
<option value="">None</option> <option value="" i18n="ledStripFunctionNoneOption"></option>
<option value="function-c" class="">Color</option> <option value="function-c" class="" i18n="ledStripFunctionColorOption"></option>
<option value="function-f" class="">Modes &amp; Orientation</option> <option value="function-f" class="" i18n="ledStripFunctionModesOption"></option>
<option value="function-a" class="">Arm State</option> <option value="function-a" class="" i18n="ledStripFunctionArmOption"></option>
<option value="function-l" class="extra_functions20">Battery</option> <option value="function-l" class="extra_functions20" i18n="ledStripFunctionBatteryOption"></option>
<option value="function-s" class="extra_functions20">RSSI</option> <option value="function-s" class="extra_functions20" i18n="ledStripFunctionRSSIOption"></option>
<option value="function-g" class="extra_functions20">GPS</option> <option value="function-g" class="extra_functions20" i18n="ledStripFunctionGPSOption"></option>
<option value="function-r" class="">Ring</option> <option value="function-r" class="" i18n="ledStripFunctionRingOption"></option>
<option value="function-h" class="channel_info">Channel</option> <option value="function-h" class="channel_info" i18n="ledStripFunctionChannelOption"></option>
</select> </select>
</div> </div>
<div class="modifiers"> <div class="modifiers">
<span class="color_section">Color modifier</span> <span class="color_section" i18n="ledStripColorModifierTitle"></span>
<div class="checkbox"> <div class="checkbox">
<input type="checkbox" name="ThrottleHue" class="toggle function-t" /> <input type="checkbox" name="ThrottleHue" class="toggle function-t" />
<label> <span>Throttle</span></label> <label> <span i18n="ledStripThrottleText"></span></label>
</div> </div>
<div class="checkbox extra_functions20"> <div class="checkbox extra_functions20">
<input type="checkbox" name="LarsonScanner" class="toggle function-o" /> <input type="checkbox" name="LarsonScanner" class="toggle function-o" />
<label> <span>Larson scanner</span></label> <label> <span i18n="ledStripLarsonscannerText"></span></label>
</div> </div>
</div> </div>
<div class="blinkers extra_functions20"> <div class="blinkers extra_functions20">
<span class="color_section">Blink</span> <span class="color_section" i18n="ledStripBlinkTitle"></span>
<div class="checkbox blinkOverlay"> <div class="checkbox blinkOverlay">
<input type="checkbox" name="blink" class="toggle function-b" /> <input type="checkbox" name="blink" class="toggle function-b" />
<label> <span>Blink always</span></label> <label> <span i18n="ledStripBlinkAlwaysOverlay"></span></label>
</div> </div>
<div class="checkbox landingBlinkOverlay"> <div class="checkbox landingBlinkOverlay">
<input type="checkbox" name="landingBlink" class="toggle function-n" /> <input type="checkbox" name="landingBlink" class="toggle function-n" />
<label> <span>Blink on landing</span></label> <label> <span i18n="ledStripBlinkLandingOverlay"></span></label>
</div> </div>
<span class="color_section">Strobe</span> <span class="color_section" i18n="ledStripStrobeText"></span>
<div class="checkbox strobeOverlay"> <div class="checkbox strobeOverlay">
<input type="checkbox" name="strobe" class="toggle function-e" /> <input type="checkbox" name="strobe" class="toggle function-e" />
<label> <span>Enable strobe light effect</span></label> <label> <span i18n="ledStripEnableStrobeLightEffectText"></span></label>
</div> </div>
</div> </div>
<div class="overlays"> <div class="overlays">
<span class="color_section">Overlay</span> <span class="color_section" i18n="ledStripOverlayTitle"></span>
<div class="checkbox warningOverlay"> <div class="checkbox warningOverlay">
<input type="checkbox" name="Warnings" class="toggle function-w" /> <input type="checkbox" name="Warnings" class="toggle function-w" />
<label> <span>Warnings</span></label> <label> <span i18n="ledStripWarningsOverlay"></span></label>
</div> </div>
<div class="checkbox indicatorOverlay"> <div class="checkbox indicatorOverlay">
<input type="checkbox" name="Indicator" class="toggle function-i" /> <input type="checkbox" name="Indicator" class="toggle function-i" />
<label> <span>Indicator</span></label> <label> <span i18n="ledStripIndecatorOverlay"></span></label>
</div> </div>
</div> </div>
<div class="channel_info"> <div class="channel_info">
<span class="color_section">Select Channel from color list</span> <span class="color_section" i18n="ledStripSelectChannelFromColorList"></span>
</div> </div>
<div class="mode_colors"> <div class="mode_colors">
<div class="section">Mode colors</div> <div class="section" i18n="ledStripModeColorsTitle"></div>
<select class="modeSelect"> <select id="ledStripModeColorsModeSelect" class="modeSelect">
<option value="0">Orientation</option> <option value="0" i18n="ledStripModeColorsModeOrientation"></option>
<option value="1">Headfree</option> <option value="1" i18n="ledStripModeColorsModeHeadfree"></option>
<option value="2">Horizon</option> <option value="2" i18n="ledStripModeColorsModeHorizon"></option>
<option value="3">Angle</option> <option value="3" i18n="ledStripModeColorsModeAngle"></option>
<option value="4">Mag</option> <option value="4" i18n="ledStripModeColorsModeMag"></option>
<option value="5">Baro</option> <option value="5" i18n="ledStripModeColorsModeBaro"></option>
</select> </select>
<button class="mode_color-0-0 dir-n">N</button> <button class="mode_color-0-0 dir-n" i18n="ledStripDirN"></button>
<button class="mode_color-0-1 dir-e">E</button> <button class="mode_color-0-1 dir-e" i18n="ledStripDirE"></button>
<button class="mode_color-0-2 dir-s">S</button> <button class="mode_color-0-2 dir-s" i18n="ledStripDirS"></button>
<button class="mode_color-0-3 dir-w">W</button> <button class="mode_color-0-3 dir-w" i18n="ledStripDirW"></button>
<button class="mode_color-0-4 dir-u">U</button> <button class="mode_color-0-4 dir-u" i18n="ledStripDirU"></button>
<button class="mode_color-0-5 dir-d">D</button> <button class="mode_color-0-5 dir-d" i18n="ledStripDirD"></button>
</div> </div>
<div class="section">LED Orientation and Color</div> <div class="section" i18n="ledStripModesOrientationTitle"></div>
<div class="directions"> <div class="directions">
<button class="dir-n">N</button> <button class="dir-n" i18n="ledStripDirN"></button>
<button class="dir-e">E</button> <button class="dir-e" i18n="ledStripDirE"></button>
<button class="dir-s">S</button> <button class="dir-s" i18n="ledStripDirS"></button>
<button class="dir-w">W</button> <button class="dir-w" i18n="ledStripDirW"></button>
<button class="dir-u">U</button> <button class="dir-u" i18n="ledStripDirU"></button>
<button class="dir-d">D</button> <button class="dir-d" i18n="ledStripDirD"></button>
</div> </div>
<div class="colors"> <div class="colors">
<button class="color-0" title="black">0</button> <button class="color-0" i18n_title="colorBlack">0</button>
<button class="color-1" title="white">1</button> <button class="color-1" i18n_title="colorWhite">1</button>
<button class="color-2" title="red">2</button> <button class="color-2" i18n_title="colorRed">2</button>
<button class="color-3" title="orange">3</button> <button class="color-3" i18n_title="colorOrange">3</button>
<button class="color-4" title="yellow">4</button> <button class="color-4" i18n_title="colorYellow">4</button>
<button class="color-5" title="lime green">5</button> <button class="color-5" i18n_title="colorLimeGreen">5</button>
<button class="color-6" title="green">6</button> <button class="color-6" i18n_title="colorGreen">6</button>
<button class="color-7" title="mint green">7</button> <button class="color-7" i18n_title="colorMintGreen">7</button>
<button class="color-8" title="cyan">8</button> <button class="color-8" i18n_title="colorCyan">8</button>
<button class="color-9" title="light blue">9</button> <button class="color-9" i18n_title="colorLightBlue">9</button>
<button class="color-10" title="blue">10</button> <button class="color-10" i18n_title="colorBlue">10</button>
<button class="color-11" title="dark violet">11</button> <button class="color-11" i18n_title="colorDarkViolet">11</button>
<button class="color-12" title="magenta">12</button> <button class="color-12" i18n_title="colorMagenta">12</button>
<button class="color-13" title="deep pink">13</button> <button class="color-13" i18n_title="colorDeepPink">13</button>
<button class="color-14" title="black">14</button> <button class="color-14" i18n_title="colorBlack">14</button>
<button class="color-15" title="black">15</button> <button class="color-15" i18n_title="colorBlack">15</button>
</div> </div>
<div class="special_colors mode_colors"> <div class="special_colors mode_colors">
<div class="section">Special colors</div> <div class="section" i18n="ledStripModesSpecialColorsTitle"></div>
<button class="mode_color-6-0" title="green">Disarmed</button> <button class="mode_color-6-0" i18n_title="colorGreen" i18n="ledStripModeColorsModeDisarmed"></button>
<button class="mode_color-6-1" title="blue">Armed</button> <button class="mode_color-6-1" i18n_title="colorBlue" i18n="ledStripModeColorsModeArmed"></button>
<button class="mode_color-6-2" title="white">Animation</button> <button class="mode_color-6-2" i18n_title="colorWhite" i18n="ledStripModeColorsModeAnimation"></button>
<!-- button class="mode_color-6-3" title="black">Background</button --> <!-- button class="mode_color-6-3" i18n_title="colorBlack">Background</button -->
<button class="mode_color-6-4" title="black">Blink background</button> <button class="mode_color-6-4" i18n_title="colorBlack" i18n="ledStripModeColorsModeBlinkBg"></button>
<button class="mode_color-6-5" title="red">GPS: no sats</button> <button class="mode_color-6-5" i18n_title="colorRed" i18n="ledStripModeColorsModeGPSNoSats"></button>
<button class="mode_color-6-6" title="orange">GPS: no lock</button> <button class="mode_color-6-6" i18n_title="colorOrange" i18n="ledStripModeColorsModeGPSNoLock"></button>
<button class="mode_color-6-7" title="green">GPS: locked</button> <button class="mode_color-6-7" i18n_title="colorGreen" i18n="ledStripModeColorsModeGPSLocked"></button>
</div> </div>
<div class="section">LED Strip Wiring</div> <div class="section" i18n="ledStripWiring"></div>
<div class="wiringMode"> <div class="wiringMode">
<button class="funcWire w100">Wire Ordering Mode</button> <button class="funcWire w100" i18n="ledStripWiringMode"></button>
</div> </div>
<div class="wiringControls"> <div class="wiringControls">
<button class="funcWireClearSelect w50">Clear selected</button> <button class="funcWireClearSelect w50" i18n="ledStripWiringClearControl"></button>
<button class="funcWireClear w50">Clear ALL Wiring</button> <button class="funcWireClear w50" i18n="ledStripWiringClearAllControl"></button>
</div> </div>
<p>LEDs without wire ordering number will not be saved.</p> <p i18n="ledStripWiringMessage"></p>
</div> </div>
<div class="colorControls"> <div class="colorControls">

View file

@ -44,17 +44,17 @@
<tr> <tr>
<td style="width: 5%; padding-bottom: 10px;"> <td style="width: 5%; padding-bottom: 10px;">
<p class="table-title"> <p class="table-title">
Axis <span data-i18n="axisTableTitleAxis"></span>
</p> </p>
</td> </td>
<td style="width: 90%; padding-bottom: 10px;"> <td style="width: 90%; padding-bottom: 10px;">
<p class="table-title"> <p class="table-title">
Slider <span data-i18n="axisTableTitleSlider"></span>
</p> </p>
</td> </td>
<td style="width: 5%; padding-bottom: 10px;"> <td style="width: 5%; padding-bottom: 10px;">
<a class="table-title"> <a class="table-title">
Value [degree] <span data-i18n="axisTableTitleValue"></span>
</a> </a>
</td> </td>
@ -69,9 +69,7 @@
<div id="roll_slider" class="slider"></div> <div id="roll_slider" class="slider"></div>
</td> </td>
<td> <td>
<input type="number" id="alignRoll" class="tab-magnetometer" data-setting="tz_offset" <input type="number" id="alignRoll" class="tab-magnetometer" data-setting="tz_offset" data-setting-multiplier="1" step="1" min="-180" max="180" />
data-setting-multiplier="1"
step="1" min="-180" max="180"/>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -82,9 +80,7 @@
<div id="pitch_slider" class="slider"></div> <div id="pitch_slider" class="slider"></div>
</td> </td>
<td> <td>
<input type="number" id="alignPitch" class="tab-magnetometer" data-setting="tz_offset" <input type="number" id="alignPitch" class="tab-magnetometer" data-setting="tz_offset" data-setting-multiplier="1" step="1" min="-180" max="180" />
data-setting-multiplier="1"
step="1" min="-180" max="180"/>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -95,9 +91,7 @@
<div id="yaw_slider" class="slider"></div> <div id="yaw_slider" class="slider"></div>
</td> </td>
<td> <td>
<input type="number" id="alignYaw" class="tab-magnetometer" data-setting="tz_offset" <input type="number" id="alignYaw" class="tab-magnetometer" data-setting="tz_offset" data-setting-multiplier="1" step="1" min="-180" max="360" />
data-setting-multiplier="1"
step="1" min="-180" max="360"/>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -150,7 +144,9 @@
<table> <table>
<tr class="modeSection"> <tr class="modeSection">
<td colspan="2"> <td colspan="2">
<div class="modeSectionArea"><p class="modeSectionName"></p></div> <div class="modeSectionArea">
<p class="modeSectionName"></p>
</div>
</td> </td>
</tr> </tr>
</table> </table>

View file

@ -1,28 +1,28 @@
<div class="tab-mission-control"> <div class="tab-mission-control">
<div style="padding-top: 20px;padding-left: 20px; padding-right: 20px;position: relative;"> <div style="padding-top: 20px;padding-left: 20px; padding-right: 20px;position: relative;">
<div class="tab_title" data-i18n="tabMissionControl">Mission planner</div> <div class="tab_title" data-i18n="tabMissionControl"></div>
</div> </div>
<div class="content_wrapper"> <div class="content_wrapper">
<div class="cf_column fourth" id="missionControls"> <div class="cf_column fourth" id="missionControls">
<div class="spacer_right"> <div class="spacer_right">
<div id="missionPlannerAction" class="gui_box grey"> <div id="missionPlannerAction" class="gui_box grey">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionActionMenuHead">Action Menu</div> <div class="spacer_box_title" data-i18n="missionActionMenuHead"></div>
<div class="btnMenu btnMenuIcon show_btn" id="showHideActionButton"> <div class="btnMenu btnMenuIcon show_btn" id="showHideActionButton">
<a class="ic_hide" href="#" title="Hide"></a> <a class="ic_hide" href="#" i18n_title="missionTitleHide"></a>
</div> </div>
</div> </div>
<div class="spacer" id="ActionContent"> <div class="spacer" id="ActionContent">
<div class="btn save_btn"> <div class="btn save_btn">
<a id="loadFileMissionButton" class="btnicon ic_loadFromFile" href="#" title="Load Mission File"></a> <a id="loadFileMissionButton" class="btnicon ic_loadFromFile" href="#" i18n_title="missionTitleLoadMissionFile"></a>
<a id="saveFileMissionButton" class="btnicon ic_save2File" href="#" title="Save Mission File"></a> <a id="saveFileMissionButton" class="btnicon ic_save2File" href="#" i18n_title="missionTitleSaveMissionFile"></a>
</div> </div>
<div class="btn save_btn"> <div class="btn save_btn">
<a id="loadMissionButton" class="btnicon ic_loadFromFC" href="#" title="Load mission from FC"</a> <a id="loadMissionButton" class="btnicon ic_loadFromFC" href="#" i18n_title="missionTitleLoadMissionFromFC" </a>
<a id="saveMissionButton" class="btnicon ic_save2FC" href="#" title="Save mission to FC"</a> <a id="saveMissionButton" class="btnicon ic_save2FC" href="#" i18n_title="missionTitleSaveMissionToFC" </a>
<a id="loadEepromMissionButton" class="btnicon ic_loadFromEprom" href="#" title="Load Eeprom mission"></a> <a id="loadEepromMissionButton" class="btnicon ic_loadFromEprom" href="#" i18n_title="missionTitleLoadEepromMission"></a>
<a id="saveEepromMissionButton" class="btnicon ic_save2Eprom" href="#" title="Save Eeprom mission"></a> <a id="saveEepromMissionButton" class="btnicon ic_save2Eprom" href="#" i18n_title="missionTitleSaveEepromMission"></a>
</div> </div>
<hr> <hr>
<!-- <div class="btn"> <!-- <div class="btn">
@ -33,33 +33,33 @@
</div> </div>
<hr> --> <hr> -->
<div id="removeAllPoints" class="btn btn-danger" style="padding-top: 1px; display: inline-block"> <div id="removeAllPoints" class="btn btn-danger" style="padding-top: 1px; display: inline-block">
<a class="btnicon ic_removeAll" href="#" title="Remove all"></a> <a class="btnicon ic_removeAll" href="#" i18n_title="missionTitleRemoveAll"></a>
</div> </div>
</div> </div>
</div> </div>
<div id="missionPlannerTotalInfo" class="gui_box grey"> <div id="missionPlannerTotalInfo" class="gui_box grey">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionTotalInformationHead">Total information</div> <div class="spacer_box_title" data-i18n="missionTotalInformationHead"></div>
<div class="btnMenu btnMenuIcon show_btn" id="showHideInfoButton"> <div class="btnMenu btnMenuIcon show_btn" id="showHideInfoButton">
<a class="ic_hide" href="#" title="Hide"></a> <a class="ic_hide" href="#" i18n_title="missionTitleHide"></a>
</div> </div>
</div> </div>
<div class="spacer" id="InfoContent"> <div class="spacer" id="InfoContent">
<div id="infoMissionFilename" style="padding-bottom: 2px;"> <div id="infoMissionFilename" style="padding-bottom: 2px;">
<span>Filename loaded:</span> <span data-i18n="missionTotalInfoFilenameLoaded"></span>
<span id="missionFilename" style="color: #3394b5"></span> <span id="missionFilename" style="color: #3394b5"></span>
</div> </div>
<div id="infoMissionDistance" style="padding-bottom: 2px;"> <div id="infoMissionDistance" style="padding-bottom: 2px;">
<span>Distance (m):</span> <span data-i18n="missionTotalInfoDistance"></span>
<span id="missionDistance"></span> <span id="missionDistance"></span>
</div> </div>
<div id="infoAvailablePoints" style="padding-bottom: 2px;"> <div id="infoAvailablePoints" style="padding-bottom: 2px;">
<span>Available Points</span> <span data-i18n="missionTotalInfoAvailablePoints"></span>
<span id="availablePoints">0/0</span> <span id="availablePoints">0/0</span>
</div> </div>
<div id="infoMissionValid" style="padding-bottom: 2px;"> <div id="infoMissionValid" style="padding-bottom: 2px;">
<span>Mission valid</span> <span data-i18n="missionTotalInfoMissionValid"></span>
<div id="missionValid" style="display: inline-block"></div> <div id="missionValid" style="display: inline-block"></div>
</div> </div>
</div> </div>
@ -67,23 +67,23 @@
<div id="missionPlannerSettings" class="gui_box grey" style="display: none"> <div id="missionPlannerSettings" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionDefaultSettingsHead">Default settings</div> <div class="spacer_box_title" data-i18n="missionDefaultSettingsHead"></div>
<div class="btnMenu btnMenuIcon save_btn"> <div class="btnMenu btnMenuIcon save_btn">
<a id="cancelSettings" class="ic_cancel" href="#" title="Cancel"></a> <a id="cancelSettings" class="ic_cancel" href="#" i18n_title="missionTitleCancel"></a>
<a id="saveSettings" class="ic_save" href="#" title="Save"></a> <a id="saveSettings" class="ic_save" href="#" i18n_title="missionTitleSave"></a>
</div> </div>
</div> </div>
<div class="spacer"> <div class="spacer">
<div class="point"> <div class="point">
<label class="point-label" for="MPdefaultPointAlt">Alt (cm): </label> <label class="point-label" for="MPdefaultPointAlt" data-i18n="missionDefaultPointAlt"></label>
<input id="MPdefaultPointAlt" type="text" value="0" required> <input id="MPdefaultPointAlt" type="text" value="0" required>
</div> </div>
<div class="point"> <div class="point">
<label class="point-label" for="MPdefaultPointSpeed">Speed (cm/s): </label> <label class="point-label" for="MPdefaultPointSpeed" data-i18n="missionDefaultPointSpeed"></label>
<input id="MPdefaultPointSpeed" type="text" value="0" required> <input id="MPdefaultPointSpeed" type="text" value="0" required>
</div> </div>
<div class="point"> <div class="point">
<label class="point-label" for="MPdefaultSafeRangeSH">Radius (m): </label> <label class="point-label" for="MPdefaultSafeRangeSH" data-i18n="missionDefaultSafeRangeSH"></label>
<input id="MPdefaultSafeRangeSH" type="text" value="0" required> <input id="MPdefaultSafeRangeSH" type="text" value="0" required>
</div> </div>
</div> </div>
@ -91,38 +91,38 @@
<div id="missionPlannerMultiMission" class="gui_box grey" style="display: none"> <div id="missionPlannerMultiMission" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionMultiMissionHead">Multi Missions</div> <div class="spacer_box_title" data-i18n="missionMultiMissionHead"></div>
<div class="btnMenu btnMenuIcon save_btn"> <div class="btnMenu btnMenuIcon save_btn">
<div id="showHideMultimissionButton"> <div id="showHideMultimissionButton">
<a class="ic_hide" href="#" title="Hide"></a> <a class="ic_hide" href="#" i18n_title="missionTitleHide"></a>
</div> </div>
<a id="cancelMultimission" class="ic_cancel" href="#" title="Cancel"></a> <a id="cancelMultimission" class="ic_cancel" href="#" i18n_title="missionTitleCancel"></a>
</div> </div>
</div> </div>
<div class="spacer" id="multimissionContent"> <div class="spacer" id="multimissionContent">
<div class="btn btnTable btnTableIcon save_btn"> <div class="btn btnTable btnTableIcon save_btn">
<div> <div>
<span>Missions Info:</span> <span data-i18n="missionMultiMissionsInfo"></span>
<span id="multimissionInfo">None</span> <span id="multimissionInfo">None</span>
</div> </div>
<div style="margin-top: 5px"> <div style="margin-top: 5px">
<span>Active Mission:</span> <span data-i18n="missionMultiActiveMission"></span>
<span id="activeNissionIndex">1</span> <span id="activeNissionIndex">1</span>
<a class="ic_save disabled" id="setActiveMissionButton" href="#" title="Set Active"></a> <a class="ic_save disabled" id="setActiveMissionButton" href="#" i18n_title="missionTitleSetActive"></a>
</div> </div>
<hr> <hr>
<div style="display: inline-block"> <div style="display: inline-block">
<label for="multimissionOptionList">Mission No.</label> <label for="multimissionOptionList" data-i18n="missionMultiMissionNo."></label>
<select name="Number" id="multimissionOptionList" style="width: 50px"> <select name="Number" id="multimissionOptionList" style="width: 50px">
<option value="0">ALL</option> <option value="0">ALL</option>
</select> </select>
<div style="float: right"> <div style="float: right">
<span>Update All</span> <span data-i18n="missionMultiUpdateAll"></span>
<a class="ic_save disabled" id="updateMultimissionButton" href="#" title="Update All"></a> <a class="ic_save disabled" id="updateMultimissionButton" href="#" i18n_title="missionTitleUpdateAll"></a>
</div> </div>
<div style="margin-bottom: 5px; margin-top: 5px"> <div style="margin-bottom: 5px; margin-top: 5px">
<label for="addMultimissionButton">Add New Mission</label> <label for="addMultimissionButton" data-i18n="missionMultiAddNewMission"></label>
<a class="ic_add disabled" id="addMultimissionButton" href="#" title="Add"></a> <a class="ic_add disabled" id="addMultimissionButton" href="#" i18n_title="missionTitleAdd"></a>
</div> </div>
</div> </div>
</div> </div>
@ -131,12 +131,12 @@
<div id="missionPlannerHome" class="gui_box grey" style="display: none"> <div id="missionPlannerHome" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionHomeHead">Take Off home</div> <div class="spacer_box_title" data-i18n="missionHomeHead"></div>
<div class="btnMenu btnMenuIcon save_btn"> <div class="btnMenu btnMenuIcon save_btn">
<div id="showHideHomeButton"> <div id="showHideHomeButton">
<a class="ic_hide" href="#" title="Hide"></a> <a class="ic_hide" href="#" i18n_title="missionTitleHide"></a>
</div> </div>
<a id="cancelHome" class="ic_cancel" href="#" title="Cancel"></a> <a id="cancelHome" class="ic_cancel" href="#" i18n_title="missionTitleCancel"></a>
</div> </div>
</div> </div>
<div class="spacer" id="HomeContent"> <div class="spacer" id="HomeContent">
@ -152,8 +152,9 @@
</thead> </thead>
<tbody id="homeTableBody"> <tbody id="homeTableBody">
<tr> <tr>
<td><div id="viewHomePoint" class="btnTable btnTableIcon"> <td>
<a class="ic_center" data-role="home-center" href="#" title="move to center view"></a> <div id="viewHomePoint" class="btnTable btnTableIcon">
<a class="ic_center" data-role="home-center" href="#" i18n_title="missionTitleMoveToCenterView"></a>
</div> </div>
</td> </td>
<td><input type="number" class="home-lat" /></td> <td><input type="number" class="home-lat" /></td>
@ -165,21 +166,21 @@
</div> </div>
</div> </div>
<div class="point" id="elevationEarthModelclass" style="display: none"> <div class="point" id="elevationEarthModelclass" style="display: none">
<label class="spacer_box_title i18n-replaced" for="elevationEarthModel">Use Sea Level Earth DEM Model: </label> <label class="spacer_box_title" for="elevationEarthModel" data-i18n="missionLevelEarthDEMModel"></label>
<input id="elevationEarthModel" type="checkbox" value="0" class="togglemedium" required> <input id="elevationEarthModel" type="checkbox" value="0" class="togglemedium" required>
</div> </div>
</div> </div>
<div id="missionPlannerSafehome" class="gui_box grey" style="display: none"> <div id="missionPlannerSafehome" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionSafehomeHead">Safe Home manager</div> <div class="spacer_box_title" data-i18n="missionSafehomeHead"></div>
<div class="btnMenu btnMenuIcon save_btn"> <div class="btnMenu btnMenuIcon save_btn">
<div id="showHideSafehomeButton"> <div id="showHideSafehomeButton">
<a class="ic_hide" href="#" title="Hide"></a> <a class="ic_hide" href="#" i18n_title="missionTitleHide"></a>
</div> </div>
<a id="cancelSafehome" class="ic_cancel" href="#" title="Cancel"></a> <a id="cancelSafehome" class="ic_cancel" href="#" i18n_title="missionTitleCancel"></a>
<a id="saveEepromSafehomeButton" class="ic_save2Eprom" href="#" title="Save Eeprom Safehome"></a> <a id="saveEepromSafehomeButton" class="ic_save2Eprom" href="#" i18n_title="missionTitleSaveEepromSafehome"></a>
<a id="loadEepromSafehomeButton" class="ic_loadFromEprom" href="#" title="Load Eeprom Safehome"></a> <a id="loadEepromSafehomeButton" class="ic_loadFromEprom" href="#" i18n_title="missionTitleLoadEepromSafehome"></a>
</div> </div>
</div> </div>
<div class="spacer" id="SafehomeContent"> <div class="spacer" id="SafehomeContent">
@ -199,15 +200,15 @@
</table> </table>
<hr> <hr>
<div class="spacer" id="safehomeLegend"> <div class="spacer" id="safehomeLegend">
<span><b>Legend : </b></span> <span><b data-i18n="SafehomeLegend"></b></span>
<div class="legendItem"> <div class="legendItem">
<span class="fill" style="border-bottom-color:#900C3F"></span> <span class="fill" style="border-bottom-color:#900C3F"></span>
<span class="textLegend">Max distance (m):</span> <span class="textLegend" data-i18n="SafehomeMaxDistance"></span>
<span id="safeHomeMaxDistance" class="valueLegend"></span> <span id="safeHomeMaxDistance" class="valueLegend"></span>
</div> </div>
<div class="legendItem"> <div class="legendItem">
<span class="fill"></span> <span class="fill"></span>
<span class="textLegend">Safe Radius (m):</span> <span class="textLegend" data-i18n="SafehomeSafeRadius"></span>
<span id="SafeHomeSafeDistance" class="valueLegend"></span> <span id="SafeHomeSafeDistance" class="valueLegend"></span>
</div> </div>
</div> </div>
@ -217,16 +218,16 @@
<div class="gui_box grey" id="MPeditPoint" style="display: none"> <div class="gui_box grey" id="MPeditPoint" style="display: none">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="editPointHead" id="EditPointNumber">Edit point</div> <div class="spacer_box_title" data-i18n="editPointHead" id="EditPointNumber"></div>
<div class="btnMenu btnMenuIcon"> <div class="btnMenu btnMenuIcon">
<div id="showHideWPeditButton" class="save_btn"> <div id="showHideWPeditButton" class="save_btn">
<a class="ic_hide" href="#" title="Hide"></a> <a class="ic_hide" href="#" i18n_title="missionTitleHide"></a>
</div> </div>
<div id="removePoint" class="btn btnMenu-danger"> <div id="removePoint" class="btn btnMenu-danger">
<a id="removePointButton" class="ic_removeAll" href="#" title="Remove"></a> <a id="removePointButton" class="ic_removeAll" href="#" i18n_title="missionTitlRemove"></a>
</div> </div>
<div id="editMission" class="save_btn" style="display: none"> <div id="editMission" class="save_btn" style="display: none">
<a id="editMissionButton" class="ic_setup" href="#" title="Edit Mission"></a> <a id="editMissionButton" class="ic_setup" href="#" i18n_title="missionTitlEditMission"></a>
</div> </div>
</div> </div>
</div> </div>
@ -340,9 +341,9 @@
<div id="missionMap"></div> <div id="missionMap"></div>
<div id="missionPlannerElevation" class="gui_box grey" style="display: none"> <div id="missionPlannerElevation" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionDefaultElevationHead">Elevation Profile</div> <div class="spacer_box_title" data-i18n="missionDefaultElevationHead"></div>
<div class="btnMenu btnMenuIcon save_btn"> <div class="btnMenu btnMenuIcon save_btn">
<a id="cancelPlot" class="ic_cancel" href="#" title="Cancel"></a> <a id="cancelPlot" class="ic_cancel" href="#" i18n_title="missionTitleCancel"></a>
</div> </div>
</div> </div>
<div class="spacer"> <div class="spacer">

View file

@ -1797,7 +1797,7 @@ TABS.mission_control.initialize = function (callback) {
clearEditForm(); clearEditForm();
} catch (e) { } catch (e) {
console.log(e); console.log(e);
GUI.log("Previous selection was not a WAYPOINT!"); GUI.log(chrome.i18n.getMessage('notAWAYPOINT'));
} }
} }
selectedFeature = map.forEachFeatureAtPixel(evt.pixel, selectedFeature = map.forEachFeatureAtPixel(evt.pixel,
@ -2259,25 +2259,25 @@ TABS.mission_control.initialize = function (callback) {
$('#loadEepromSafehomeButton').on('click', function () { $('#loadEepromSafehomeButton').on('click', function () {
$(this).addClass('disabled'); $(this).addClass('disabled');
GUI.log('Start of getting Safehome points'); GUI.log(chrome.i18n.getMessage('startGettingSafehomePoints'));
mspHelper.loadSafehomes(); mspHelper.loadSafehomes();
setTimeout(function(){ setTimeout(function(){
renderSafehomesTable(); renderSafehomesTable();
cleanSafehomeLayers(); cleanSafehomeLayers();
renderSafehomesOnMap(); renderSafehomesOnMap();
GUI.log('End of getting Safehome points'); GUI.log(chrome.i18n.getMessage('endGettingSafehomePoints'));
$('#loadEepromSafehomeButton').removeClass('disabled'); $('#loadEepromSafehomeButton').removeClass('disabled');
}, 500); }, 500);
}); });
$('#saveEepromSafehomeButton').on('click', function () { $('#saveEepromSafehomeButton').on('click', function() {
$(this).addClass('disabled'); $(this).addClass('disabled');
GUI.log('Start of sending Safehome points'); GUI.log(chrome.i18n.getMessage('startSendingSafehomePoints'));
mspHelper.saveSafehomes(); mspHelper.saveSafehomes();
setTimeout(function(){ setTimeout(function(){
mspHelper.saveToEeprom(); mspHelper.saveToEeprom();
GUI.log('End of sending Safehome points'); GUI.log(chrome.i18n.getMessage('endSendingSafehomePoints'));
$('#saveEepromSafehomeButton').removeClass('disabled'); $('#saveEepromSafehomeButton').removeClass('disabled');
}, 500); }, 500);
}); });
@ -2431,7 +2431,7 @@ TABS.mission_control.initialize = function (callback) {
if ((markers.length || multimissionCount) && !confirm(chrome.i18n.getMessage(message))) return; if ((markers.length || multimissionCount) && !confirm(chrome.i18n.getMessage(message))) return;
removeAllWaypoints(); removeAllWaypoints();
$(this).addClass('disabled'); $(this).addClass('disabled');
GUI.log('Start get point'); GUI.log(chrome.i18n.getMessage('startGetPoint'));
getWaypointsFromFC(false); getWaypointsFromFC(false);
}); });
@ -2441,7 +2441,7 @@ TABS.mission_control.initialize = function (callback) {
return; return;
} }
$(this).addClass('disabled'); $(this).addClass('disabled');
GUI.log('Start send point'); GUI.log(chrome.i18n.getMessage('startSendPoint'));
sendWaypointsToFC(false); sendWaypointsToFC(false);
}); });
@ -2450,7 +2450,7 @@ TABS.mission_control.initialize = function (callback) {
if ((markers.length || multimissionCount) && !confirm(chrome.i18n.getMessage(message))) return; if ((markers.length || multimissionCount) && !confirm(chrome.i18n.getMessage(message))) return;
removeAllWaypoints(); removeAllWaypoints();
$(this).addClass('disabled'); $(this).addClass('disabled');
GUI.log('Start get point'); GUI.log(chrome.i18n.getMessage('startGetPoint'));
getWaypointsFromFC(true); getWaypointsFromFC(true);
}); });
@ -2460,7 +2460,7 @@ TABS.mission_control.initialize = function (callback) {
return; return;
} }
$(this).addClass('disabled'); $(this).addClass('disabled');
GUI.log('Start send point'); GUI.log(chrome.i18n.getMessage('startSendPoint'));
sendWaypointsToFC(true); sendWaypointsToFC(true);
}); });
@ -2494,17 +2494,17 @@ TABS.mission_control.initialize = function (callback) {
///////////////////////////////////////////// /////////////////////////////////////////////
function loadMissionFile(filename) { function loadMissionFile(filename) {
const fs = require('fs'); const fs = require('fs');
if (!window.xml2js) return GUI.log('<span style="color: red">Error reading file (xml2js not found)</span>'); if (!window.xml2js) return GUI.log(chrome.i18n.getMessage('errorReadingFileXml2jsNotFound'));
fs.readFile(filename, (err, data) => { fs.readFile(filename, (err, data) => {
if (err) { if (err) {
GUI.log('<span style="color: red">Error reading file</span>'); GUI.log(chrome.i18n.getMessage('errorReadingFile'));
return console.error(err); return console.error(err);
} }
window.xml2js.Parser({ 'explicitChildren': true, 'preserveChildrenOrder': true }).parseString(data, (err, result) => { window.xml2js.Parser({ 'explicitChildren': true, 'preserveChildrenOrder': true }).parseString(data, (err, result) => {
if (err) { if (err) {
GUI.log('<span style="color: red">Error parsing file</span>'); GUI.log(chrome.i18n.getMessage('errorParsingFile'));
return console.error(err); return console.error(err);
} }
@ -2636,7 +2636,7 @@ TABS.mission_control.initialize = function (callback) {
} }
updateTotalInfo(); updateTotalInfo();
let sFilename = String(filename.split('\\').pop().split('/').pop()); let sFilename = String(filename.split('\\').pop().split('/').pop());
GUI.log(sFilename+' has been loaded successfully !'); GUI.log(sFilename + chrome.i18n.getMessage('loadedSuccessfully'));
updateFilename(sFilename); updateFilename(sFilename);
}); });
}); });
@ -2644,7 +2644,7 @@ TABS.mission_control.initialize = function (callback) {
function saveMissionFile(filename) { function saveMissionFile(filename) {
const fs = require('fs'); const fs = require('fs');
if (!window.xml2js) return GUI.log('<span style="color: red">Error writing file (xml2js not found)</span>'); if (!window.xml2js) return GUI.log(chrome.i18n.getMessage('errorWritingFileXml2jsNotFound'));
var center = ol.proj.toLonLat(map.getView().getCenter()); var center = ol.proj.toLonLat(map.getView().getCenter());
var zoom = map.getView().getZoom(); var zoom = map.getView().getZoom();
@ -2693,11 +2693,11 @@ TABS.mission_control.initialize = function (callback) {
xml = xml.replace(/missionitem mission/g, 'meta mission'); xml = xml.replace(/missionitem mission/g, 'meta mission');
fs.writeFile(filename, xml, (err) => { fs.writeFile(filename, xml, (err) => {
if (err) { if (err) {
GUI.log('<span style="color: red">Error writing file</span>'); GUI.log(chrome.i18n.getMessage('ErrorWritingFile'));
return console.error(err); return console.error(err);
} }
let sFilename = String(filename.split('\\').pop().split('/').pop()); let sFilename = String(filename.split('\\').pop().split('/').pop());
GUI.log(sFilename+' has been saved successfully !'); GUI.log(sFilename + chrome.i18n.getMessage('savedSuccessfully'));
updateFilename(sFilename); updateFilename(sFilename);
}); });
} }
@ -2715,7 +2715,7 @@ TABS.mission_control.initialize = function (callback) {
function getWaypointData() { function getWaypointData() {
mspHelper.loadWaypoints(function() { mspHelper.loadWaypoints(function() {
GUI.log('End get point'); GUI.log(chrome.i18n.getMessage('endGetPoint'));
if (loadEeprom) { if (loadEeprom) {
GUI.log(chrome.i18n.getMessage('eeprom_load_ok')); GUI.log(chrome.i18n.getMessage('eeprom_load_ok'));
$('#loadEepromMissionButton').removeClass('disabled'); $('#loadEepromMissionButton').removeClass('disabled');
@ -2757,7 +2757,7 @@ TABS.mission_control.initialize = function (callback) {
MISSION_PLANNER.copy(mission); MISSION_PLANNER.copy(mission);
MISSION_PLANNER.update(false, true, true); MISSION_PLANNER.update(false, true, true);
mspHelper.saveWaypoints(function() { mspHelper.saveWaypoints(function() {
GUI.log('End send point'); GUI.log(chrome.i18n.getMessage('endSendPoint'));
if (saveEeprom) { if (saveEeprom) {
$('#saveEepromMissionButton').removeClass('disabled'); $('#saveEepromMissionButton').removeClass('disabled');
GUI.log(chrome.i18n.getMessage('eeprom_saved_ok')); GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));

View file

@ -90,7 +90,7 @@
<table id="motor-mix-table" class="mixer-table"> <table id="motor-mix-table" class="mixer-table">
<thead> <thead>
<tr> <tr>
<th style="width: 75px">Motor</th> <th style="width: 75px" data-i18n="controlAxisMotor"></th>
<th data-i18n="controlAxisThrottle"></th> <th data-i18n="controlAxisThrottle"></th>
<th data-i18n="controlAxisRoll"></th> <th data-i18n="controlAxisRoll"></th>
<th data-i18n="controlAxisPitch"></th> <th data-i18n="controlAxisPitch"></th>

View file

@ -40,12 +40,12 @@
<div class="select line blackboxDevice"> <div class="select line blackboxDevice">
<select name="blackbox_device"> <select name="blackbox_device">
</select> </select>
<span>Blackbox logging device</span> <span i18n="onboardLoggingBlackbox"></span>
</div> </div>
<div class="select line blackboxRate"> <div class="select line blackboxRate">
<select name="blackbox_rate"> <select name="blackbox_rate">
</select> </select>
<span>Portion of flight loop iterations to log (logging rate)</span> <span i18n="onboardLoggingBlackboxRate"></span>
</div> </div>
</div> </div>
</div> </div>
@ -62,8 +62,7 @@
<div class="gui_box grey"> <div class="gui_box grey">
<div class="gui_box_titlebar" align="left"> <div class="gui_box_titlebar" align="left">
<div class="spacer_box_title"> <div class="spacer_box_title" data-i18n="serialLogging">
Outboard serial logging device
</div> </div>
</div> </div>
<div class="spacer_box"> <div class="spacer_box">
@ -73,8 +72,7 @@
<div class="gui_box grey require-dataflash-supported"> <div class="gui_box grey require-dataflash-supported">
<div class="gui_box_titlebar" align="left"> <div class="gui_box_titlebar" align="left">
<div class="spacer_box_title"> <div class="spacer_box_title" data-i18n="onboardLoggingFlashLogger">
Onboard dataflash chip
</div> </div>
</div> </div>
<div class="spacer_box"> <div class="spacer_box">
@ -86,7 +84,7 @@
<div class="dataflash-confirm-erase-note" data-i18n="dataflashConfirmEraseNote"></div> <div class="dataflash-confirm-erase-note" data-i18n="dataflashConfirmEraseNote"></div>
<div class="dataflash-erase-progress"> <div class="dataflash-erase-progress">
<div class="data-loading"> <div class="data-loading">
<p>Erase in progress, please wait...</p> <p data-i18n="dataflashEraseing"></p>
</div> </div>
</div> </div>
<div class="buttons"> <div class="buttons">
@ -134,8 +132,7 @@
<div class="require-sdcard-supported"> <div class="require-sdcard-supported">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="gui_box_titlebar" align="left"> <div class="gui_box_titlebar" align="left">
<div class="spacer_box_title"> <div class="spacer_box_title" data-i18n="OnboardSDCard">
Onboard SD card
</div> </div>
</div> </div>
<div class="spacer_box"> <div class="spacer_box">

View file

@ -839,6 +839,7 @@ OSD.constants = {
{ {
name: 'THROTTLE_POSITION', name: 'THROTTLE_POSITION',
id: 9, id: 9,
preview: ' ' + FONT.symbol(SYM.THR) + ' 69' preview: ' ' + FONT.symbol(SYM.THR) + ' 69'
}, },
{ {
@ -3090,7 +3091,7 @@ TABS.osd.initialize = function (callback) {
Settings.saveInputs().then(function () { Settings.saveInputs().then(function () {
var self = this; var self = this;
MSP.promise(MSPCodes.MSP_EEPROM_WRITE); MSP.promise(MSPCodes.MSP_EEPROM_WRITE);
GUI.log('OSD settings saved'); GUI.log(chrome.i18n.getMessage('osdSettingsSaved'));
var oldText = $(this).text(); var oldText = $(this).text();
$(this).html("Saved"); $(this).html("Saved");
setTimeout(function () { setTimeout(function () {
@ -3278,7 +3279,7 @@ TABS.osd.initialize = function (callback) {
}); });
} else { } else {
console.log('You don\'t have write permissions for this file, sorry.'); console.log('You don\'t have write permissions for this file, sorry.');
GUI.log('You don\'t have <span style="color: red">write permissions</span> for this file'); GUI.log(chrome.i18n.getMessage('writePermissionsForFile'));
} }
}); });
}); });

View file

@ -123,15 +123,15 @@
<div class="half"> <div class="half">
<table class="output-stats-table"> <table class="output-stats-table">
<tr> <tr>
<th>Acc. noise RMS</th> <th i18n="outputStatsTableAcc"></th>
<td class="acc-rms"></td> <td class="acc-rms"></td>
</tr> </tr>
<tr> <tr>
<th>Current [A]</th> <th i18n="outputStatsTableCurrent"></th>
<td class="current-current"></td> <td class="current-current"></td>
</tr> </tr>
<tr> <tr>
<th>Voltage [V]</th> <th i18n="outputStatsTableVoltage"></th>
<td class="current-voltage"></td> <td class="current-voltage"></td>
</tr> </tr>
</table> </table>

View file

@ -12,12 +12,12 @@
<table class="ports spacebottom"> <table class="ports spacebottom">
<thead> <thead>
<tr> <tr>
<td>Identifier</td> <td i18n="portsIdentifier"></td>
<td>Data</td> <td i18n="portsConfiguration"></td>
<td>Telemetry</td> <td i18n="portsTelemetryOut"></td>
<td>RX</td> <td i18n="portsSerialRx"></td>
<td data-i18n="portColumnSensors"></td> <td data-i18n="portColumnSensors"></td>
<td class='peripherls-column'>Peripherals</td> <td class='peripherls-column' i18n="portsPeripherals"></td>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

View file

@ -3,8 +3,8 @@
<div class="tab_title subtab__header"> <div class="tab_title subtab__header">
<span class="subtab__header_label subtab__header_label--current" for="subtab-lc">Logic Conditions</span> <span class="subtab__header_label subtab__header_label--current" for="subtab-lc" data-i18n="LogicConditions"></span>
<span class="subtab__header_label" for="subtab-pid">PID Controllers</span> <span class="subtab__header_label" for="subtab-pid" data-i18n="PIDControllers"></span>
</div> </div>
<div class="gvar__container"> <div class="gvar__container">

View file

@ -11,20 +11,20 @@
<div class="gui_box"> <div class="gui_box">
<div class="info"> <div class="info">
<div class="checkboxes"> <div class="checkboxes">
<label><input type="checkbox" name="gyro_on" class="first" />Gyroscope</label> <label><input <label><input type="checkbox" name="gyro_on" class="first" /><span i18n="sensorsGyroSelect"></label> <label><input
type="checkbox" name="accel_on" />Accelerometer</label> <label><input type="checkbox" type="checkbox" name="accel_on" /><span i18n="sensorsAccelSelect"></span></label> <label><input type="checkbox"
name="mag_on" />Magnetometer</label> <label><input type="checkbox" name="baro_on" />Barometer</label> <label><input name="mag_on" /><span i18n="sensorsMagSelect"></span></label> <label><input type="checkbox" name="baro_on" /><span i18n="sensorsAltitudeSelect"></span></label> <label><input
type="checkbox" name="sonar_on" />Sonar</label> <label><input type="checkbox" name="airspeed_on" />Air speed</label> <label><input type="checkbox" name="sonar_on" /><span i18n="sensorsSonarSelect"></span></label> <label><input type="checkbox" name="airspeed_on" /><span i18n="sensorsAirSpeedSelect"></span></label> <label><input
type="checkbox" name="temperature_on" />Temperatures</label><label><input type="checkbox" name="debug_on" />Debug</label> type="checkbox" name="temperature_on" /><span i18n="sensorsTemperaturesSelect"></span></label><label><input type="checkbox" name="debug_on" /><span i18n="sensorsDebugSelect"></span></label>
<a class="debug-trace" href="javascript:void(0);">Open Debug Trace</a> <a class="debug-trace" href="javascript:void(0);"><span i18n="sensorsDebugTrace"></span></a>
</div> </div>
</div> </div>
</div> </div>
<div class="wrapper gyro"> <div class="wrapper gyro">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Gyroscope - deg/s</div> <div class="title" i18n="sensorsGyroscope"></div>
<dl> <dl>
<dt i18n="sensorsRefresh"></dt> <dt i18n="sensorsRefresh"></dt>
<dd class="rate"> <dd class="rate">
@ -70,7 +70,7 @@
<div class="wrapper accel"> <div class="wrapper accel">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Accelerometer - g</div> <div class="title" i18n="sensorsAccelerometer"></div>
<dl> <dl>
<dt i18n="sensorsRefresh"></dt> <dt i18n="sensorsRefresh"></dt>
<dd class="rate"> <dd class="rate">
@ -116,7 +116,7 @@
<div class="wrapper mag"> <div class="wrapper mag">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Magnetometer - Ga</div> <div class="title" i18n="sensorsMagnetometer"></div>
<dl> <dl>
<dt i18n="sensorsRefresh"></dt> <dt i18n="sensorsRefresh"></dt>
<dd class="rate"> <dd class="rate">
@ -160,7 +160,7 @@
<div class="wrapper altitude"> <div class="wrapper altitude">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Barometer - meters</div> <div class="title" i18n="sensorsBarometer"></div>
<dl> <dl>
<dt i18n="sensorsRefresh"></dt> <dt i18n="sensorsRefresh"></dt>
<dd class="rate"> <dd class="rate">
@ -196,7 +196,7 @@
<div class="wrapper sonar"> <div class="wrapper sonar">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Sonar - cm</div> <div class="title" i18n="sensorsSonar"></div>
<dl> <dl>
<dt i18n="sensorsRefresh"></dt> <dt i18n="sensorsRefresh"></dt>
<dd class="rate"> <dd class="rate">
@ -229,7 +229,7 @@
<div class="wrapper airspeed"> <div class="wrapper airspeed">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Air speed - cm/s</div> <div class="title" i18n="sensorsAirspeed"></div>
<dl> <dl>
<dt i18n="sensorsRefresh"></dt> <dt i18n="sensorsRefresh"></dt>
<dd class="rate"> <dd class="rate">
@ -263,9 +263,9 @@
<div class="wrapper temperature"> <div class="wrapper temperature">
<div class="gui_box grey"> <div class="gui_box grey">
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 0 - °C</div> <div class="title" i18n="sensorsTemperature0"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -278,9 +278,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 1 - °C</div> <div class="title" i18n="sensorsTemperature1"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -293,9 +293,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 2 - °C</div> <div class="title" i18n="sensorsTemperature2"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -308,9 +308,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 3 - °C</div> <div class="title" i18n="sensorsTemperature3"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -323,9 +323,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 4 - °C</div> <div class="title" i18n="sensorsTemperature4"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -338,9 +338,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 5 - °C</div> <div class="title" i18n="sensorsTemperature5"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -353,9 +353,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 6 - °C</div> <div class="title" i18n="sensorsTemperature6"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>
@ -368,9 +368,9 @@
</svg> </svg>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="plot_control"> <div class="plot_control">
<div class="title">Temperature 7 - °C</div> <div class="title" i18n="sensorsTemperature7"></div>
<dl> <dl>
<dt>value:</dt> <dt i18n="sensorsTemperatureValue"></dt>
<dd class="x">0</dd> <dd class="x">0</dd>
</dl> </dl>
</div> </div>