From 19897cd574bd5ac1a38eb819e2106a6a66c15f10 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Sun, 15 Nov 2015 23:35:22 +0100 Subject: [PATCH 01/39] started to work on new GUI functionality --- js/serial_backend.js | 110 +++++++++++++++++++++++++++++++++++-- main.css | 128 ++++++++++++++++++++++++++++++++----------- main.html | 30 ++++++++-- main.js | 4 +- tabs/dataflash.css | 2 + tabs/dataflash.js | 12 ++-- 6 files changed, 236 insertions(+), 50 deletions(-) diff --git a/js/serial_backend.js b/js/serial_backend.js index 57a02655..7fc5bcd7 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -254,10 +254,107 @@ function onConnect() { var sensor_state = $('#sensor-status'); sensor_state.show(); - + var port_picker = $('#portsinput'); port_picker.hide(); -} + + var dataflash = $('#dataflash_wrapper'); + dataflash.show(); + + + +// TEST code for profile change in header + function get_pid_controller() { + if (GUI.canChangePidController) { + MSP.send_message(MSP_codes.MSP_PID_CONTROLLER, false, false, get_pid_names); + } else { + get_pid_names(); + } + } + + function get_pid_names() { + MSP.send_message(MSP_codes.MSP_PIDNAMES, false, false, get_pid_data); + } + + // requesting MSP_STATUS manually because it contains CONFIG.profile + MSP.send_message(MSP_codes.MSP_STATUS, false, false, get_pid_controller); + + var profile_e = $('select[name="profilechange"]'); + + // Fill in currently selected profile + profile_e.val(CONFIG.profile); + // UI Hooks + profile_e.change(function () { + var profile = parseInt($(this).val()); + MSP.send_message(MSP_codes.MSP_SELECT_SETTING, [profile], false, function () { + GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile + 1])); + + GUI.tab_switch_cleanup(function () { + + // < here goes the code to reinitialise the current tab + TABS[this.active_tab].initialize(); + + + }); + }); + }); + +// testing profile change END + +// TEST code for dataflash status in header + MSP.send_message(MSP_codes.MSP_DATAFLASH_SUMMARY, false, false); + + function formatFilesize(bytes) { + if (bytes < 1024) { + return bytes + "B"; + } + + var kilobytes = bytes / 1024; + + if (kilobytes < 1024) { + return Math.round(kilobytes) + "kB"; + } + + var megabytes = kilobytes / 1024; + + return megabytes.toFixed(1) + "MB"; + } + + function update_html() { + if (DATAFLASH.usedSize > 0) { + $(".dataflash-used").css({ + width: (DATAFLASH.usedSize / DATAFLASH.totalSize * 100) + "%", + display: 'block' + }); + + $(".dataflash-used div").text('Used space ' + formatFilesize(DATAFLASH.usedSize)); + } else { + $(".dataflash-used").css({ + display: 'none' + }); + } + + if (DATAFLASH.totalSize - DATAFLASH.usedSize > 0) { + $(".dataflash-free").css({ + width: ((DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%", + display: 'block' + }); + $(".dataflash-free div").text('Free space ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); + } else { + $(".dataflash-free").css({ + display: 'none' + }); + } + + } + + // testing dataflash change END + + + + + + } function onClosed(result) { if (result) { // All went as expected @@ -269,12 +366,15 @@ function onClosed(result) { $('#tabs ul.mode-connected').hide(); $('#tabs ul.mode-disconnected').show(); + var sensor_state = $('#sensor-status'); + sensor_state.hide(); + var port_picker = $('#portsinput'); port_picker.show(); + + var dataflash = $('#dataflash_wrapper'); + dataflash.hide(); - var sensor_state = $('#sensor-status'); - sensor_state.hide(); - } function read_serial(info) { diff --git a/main.css b/main.css index c0c0852b..0a6ccb1a 100644 --- a/main.css +++ b/main.css @@ -360,27 +360,6 @@ input[type="number"]::-webkit-inner-spin-button { background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.45)); } -/* -#documentation-controls { - float: right; - height: 22px; - line-height: 22px; - margin-right: 10px; -} - - -#button-documentation { - float: left; - padding: 0 12px 0 12px; - height: 18px; - line-height: 18px; - background-color: #ffcb18; - color: #000; - font-weight: bold; - border: solid 1px #c0c0c0; - display: none; -} -*/ #options { float: right; width: 20px; @@ -885,13 +864,8 @@ dialog { } .content_wrapper { - /* leave 20px side padding always */ - /*padding: 0 20px 0 20px; - for testing: */ padding: 20px; position: relative; - /*float: left; - width:calc(100% - 40px);*/ } .content_toolbar { @@ -1097,9 +1071,6 @@ dialog { } .fixed_band .save_btn a { - /* line-height:20px; - padding:3px 13px 5px 13px; - */ margin-top: 9px; margin-bottom: 0px; margin-right: 20px; @@ -1353,7 +1324,7 @@ dialog { border-radius: 3px; color: #fff; font-size: 10px; - } +} .fixfalse { background-color: #e60000; @@ -1364,19 +1335,110 @@ dialog { color: #fff; font-size: 10px; } +/* Dataflash element styling*/ + +#dataflash_wrapper { + color:white; + font-size:10px; + margin-top: 20px; + width:95px; + float: right; + margin-right: 20px; + line-height: 12px; + height: 33px; + border-radius: 5px; + border: 1px solid #272727; + box-shadow: 0px 1px 0px rgba(92, 92, 92, 0.5); + background-color: #434343; + background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.55)); + padding-top:5px; + display:none; + text-shadow: 0px 1px rgba(0, 0, 0, 1.0); + +} + +#profile_change { + color:white; + margin-top: 16px; + width:95px; + float: right; + margin-right: 0px; + line-height: 12px; +} + +.dataflash-contents { + margin-top: 18px; + border: 1px solid #4A4A4A; + background-color: #4A4A4A; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + border-radius: 3px; + margin-left: 5px; + margin-right: 5px; +} + + +.dataflash-contents .notsupported { + display: none; +} + +.dataflash-contents li { + height: 6px; + position: relative; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.20); + border-radius: 4px; + +} + +.dataflash-contents li div { + position: absolute; + top: -18px; + margin-top: 0px; + text-align: center; + left: 0; + right: 0; + width:90px; + text-align:left; + color:silver; +} + +.dataflash-used { + background-color: #59AA29; + border-radius: 4px; +} + +progress::-webkit-progress-bar { + height: 8px; + background-color: #eee; +} + +progress::-webkit-progress-value { + background-color: #bcf; +} + +.noflash { + display:none; + color: #4f4f4f; + text-align: center; + text-shadow: 0px 1px rgba(0, 0, 0, 1.0); + margin-top:2px; +} + + @media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) { .content_wrapper { padding: 15px; - /*width:calc(100% - 30px);*/ - } +} .tab_title { font-size: 16px; line-height: 18px; font-family: 'open_sanslight', Arial; margin-bottom: 10px; height: 22px; - } +} .cf_doc_version_bt a { padding: 1px 5px 1px 5px; margin-top: -35px; diff --git a/main.html b/main.html index 88320b86..df899eb2 100755 --- a/main.html +++ b/main.html @@ -126,6 +126,28 @@
+
+
No dataflash
chip found
+
    +
  • +
    Used space
    +
  • +
  • +
    Free space
    +
  • +
+
+ +
+
diff --git a/main.js b/main.js index 0a79479c..a581967e 100644 --- a/main.js +++ b/main.js @@ -367,8 +367,8 @@ $("#showlog").on('click', function() { if ( state ) { $("#log").animate({height: 27}, 200); $("#log").removeClass('active'); - $("#content").removeClass('logopen'); - $("#tabs").removeClass('logopen'); + $("#content").removeClass('logopen'); + $("#tabs").removeClass('logopen'); $("#scrollicon").removeClass('active'); state = false; diff --git a/tabs/dataflash.css b/tabs/dataflash.css index 209481d3..f175382e 100644 --- a/tabs/dataflash.css +++ b/tabs/dataflash.css @@ -98,6 +98,8 @@ text-align: center; left: 0; right: 0; + width: 100%; + color: black; } .tab-dataflash .dataflash-used { diff --git a/tabs/dataflash.js b/tabs/dataflash.js index 60e9214e..91f5f8e2 100644 --- a/tabs/dataflash.js +++ b/tabs/dataflash.js @@ -54,26 +54,26 @@ TABS.dataflash.initialize = function (callback) { function update_html() { if (DATAFLASH.usedSize > 0) { - $(".tab-dataflash .dataflash-used").css({ + $(".dataflash-used").css({ width: (DATAFLASH.usedSize / DATAFLASH.totalSize * 100) + "%", display: 'block' }); - $(".tab-dataflash .dataflash-used div").text('Used space ' + formatFilesize(DATAFLASH.usedSize)); + $(".dataflash-used div").text('Used space ' + formatFilesize(DATAFLASH.usedSize)); } else { - $(".tab-dataflash .dataflash-used").css({ + $(".dataflash-used").css({ display: 'none' }); } if (DATAFLASH.totalSize - DATAFLASH.usedSize > 0) { - $(".tab-dataflash .dataflash-free").css({ + $(".dataflash-free").css({ width: ((DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%", display: 'block' }); - $(".tab-dataflash .dataflash-free div").text('Free space ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); + $(".dataflash-free div").text('Free space ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); } else { - $(".tab-dataflash .dataflash-free").css({ + $(".dataflash-free").css({ display: 'none' }); } From 0b2c6a26d5a03a7cd3b9aaf1d02cbc0012ebacc6 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Mon, 16 Nov 2015 11:31:57 +0100 Subject: [PATCH 02/39] added: internet connection test in the gps tab --- main.css | 3 +++ tabs/gps.css | 7 +++++-- tabs/gps.html | 13 +++++++++++++ tabs/gps.js | 29 +++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/main.css b/main.css index 0a6ccb1a..1e6e4e78 100644 --- a/main.css +++ b/main.css @@ -1117,6 +1117,7 @@ dialog { line-height: 13px; display: block; transition: all ease 0.2s; + text-decoration:none; } .default_btn a:hover { @@ -1124,6 +1125,8 @@ dialog { color: #fff; text-shadow: 0px 1px rgba(0, 0, 0, 0.25); transition: all ease 0.2s; + text-decoration:none; + } .default_btn a:active { diff --git a/tabs/gps.css b/tabs/gps.css index 59f147b2..06a29a2c 100644 --- a/tabs/gps.css +++ b/tabs/gps.css @@ -18,12 +18,15 @@ .tab-gps a { font-weight: bold; + te } -.tab-gps a:hover { - text-decoration: underline; +#map { + display:none; } + + progress[value]::-webkit-progress-bar { background-color: #d2d2d2; border-radius: 2px; diff --git a/tabs/gps.html b/tabs/gps.html index 5276868e..9b44b7df 100644 --- a/tabs/gps.html +++ b/tabs/gps.html @@ -145,6 +145,19 @@
+
+
+ +
+ Online check success! Map can be loaded here! +
+
+ +
+ \ No newline at end of file diff --git a/tabs/gps.js b/tabs/gps.js index b6657f61..e6cd8aaf 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -71,10 +71,39 @@ TABS.gps.initialize = function (callback) { MSP.send_message(MSP_codes.MSP_STATUS); }, 250, true); + +//check for internet connection on load +if (navigator.onLine) { + console.log('Online'); + $('#connect').hide(); + $('#map').show(); +} else { + console.log('Offline'); + $('#connect').show(); + $('#map').hide(); +} + +$("#check").on('click',function(){ +if (navigator.onLine) { + console.log('Online'); + $('#connect').hide(); + $('#map').show(); + +} else { + console.log('Offline'); + $('#connect').show(); + $('#map').hide(); + } + }); + + GUI.content_ready(callback); } + }; + + TABS.gps.cleanup = function (callback) { if (callback) callback(); }; \ No newline at end of file From 6b97eb28092a048459a8f931799368eceb61f9ca Mon Sep 17 00:00:00 2001 From: skaman82 Date: Mon, 16 Nov 2015 12:46:59 +0100 Subject: [PATCH 03/39] Further work on dataflash and profile switch in the header --- js/serial_backend.js | 18 +++++++++--------- main.css | 12 ++++++------ main.html | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/js/serial_backend.js b/js/serial_backend.js index 7fc5bcd7..06c9850c 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -289,26 +289,21 @@ function onConnect() { MSP.send_message(MSP_codes.MSP_SELECT_SETTING, [profile], false, function () { GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile + 1])); - GUI.tab_switch_cleanup(function () { // < here goes the code to reinitialise the current tab - TABS[this.active_tab].initialize(); - - }); }); }); // testing profile change END // TEST code for dataflash status in header - MSP.send_message(MSP_codes.MSP_DATAFLASH_SUMMARY, false, false); + MSP.send_message(MSP_codes.MSP_DATAFLASH_SUMMARY, false, false); function formatFilesize(bytes) { if (bytes < 1024) { return bytes + "B"; } - var kilobytes = bytes / 1024; if (kilobytes < 1024) { @@ -327,7 +322,7 @@ function onConnect() { display: 'block' }); - $(".dataflash-used div").text('Used space ' + formatFilesize(DATAFLASH.usedSize)); + $(".dataflash-used div").text('Dataflash: used ' + formatFilesize(DATAFLASH.usedSize)); } else { $(".dataflash-used").css({ display: 'none' @@ -339,7 +334,7 @@ function onConnect() { width: ((DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%", display: 'block' }); - $(".dataflash-free div").text('Free space ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); + $(".dataflash-free div").text('Dataflash: free ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); } else { $(".dataflash-free").css({ display: 'none' @@ -347,7 +342,12 @@ function onConnect() { } } - + update_html(); + + + + + // testing dataflash change END diff --git a/main.css b/main.css index 1e6e4e78..2678242a 100644 --- a/main.css +++ b/main.css @@ -1344,7 +1344,7 @@ dialog { color:white; font-size:10px; margin-top: 20px; - width:95px; + width:125px; float: right; margin-right: 20px; line-height: 12px; @@ -1363,7 +1363,7 @@ dialog { #profile_change { color:white; margin-top: 16px; - width:95px; + width:125px; float: right; margin-right: 0px; line-height: 12px; @@ -1388,10 +1388,10 @@ dialog { } .dataflash-contents li { - height: 6px; + height: 5px; position: relative; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.20); - border-radius: 4px; + border-radius: 2px; } @@ -1402,14 +1402,14 @@ dialog { text-align: center; left: 0; right: 0; - width:90px; + width:120px; text-align:left; color:silver; } .dataflash-used { background-color: #59AA29; - border-radius: 4px; + border-radius: 2px; } progress::-webkit-progress-bar { diff --git a/main.html b/main.html index df899eb2..980498ee 100755 --- a/main.html +++ b/main.html @@ -130,10 +130,10 @@
No dataflash
chip found
From 32cae1f7df00e962b8b81b540f86343e6aec7234 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Mon, 16 Nov 2015 15:59:04 +0100 Subject: [PATCH 04/39] fixing some css --- main.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.css b/main.css index 2678242a..4d2ab191 100644 --- a/main.css +++ b/main.css @@ -1412,12 +1412,12 @@ dialog { border-radius: 2px; } -progress::-webkit-progress-bar { +.dataflash-contents progress::-webkit-progress-bar { height: 8px; background-color: #eee; } -progress::-webkit-progress-value { +.dataflash-contents progress::-webkit-progress-value { background-color: #bcf; } From 8067dd7acfdada84cde90c9c6b758ee626c50355 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Mon, 16 Nov 2015 23:43:46 +0100 Subject: [PATCH 05/39] correcting margin of new 3d section in config tab --- tabs/configuration.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs/configuration.css b/tabs/configuration.css index 2eb2f437..aa2dc937 100644 --- a/tabs/configuration.css +++ b/tabs/configuration.css @@ -262,7 +262,7 @@ .tab-configuration .gps .gui_box, .tab-configuration .other .gui_box { min-height: 355px; float: left; - margin-bottom: 0px; + margin-bottom: 10px; } .tab-configuration .current .gui_box { From 03252dd8c4f50f70a276e93aeea8af777569fbe3 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Tue, 17 Nov 2015 03:27:44 +0100 Subject: [PATCH 06/39] placing a sandboxed googlemap --- manifest.json | 7 +++++- tabs/gps.css | 15 +++++++++++-- tabs/gps.html | 6 +++-- tabs/map.html | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 tabs/map.html diff --git a/manifest.json b/manifest.json index 41c97a62..348c7939 100644 --- a/manifest.json +++ b/manifest.json @@ -18,7 +18,12 @@ } }, - "permissions": [ + "sandbox": { + "pages": [ + "tabs/map.html"] + }, + + "permissions": [ "https://www.google-analytics.com/", "https://*.github.com/", "https://*.githubusercontent.com/", diff --git a/tabs/gps.css b/tabs/gps.css index 06a29a2c..411ad57e 100644 --- a/tabs/gps.css +++ b/tabs/gps.css @@ -18,13 +18,24 @@ .tab-gps a { font-weight: bold; - te +} + +#map-canvas { + height: 100%; + background: #ccc; + width: 100%; + float: left; } #map { - display:none; + height: 100%; + width: 100%; } +.tab-gps iframe { + height: 100%; + width: 100%; +} progress[value]::-webkit-progress-bar { diff --git a/tabs/gps.html b/tabs/gps.html index 9b44b7df..b4335d2d 100644 --- a/tabs/gps.html +++ b/tabs/gps.html @@ -146,13 +146,15 @@
-
+
-
+
diff --git a/tabs/map.html b/tabs/map.html new file mode 100644 index 00000000..b98a87c3 --- /dev/null +++ b/tabs/map.html @@ -0,0 +1,62 @@ + + + + Asynchronous Loading + + + + + + +
+ \ No newline at end of file From f85d0e01a17f704dbecd090eb59e01e4266ff57f Mon Sep 17 00:00:00 2001 From: skaman82 Date: Tue, 17 Nov 2015 03:40:46 +0100 Subject: [PATCH 07/39] error fix --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 91dec3ea..29613a01 100644 --- a/main.js +++ b/main.js @@ -368,7 +368,7 @@ $("#showlog").on('click', function() { $("#log").animate({height: 27}, 200); $("#log").removeClass('active'); $("#content").removeClass('logopen'); - $("#tabs").removeClass('logopen'); + $(".tab_container").removeClass('logopen'); $("#scrollicon").removeClass('active'); state = false; From 46d077e24072611a954baa066a074f98eb798923 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Tue, 17 Nov 2015 03:47:34 +0100 Subject: [PATCH 08/39] sync --- tabs/gps.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabs/gps.css b/tabs/gps.css index 411ad57e..c003b05c 100644 --- a/tabs/gps.css +++ b/tabs/gps.css @@ -20,14 +20,14 @@ font-weight: bold; } -#map-canvas { +.tab-gps #map-canvas { height: 100%; background: #ccc; width: 100%; float: left; } -#map { +.tab-gps #map { height: 100%; width: 100%; } From ed005f23bb385ff7808834f62aadb278efe1941a Mon Sep 17 00:00:00 2001 From: skaman82 Date: Tue, 17 Nov 2015 10:27:54 +0100 Subject: [PATCH 09/39] further work on map functionality --- manifest.json | 1 + tabs/gps.css | 8 ++++++-- tabs/gps.html | 12 ++++++++---- tabs/gps.js | 15 +++++++++++---- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/manifest.json b/manifest.json index 348c7939..5f6d24ea 100644 --- a/manifest.json +++ b/manifest.json @@ -25,6 +25,7 @@ "permissions": [ "https://www.google-analytics.com/", + "https://maps.googleapis.com/*", "https://*.github.com/", "https://*.githubusercontent.com/", "http://*.baseflight.net/", diff --git a/tabs/gps.css b/tabs/gps.css index c003b05c..5fe96efd 100644 --- a/tabs/gps.css +++ b/tabs/gps.css @@ -27,8 +27,7 @@ float: left; } -.tab-gps #map { - height: 100%; +.tab-gps #waiting { width: 100%; } @@ -37,6 +36,11 @@ width: 100%; } +.tab-gps #loadmap { + height: 100%; + width: 100%; +} + progress[value]::-webkit-progress-bar { background-color: #d2d2d2; diff --git a/tabs/gps.html b/tabs/gps.html index b4335d2d..483f8699 100644 --- a/tabs/gps.html +++ b/tabs/gps.html @@ -147,14 +147,18 @@
+
+
+
- diff --git a/tabs/gps.js b/tabs/gps.js index e6cd8aaf..b5c28843 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -76,23 +76,30 @@ TABS.gps.initialize = function (callback) { if (navigator.onLine) { console.log('Online'); $('#connect').hide(); - $('#map').show(); + $('#waiting').show(); + $('#loadmap').show(); + } else { console.log('Offline'); $('#connect').show(); - $('#map').hide(); + $('#waiting').hide(); + $('#loadmap').hide(); + } $("#check").on('click',function(){ if (navigator.onLine) { console.log('Online'); $('#connect').hide(); - $('#map').show(); + $('#waiting').show(); + $('#loadmap').show(); } else { console.log('Offline'); $('#connect').show(); - $('#map').hide(); + $('#waiting').hide(); + $('#loadmap').hide(); + } }); From 0482e6aed8ec97d769e81a4e5f97eec2290e5c1a Mon Sep 17 00:00:00 2001 From: skaman82 Date: Tue, 17 Nov 2015 13:32:33 +0100 Subject: [PATCH 10/39] improving render quality of 3d model in setup tab --- tabs/setup.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabs/setup.js b/tabs/setup.js index 2868454f..6223cd12 100755 --- a/tabs/setup.js +++ b/tabs/setup.js @@ -228,7 +228,7 @@ TABS.setup.initialize3D = function (compatibility) { renderer = new THREE.CanvasRenderer({canvas: canvas.get(0), alpha: true}); } // initialize render size for current canvas size - renderer.setSize(wrapper.width(), wrapper.height()); + renderer.setSize(wrapper.width()*2, wrapper.height()*2); // // modelWrapper adds an extra axis of rotation to avoid gimbal lock with the euler angles @@ -295,7 +295,7 @@ TABS.setup.initialize3D = function (compatibility) { // handle canvas resize this.resize3D = function () { - renderer.setSize(wrapper.width(), wrapper.height()); + renderer.setSize(wrapper.width()*2, wrapper.height()*2); camera.aspect = wrapper.width() / wrapper.height(); camera.updateProjectionMatrix(); From 1eaf63145d35271f05e9fecc26f839b3b0d2930c Mon Sep 17 00:00:00 2001 From: skaman82 Date: Wed, 18 Nov 2015 14:11:07 +0100 Subject: [PATCH 11/39] fixing typo --- _locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index ff0b4b1e..5b897abc 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1270,6 +1270,6 @@ "message": "The values below change the behaviour of the ANGLE and HORIZON flight modes. Different PID controllers handle the LEVEL values differently. Please check the documentation." }, "configHelp1": { - "message": "RSSI is a measurement of signal strength and is very handy so you know when your aircraft isw going out of range or if it is suffering RF interference." + "message": "RSSI is a measurement of signal strength and is very handy so you know when your aircraft is going out of range or if it is suffering RF interference." } } \ No newline at end of file From 77deaa9af3208360806b7e7976cd70189c26a0c2 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Thu, 19 Nov 2015 17:13:10 -0500 Subject: [PATCH 12/39] Now saving the state of the log window. --- main.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/main.js b/main.js index 29613a01..98005eeb 100644 --- a/main.js +++ b/main.js @@ -42,6 +42,13 @@ $(document).ready(function () { console.log('Application version expired'); GUI.log('You are using an old version of ' + chrome.runtime.getManifest().name + '. There may be a more recent version with improvements and fixes.'); } + + chrome.storage.local.get('logopen', function (result) { + if (result.logopen) { + $("#showlog").trigger('click'); + } + }); + // log webgl capability // it would seem the webgl "enabling" through advanced settings will be ignored in the future @@ -370,6 +377,7 @@ $("#showlog").on('click', function() { $("#content").removeClass('logopen'); $(".tab_container").removeClass('logopen'); $("#scrollicon").removeClass('active'); + chrome.storage.local.set({'logopen': false}); state = false; }else{ @@ -378,6 +386,7 @@ $("#showlog").on('click', function() { $("#content").addClass('logopen'); $(".tab_container").addClass('logopen'); $("#scrollicon").addClass('active'); + chrome.storage.local.set({'logopen': true}); state = true; } From e65d67884a7f78f6304dfd0b9992d46c5194b08c Mon Sep 17 00:00:00 2001 From: skaman82 Date: Thu, 19 Nov 2015 23:22:34 +0100 Subject: [PATCH 13/39] correcting small css error --- tabs/map.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs/map.html b/tabs/map.html index b98a87c3..0102ec5e 100644 --- a/tabs/map.html +++ b/tabs/map.html @@ -8,7 +8,7 @@ html, body, #map-canvas { height: 100%; margin: 0px; - padding: 0px + padding: 0px; } From 593cfb7b543eb10d4deb997762bf090642eac760 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Wed, 25 Nov 2015 03:36:09 +0100 Subject: [PATCH 25/39] small CSS adjustments --- tabs/receiver.css | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tabs/receiver.css b/tabs/receiver.css index 6bfa23f8..1ab80c8c 100644 --- a/tabs/receiver.css +++ b/tabs/receiver.css @@ -193,11 +193,11 @@ } .tab-receiver .tunings table td:first-child { - border-bottom-left-radius: 5px; + border-bottom-left-radius: 3px; } .tab-receiver .tunings table td:last-child { - border-bottom-right-radius: 5px; + border-bottom-right-radius: 3px; border-right: 0px; } @@ -224,8 +224,8 @@ margin: 0px 0px 10px 0; border-left: 0; width: 30%; - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; background-color: #DEDEDE; } @@ -237,7 +237,7 @@ font-weight: normal; background: #828885; color: white; - border-top-right-radius: 5px; + border-top-right-radius: 3px; } .tab-receiver .rssi_channel_wrapper select { @@ -253,8 +253,8 @@ position: relative; margin: 0px 0px 10px 0; width: calc(70% - 0px); - border-top-left-radius: 5px; - border-bottom-left-radius: 5px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; background-color: #DEDEDE; } @@ -266,7 +266,7 @@ font-weight: normal; background: #828885; color: white; - border-top-left-radius: 5px; + border-top-left-radius: 3px; border-right: 1px solid silver; } From 7ca376926ade2d61760ff442774f67b73b80f064 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Wed, 25 Nov 2015 15:06:17 -0500 Subject: [PATCH 26/39] Some code styling and cleanup. --- js/serial_backend.js | 64 ++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/js/serial_backend.js b/js/serial_backend.js index f67aa9cf..44d960eb 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -252,11 +252,7 @@ function onConnect() { $('#tabs ul.mode-disconnected').hide(); $('#tabs ul.mode-connected').show(); - MSP.send_message(MSP_codes.MSP_STATUS, false, false); - -// TEST code for dataflash status in header - //MSP.send_message(MSP_codes.MSP_DATAFLASH_SUMMARY, false, update_html()); - + MSP.send_message(MSP_codes.MSP_STATUS, false, false); MSP.send_message(MSP_codes.MSP_DATAFLASH_SUMMARY, false, false); @@ -267,14 +263,7 @@ function onConnect() { port_picker.hide(); var dataflash = $('#dataflash_wrapper_global'); - dataflash.show(); - - - - - - // testing dataflash change END - + dataflash.show(); } @@ -442,7 +431,7 @@ function bit_clear(num, bit) { } function update_dataflash_global() { - function formatFilesize(bytes) { + function formatFilesize(bytes) { if (bytes < 1024) { return bytes + "B"; } @@ -457,30 +446,29 @@ function update_dataflash_global() { return megabytes.toFixed(1) + "MB"; } - var supportsDataflash = DATAFLASH.totalSize > 0; - if (supportsDataflash){ + var supportsDataflash = DATAFLASH.totalSize > 0; - $(".noflash_global").css({ - display: 'none' - }); + if (supportsDataflash){ + $(".noflash_global").css({ + display: 'none' + }); - $(".dataflash-contents_global").css({ - display: 'block' - }); + $(".dataflash-contents_global").css({ + display: 'block' + }); - $(".dataflash-free_global").css({ - width: (100-(DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%", - display: 'block' - }); - $(".dataflash-free_global div").text('Dataflash: free ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); - } else { - $(".noflash_global").css({ - display: 'block' - }); - - $(".dataflash-contents_global").css({ - display: 'none' - }); - } - - } + $(".dataflash-free_global").css({ + width: (100-(DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%", + display: 'block' + }); + $(".dataflash-free_global div").text('Dataflash: free ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize)); + } else { + $(".noflash_global").css({ + display: 'block' + }); + + $(".dataflash-contents_global").css({ + display: 'none' + }); + } +} From e6579a9fbe26783bd805b7ce88a651bbbc04fae2 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Wed, 25 Nov 2015 16:51:50 -0500 Subject: [PATCH 27/39] Added callback for log close animation, on close the log now scrolls to the most recent log entry. --- main.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/main.js b/main.js index 14934f3b..2bd3ea24 100644 --- a/main.js +++ b/main.js @@ -315,13 +315,16 @@ $(document).ready(function () { $("#showlog").on('click', function() { var state = $(this).data('state'); if ( state ) { - $("#log").animate({height: 27}, 200); + $("#log").animate({height: 27}, 200, function() { + var command_log = $('div#log'); + command_log.scrollTop($('div.wrapper', command_log).height()); + }); $("#log").removeClass('active'); $("#content").removeClass('logopen'); $(".tab_container").removeClass('logopen'); $("#scrollicon").removeClass('active'); - chrome.storage.local.set({'logopen': false}); - + chrome.storage.local.set({'logopen': false}); + state = false; }else{ $("#log").animate({height: 111}, 200); @@ -329,7 +332,7 @@ $(document).ready(function () { $("#content").addClass('logopen'); $(".tab_container").addClass('logopen'); $("#scrollicon").addClass('active'); - chrome.storage.local.set({'logopen': true}); + chrome.storage.local.set({'logopen': true}); state = true; } From 0928ed95edc6138762f71ca3fa4283b1495bf6e5 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Wed, 25 Nov 2015 23:27:48 +0100 Subject: [PATCH 28/39] Adding animation to the tab menu if log opens/closes --- main.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.css b/main.css index 3ef1e808..0f5384e5 100644 --- a/main.css +++ b/main.css @@ -489,12 +489,16 @@ input[type="number"]::-webkit-inner-spin-button { width: 200px; border-right: 4px solid #59aa29; background-color: #2e2e2e; + transition: all 0.2s; + } .tab_container.logopen { height: calc(100% - 235px); overflow-x: hidden; overflow-y: auto; + transition: all 0.5s; + } From b5d0fd6290dc86aa395533fc72d2e7d22041fc42 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Wed, 25 Nov 2015 17:45:52 -0500 Subject: [PATCH 29/39] GPS marker resized --- tabs/map.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tabs/map.html b/tabs/map.html index 838f5530..5cea21f3 100644 --- a/tabs/map.html +++ b/tabs/map.html @@ -33,16 +33,16 @@ function initialize() { map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); + var image = { + url: '../images/icons/cf_icon_position.png', + scaledSize: new google.maps.Size(70, 70) + }; + var marker = new google.maps.Marker({ - icon : '../images/icons/cf_icon_position.png', + icon : image, position: new google.maps.LatLng(53.570645, 10.001362), - size: new google.maps.Size(10, 10), map:map - }); - - - // You can use a LatLng literal in place of a google.maps.LatLng object when From a1f82238802f0251b8448c51ee03c8e534c671d8 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Wed, 25 Nov 2015 17:51:03 -0500 Subject: [PATCH 30/39] Added zoom controls inside map for GPS --- tabs/map.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs/map.html b/tabs/map.html index 5cea21f3..86959d39 100644 --- a/tabs/map.html +++ b/tabs/map.html @@ -25,7 +25,7 @@ var map; function initialize() { var mapOptions = { zoom: 17, - zoomControl: false, + zoomControl: true, streetViewControl: false, // mapTypeId: google.maps.MapTypeId.SATELLITE, center: {lat: 53.570645, lng: 10.001362} From 938d8b522ccd4a445fde08c7a13bc49ad2990ac7 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Mon, 30 Nov 2015 17:41:24 -0500 Subject: [PATCH 31/39] Added zoom function for GPS map --- manifest.json | 3 +- tabs/gps.html | 7 +++-- tabs/gps.js | 82 ++++++++++++++++++++++++++++++--------------------- tabs/map.html | 32 +++++++++++++++++++- 4 files changed, 86 insertions(+), 38 deletions(-) diff --git a/manifest.json b/manifest.json index 5f6d24ea..6eff7b39 100644 --- a/manifest.json +++ b/manifest.json @@ -19,8 +19,7 @@ }, "sandbox": { - "pages": [ - "tabs/map.html"] + "pages": ["tabs/map.html"] }, "permissions": [ diff --git a/tabs/gps.html b/tabs/gps.html index cb3d456e..00bc2840 100644 --- a/tabs/gps.html +++ b/tabs/gps.html @@ -159,8 +159,11 @@
- - + +
+ + + +
diff --git a/tabs/gps.js b/tabs/gps.js index b5c28843..f26c16b8 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -14,9 +14,9 @@ TABS.gps.initialize = function (callback) { } MSP.send_message(MSP_codes.MSP_STATUS, false, false, load_html); - + function process_html() { - // translate to user-selected language + // translate to user-selected languageconsole.log('Online'); localize(); function get_raw_gps_data() { @@ -72,37 +72,53 @@ TABS.gps.initialize = function (callback) { }, 250, true); -//check for internet connection on load -if (navigator.onLine) { - console.log('Online'); - $('#connect').hide(); - $('#waiting').show(); - $('#loadmap').show(); - -} else { - console.log('Offline'); - $('#connect').show(); - $('#waiting').hide(); - $('#loadmap').hide(); - -} - -$("#check").on('click',function(){ -if (navigator.onLine) { - console.log('Online'); - $('#connect').hide(); - $('#waiting').show(); - $('#loadmap').show(); - -} else { - console.log('Offline'); - $('#connect').show(); - $('#waiting').hide(); - $('#loadmap').hide(); - - } - }); - + //check for internet connection on load + if (navigator.onLine) { + console.log('Online'); + $('#connect').hide(); + $('#waiting').show(); + $('#loadmap').show(); + + } else { + console.log('Offline'); + $('#connect').show(); + $('#waiting').hide(); + $('#loadmap').hide(); + + } + + $("#check").on('click',function(){ + if (navigator.onLine) { + console.log('Online'); + $('#connect').hide(); + $('#waiting').show(); + $('#loadmap').show(); + + } else { + console.log('Offline'); + $('#connect').show(); + $('#waiting').hide(); + $('#loadmap').hide(); + } + }); + + var frame = document.getElementById('map'); + + $('#zoom_in').click(function() { + console.log('zoom in'); + var message = { + action: 'zoom_in', + }; + frame.contentWindow.postMessage(message, '*'); + }); + + $('#zoom_out').click(function() { + console.log('zoom out'); + var message = { + action: 'zoom_out' + }; + frame.contentWindow.postMessage(message, '*'); + }); GUI.content_ready(callback); } diff --git a/tabs/map.html b/tabs/map.html index 86959d39..5597dd90 100644 --- a/tabs/map.html +++ b/tabs/map.html @@ -12,6 +12,29 @@ } From 6ae1cfd9152d82c7e85ad6638844da61e2a8e6af Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Wed, 2 Dec 2015 15:44:17 -0500 Subject: [PATCH 35/39] hide map, on init until GPS coords are valid --- tabs/gps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs/gps.js b/tabs/gps.js index b2bc4da1..e4c4834a 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -18,7 +18,7 @@ TABS.gps.initialize = function (callback) { function set_online(){ $('#connect').hide(); $('#waiting').show(); - $('#loadmap').show(); + $('#loadmap').hide(); } function set_offline(){ From 6e222ca73e441c39d85bf905ffcded877f9cc980 Mon Sep 17 00:00:00 2001 From: NightHawk32 Date: Wed, 2 Dec 2015 16:14:20 -0500 Subject: [PATCH 36/39] GPS map now only shows when a 3D fix is established --- tabs/gps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs/gps.js b/tabs/gps.js index e4c4834a..447e7a7a 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -78,7 +78,7 @@ TABS.gps.initialize = function (callback) { if (navigator.onLine) { $('#connect').hide(); - if(lat != 0 && lon != 0){ + if(GPS_DATA.fix){ frame.contentWindow.postMessage(message, '*'); $('#loadmap').show(); $('#waiting').hide(); From 0e0ebabc69a076c56f7bd370fe678eb92954f9f6 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Wed, 2 Dec 2015 22:30:09 +0100 Subject: [PATCH 37/39] storing alternative code --- tabs/gps.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tabs/gps.js b/tabs/gps.js index 447e7a7a..f0e4967f 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -78,6 +78,7 @@ TABS.gps.initialize = function (callback) { if (navigator.onLine) { $('#connect').hide(); + //if(lat != 0 && lon != 0){ if(GPS_DATA.fix){ frame.contentWindow.postMessage(message, '*'); $('#loadmap').show(); From db1627c29c27d6313a4f95ac600f5ade0e2abef8 Mon Sep 17 00:00:00 2001 From: skaman82 Date: Wed, 2 Dec 2015 23:45:31 +0100 Subject: [PATCH 38/39] Placing text in the language file --- _locales/en/messages.json | 9 +++++++++ tabs/gps.css | 8 ++++++++ tabs/gps.html | 9 ++++----- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 716e44a7..c13b4c3b 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -920,6 +920,15 @@ "gpsHead": { "message": "GPS" }, + "gpsMapHead": { + "message": "Current GPS location" + }, + "gpsMapMessage1": { + "message": "Please check your internet connection" + }, + "gpsMapMessage2": { + "message": "Waiting for GPS 3D fix…" + }, "gps3dFix": { "message": "3D Fix:" }, diff --git a/tabs/gps.css b/tabs/gps.css index 5aca28ad..d5e78ab3 100644 --- a/tabs/gps.css +++ b/tabs/gps.css @@ -87,6 +87,14 @@ float: right; } +.tab-gps #loadmap .controls a:hover { + background-color: #f5f5f5; +} + +.tab-gps #loadmap .controls a:active { + background-color: #e6e6e6; +} + .tab-gps #loadmap .controls a:first-child { margin-left: -1px; margin-right: 5px; diff --git a/tabs/gps.html b/tabs/gps.html index 64962911..e2ad57e6 100644 --- a/tabs/gps.html +++ b/tabs/gps.html @@ -148,14 +148,13 @@
-
+
-
- Please check your internet connection + -
-
Waiting for GPS 3D fix… +
+
From 0761cd31a9abacffdf95b8e9390075a67c4915dc Mon Sep 17 00:00:00 2001 From: skaman82 Date: Thu, 3 Dec 2015 18:01:53 +0100 Subject: [PATCH 39/39] reworking position marker --- images/icons/cf_icon_position.png | Bin 23023 -> 25551 bytes images/icons/cf_icon_position.svg | 62 ------------------------------ 2 files changed, 62 deletions(-) delete mode 100644 images/icons/cf_icon_position.svg diff --git a/images/icons/cf_icon_position.png b/images/icons/cf_icon_position.png index 1412bd335118c4c54699b140ae75a0f6aeaba65d..48f8c9da17a1234fc91cdbd87416abd109cef18d 100644 GIT binary patch delta 6447 zcma)9WmFqLvn99`2vVd-DHaL@2^KsQsNltm6bbIdJ*3d$6i9IoQrz9OK!KvgT?&QZ zTC5-EykGCVKi~e^opbJ;nLB58cMfX+qy2!&ufzb$ngrs098w5aKuB8#oh z3y2AWEyTsFz=DEeP_Q|~To7ypg+t6NA>!r`Gm)Ac@-SRBaX~?GAyF$ZT+B=yEDRU2 z07K0L1;G#qL`V>7W^N${6+y*PLjQL#HF4BJIR9NV{|}3bqaHzB(|!D}JZI5EP}bx$ z?B=3SxTp}+3~V7}Cj3A7m_g0Oz~WXAaX3WC0%|EHTysZ%Du`R+FZKp?rp$++4S%B` zr|mtD$?);l-fHUau(qnMrXys>eLd?%&5KRUs_7UVx~ z4#%~L!+QxrcPvV|&%O>r1ob4P_%g40=XF_xpQe^z107jDW2>`C5%wbX3}SZ7cv3w$ z#z>Nhh86N2=@ao{Rr>?hj2W9@13)X&D14b0&}acY+DFIV`)KLb|70@q6*CBs4^UqL z%^EXx!WvoET{)YG0Uwr4#a0gqUjdo1s4o|irXwzFAEU{&d4QP<(PYYB-D4GDNw6To z1OviQE_<36oZTDEupLArXdLjdGw7()1Mi9-Da0y;-pcG9;x1<;OQ{JoVyvWIW6q+` zJ(5~W`+9e(;AJX4;J!+feW4lq*Rn2Fe6OEW9=b^t00 ztz5R_Hn{>)YMd4=Olx3KoIpxOAlleZ201oOwT_cVb4ktCZ55hd>(pXyJe}^b@fpB? zYu+6N5+=(Zq7q~=gyFk!gtoa&M@Lf4asg=zq}Bpx#)+NrLcA$NiQSvc#T87S4|G

(3Vnl?A+dWPn_k( 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 delta 3858 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 diff --git a/images/icons/cf_icon_position.svg b/images/icons/cf_icon_position.svg deleted file mode 100644 index dd318b06..00000000 --- a/images/icons/cf_icon_position.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -