diff --git a/js/libraries/switchery/dist/switchery.css b/js/libraries/switchery/dist/switchery.css index 74c1da5b..cfd06b7c 100755 --- a/js/libraries/switchery/dist/switchery.css +++ b/js/libraries/switchery/dist/switchery.css @@ -13,10 +13,10 @@ border-radius: 20px; cursor: pointer; display: inline-block; - height: 30px; + height: 17px; position: relative; vertical-align: middle; - width: 50px; + width: 42px; -moz-user-select: none; -khtml-user-select: none; @@ -31,23 +31,25 @@ background: #fff; border-radius: 100%; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); - height: 30px; + height: 17px; position: absolute; top: 0; - width: 30px; + width: 17px; } /* Switchery sizes. */ .switchery-small { border-radius: 20px; - height: 20px; - width: 33px; + height: 10px; + width: 20px; + margin-top:-3px; + margin-right:3px; } .switchery-small > small { - height: 20px; - width: 20px; + height: 10px; + width: 10px; } .switchery-large { diff --git a/main.html b/main.html index abc143e3..d6af6712 100755 --- a/main.html +++ b/main.html @@ -34,7 +34,7 @@ - + @@ -86,14 +86,14 @@ - +
- +
diff --git a/main.js b/main.js index c82e12ab..505f9955 100644 --- a/main.js +++ b/main.js @@ -401,5 +401,23 @@ $("#showlog").on('click', function() { +/** toggle switch **/ +$(document).ready(function () { + + + +var elems = Array.prototype.slice.call(document.querySelectorAll('#togglesmall')); + +elems.forEach(function(html) { + var switchery = new Switchery(html, + { + size: 'small', + color: '#59aa29', + secondaryColor: '#c4c4c4' +}); + +}); + +}); diff --git a/tabs/firmware_flasher Kopie.css b/tabs/firmware_flasher Kopie.css new file mode 100755 index 00000000..672f5e3b --- /dev/null +++ b/tabs/firmware_flasher Kopie.css @@ -0,0 +1,220 @@ +.tab-firmware_flasher .info { + margin: 10px 0 10px 0; + position: relative; +} +.tab-firmware_flasher .info .progressLabel { + position: absolute; + + width: 100%; + height: 26px; + + top: 0; + left: 0; + + text-align: center; + line-height: 24px; + + color: white; + font-weight: bold; + + /* text-shadow: 1px 0px 2px rgba(0, 0, 0, 0.9);*/ +} +.tab-firmware_flasher .info .progressLabel a { + color: white; +} +.tab-firmware_flasher .info .progressLabel a:hover { + text-decoration: underline; +} +.tab-firmware_flasher .info .progress { + width: 100%; + height: 26px; + + border: 1px solid silver; +} +.tab-firmware_flasher .info .progress { + -webkit-appearance: none; +} +.tab-firmware_flasher .info .progress::-webkit-progress-bar { + background-color: #343434; +} +.tab-firmware_flasher .info .progress::-webkit-progress-value { + background-color: #F86008; +} +.tab-firmware_flasher .info .progress.valid::-webkit-progress-bar { + background-color: #73BE45; +} +.tab-firmware_flasher .info .progress.valid::-webkit-progress-value { + background-color: #73BE45; +} +.tab-firmware_flasher .info .progress.invalid::-webkit-progress-bar { + background-color: #A62E32; +} +.tab-firmware_flasher .info .progress.invalid::-webkit-progress-value { + background-color: #A62E32; +} +.tab-firmware_flasher .options { + position: relative; + + margin-bottom: 10px; + padding: 5px; + + line-height: 18px; + + border: 1px dotted silver; +} +.tab-firmware_flasher .options label input { + float: left; + margin-top: 2px; +} +.tab-firmware_flasher .options label span { + font-weight: bold; + margin-left: 6px; +} +.tab-firmware_flasher .options select { + height: 20px; + + border: 1px solid silver; +} + +.tab-firmware_flasher .options .releases select { + width: 280px; +} + +.tab-firmware_flasher .option.releases { + margin: 0 0 2px 0; + line-height: 20px; +} +.tab-firmware_flasher .options .description { + position: absolute; + left: 300px; + + font-style: italic; + color: #818181; +} +.tab-firmware_flasher .options .flash_on_connect_wrapper { + display: none; +} + +.tab-firmware_flasher .options .manual_baud_rate select { + width: 70px; +} + +.tab-firmware_flasher .release_info { + display: none; + + margin-bottom: 10px; + + border: 1px solid silver; +} +.tab-firmware_flasher .release_info .title { + line-height: 20px; + + text-align: center; + font-weight: bold; + color: white; + + border-bottom: 1px solid silver; + background-color: #3f4241; +} + +.tab-firmware_flasher .release_info .target { + color: blue; +} + +.tab-firmware_flasher .release_info p { + padding: 5px; +} +.tab-firmware_flasher .release_info p a { + font-weight: bold; +} +.tab-firmware_flasher .release_info p a:hover { + text-decoration: underline; +} +.tab-firmware_flasher .release_info .notes { + padding: 5px; +} + +.tab-firmware_flasher .git_info { + display: none; + + margin-bottom: 10px; + + border: 1px solid silver; +} +.tab-firmware_flasher .git_info .title { + line-height: 20px; + + text-align: center; + font-weight: bold; + color: white; + + border-bottom: 1px solid silver; + background-color: #3f4241; +} +.tab-firmware_flasher .git_info p { + padding: 5px; +} +.tab-firmware_flasher .git_info p a { + font-weight: bold; +} +.tab-firmware_flasher .git_info p a:hover { + text-decoration: underline; +} +.warning { + border: 1px solid silver; +} +.warning .title { + line-height: 20px; + + text-align: center; + font-weight: bold; + color: white; + + border-bottom: 1px solid silver; + background-color: #cd4c4c; +} +.warning p { + padding: 5px; +} +.tab-firmware_flasher .buttons { + width: calc(100% - 20px); + + margin-top: 10px; + bottom: 10px; +} +.tab-firmware_flasher .buttons a { + display: block; + float: left; + + margin: 0 10px 0 0; + padding: 0 15px 0 15px; + + height: 28px; + line-height: 28px; + text-align: center; + font-weight: bold; + + border: 1px solid silver; + background-color: #ececec; +} +.tab-firmware_flasher .buttons a:hover { + background-color: #dedcdc; +} +.tab-firmware_flasher .buttons a.flash_firmware.locked { + background-color: #b8b8b8; +} +.tab-firmware_flasher .buttons a.flash_firmware.locked:hover { + cursor: default; + background-color: #b8b8b8; +} +.tab-firmware_flasher .buttons a.load_remote_file.locked { + background-color: #b8b8b8; +} +.tab-firmware_flasher .buttons a.load_remote_file.locked:hover { + cursor: default; + background-color: #b8b8b8; +} +.tab-firmware_flasher .buttons a.back { + float: right; + margin: 0; +} \ No newline at end of file diff --git a/tabs/firmware_flasher Kopie.html b/tabs/firmware_flasher Kopie.html new file mode 100755 index 00000000..7bf2c631 --- /dev/null +++ b/tabs/firmware_flasher Kopie.html @@ -0,0 +1,96 @@ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+

+
+
+
+ +

+
+
+
+

+
+
+
+
+
+
+

+

+
+ +
+
+

+

+

+
+ +
+ + +
+ +
+ + + +
+
\ No newline at end of file diff --git a/tabs/firmware_flasher Kopie.js b/tabs/firmware_flasher Kopie.js new file mode 100755 index 00000000..a7e7e940 --- /dev/null +++ b/tabs/firmware_flasher Kopie.js @@ -0,0 +1,529 @@ +'use strict'; + +TABS.firmware_flasher = {}; +TABS.firmware_flasher.initialize = function (callback) { + var self = this; + + if (GUI.active_tab != 'firmware_flasher') { + GUI.active_tab = 'firmware_flasher'; + googleAnalytics.sendAppView('Firmware Flasher'); + } + + var intel_hex = false, // standard intel hex in string format + parsed_hex = false; // parsed raw hex in array format + + $('#content').load("./tabs/firmware_flasher.html", function () { + // translate to user-selected language + localize(); + + function parse_hex(str, callback) { + // parsing hex in different thread + var worker = new Worker('./js/workers/hex_parser.js'); + + // "callback" + worker.onmessage = function (event) { + callback(event.data); + }; + + // send data/string over for processing + worker.postMessage(str); + } + + + $('input.show_development_releases').click(function(){ + buildFirmwareOptions(); + }); + + var buildFirmwareOptions = function(){ + var releases_e = $('select[name="release"]').empty(); + var showDevReleases = ($('input.show_development_releases').is(':checked')); + releases_e.append($("".format(chrome.i18n.getMessage('firmwareFlasherOptionLabelSelectFirmware')))); + + var releaseDescriptors = []; + TABS.firmware_flasher.releases.forEach(function(release){ + release.assets.forEach(function(asset){ + var targetFromFilenameExpression = /.*_(.*)\.(.*)/; + var match = targetFromFilenameExpression.exec(asset.name); + + if (!showDevReleases && release.prerelease) { + return; + } + + if (!match) { + return; + } + + var target = match[1]; + var format = match[2]; + + if (format != 'hex') { + return; + } + + var date = new Date(release.published_at); + var formattedDate = "{0}-{1}-{2} {3}:{4}".format( + date.getFullYear(), + date.getMonth() + 1, + date.getDate(), + date.getUTCHours(), + date.getMinutes() + ); + + var descriptor = { + "releaseUrl": release.html_url, + "name" : semver.clean(release.name), + "version" : release.tag_name, + "url" : asset.browser_download_url, + "file" : asset.name, + "target" : target, + "date" : formattedDate, + "notes" : release.body, + "status" : release.prerelease ? "release-candidate" : "stable" + }; + + releaseDescriptors.push(descriptor); + }); + }); + + releaseDescriptors.sort(function(o1,o2){ + // compare versions descending + var cmpVal = semver(o2.version).compare(semver(o1.version)); + if (cmpVal == 0){ + // compare target names ascending + cmpVal = (o1.targeto2.target?1:0)); + } + return cmpVal; + }); + + var optionIndex = 1; + releaseDescriptors.forEach(function(descriptor){ + var select_e = + $("".format( + optionIndex++, + descriptor.name, + descriptor.target, + descriptor.date, + descriptor.status + )).data('summary', descriptor); + + releases_e.append(select_e); + }); + }; + + + var processReleases = function (releases){ + var promises = []; + releases.forEach(function(release){ + var promise = Q.defer(); + promises.push(promise); + $.get(release.assets_url). + done(function(assets){ + release.assets = assets; + promise.resolve(assets); + } + ). + fail(function(reason){ + promise.reject(reason); + } + ); + }); + + Q.all(promises).then(function(){ + buildFirmwareOptions(); + }) + }; + + $.get('https://api.github.com/repos/cleanflight/cleanflight/releases', function (releases){ + processReleases(releases); + TABS.firmware_flasher.releases = releases; + + // bind events + $('select[name="release"]').change(function() { + if (!GUI.connect_lock) { + $('.progress').val(0).removeClass('valid invalid'); + $('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherLoadFirmwareFile')); + $('div.git_info').slideUp(); + $('div.release_info').slideUp(); + $('a.flash_firmware').addClass('locked'); + } + }); + + }).fail(function (data){ + if (data["responseJSON"]){ + GUI.log("GITHUB Query Failed: {0}".format(data["responseJSON"].message)); + } + $('select[name="release"]').empty().append(''); + }); + + + // UI Hooks + $('a.load_file').click(function () { + chrome.fileSystem.chooseEntry({type: 'openFile', accepts: [{extensions: ['hex']}]}, function (fileEntry) { + if (chrome.runtime.lastError) { + console.error(chrome.runtime.lastError.message); + + return; + } + + // hide github info (if it exists) + $('div.git_info').slideUp(); + + chrome.fileSystem.getDisplayPath(fileEntry, function (path) { + console.log('Loading file from: ' + path); + + fileEntry.file(function (file) { + var reader = new FileReader(); + + reader.onprogress = function (e) { + if (e.total > 1048576) { // 1 MB + // dont allow reading files bigger then 1 MB + console.log('File limit (1 MB) exceeded, aborting'); + reader.abort(); + } + }; + + reader.onloadend = function(e) { + if (e.total != 0 && e.total == e.loaded) { + console.log('File loaded'); + + intel_hex = e.target.result; + + parse_hex(intel_hex, function (data) { + parsed_hex = data; + + if (parsed_hex) { + googleAnalytics.sendEvent('Flashing', 'Firmware', 'local'); + $('a.flash_firmware').removeClass('locked'); + + $('span.progressLabel').text('Loaded Local Firmware: (' + parsed_hex.bytes_total + ' bytes)'); + } else { + $('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherHexCorrupted')); + } + }); + } + }; + + reader.readAsText(file); + }); + }); + }); + }); + + /** + * Lock / Unlock the firmware download button according to the firmware selection dropdown. + */ + $('select[name="release"]').change(function(evt){ + if (evt.target.value=="0") { + $("a.load_remote_file").addClass('locked'); + } + else { + $("a.load_remote_file").removeClass('locked'); + } + }); + + $('a.load_remote_file').click(function (evt) { + + if ($('select[name="release"]').val() == "0") { + GUI.log("No firmware selected to load"); + return; + } + + function process_hex(data, summary) { + intel_hex = data; + + parse_hex(intel_hex, function (data) { + parsed_hex = data; + + if (parsed_hex) { + var url; + + googleAnalytics.sendEvent('Flashing', 'Firmware', 'online'); + $('span.progressLabel').html('Loaded Online Firmware: (' + parsed_hex.bytes_total + ' bytes)'); + + $('a.flash_firmware').removeClass('locked'); + + if (summary.commit) { + $.get('https://api.github.com/repos/cleanflight/cleanflight/commits/' + summary.commit, function (data) { + var data = data, + d = new Date(data.commit.author.date), + offset = d.getTimezoneOffset() / 60, + date; + + date = d.getFullYear() + '.' + ('0' + (d.getMonth() + 1)).slice(-2) + '.' + ('0' + (d.getDate())).slice(-2); + date += ' @ ' + ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2); + date += (offset > 0) ? ' GMT+' + offset : ' GMT' + offset; + + $('div.git_info .committer').text(data.commit.author.name); + $('div.git_info .date').text(date); + $('div.git_info .hash').text(data.sha.slice(0, 7)).prop('href', 'https://github.com/cleanflight/cleanflight/commit/' + data.sha); + + $('div.git_info .message').text(data.commit.message); + + $('div.git_info').slideDown(); + }); + } + + $('div.release_info .target').text(summary.target); + + var status_e = $('div.release_info .status'); + if (summary.status == 'release-candidate') { + $('div.release_info .status').html(chrome.i18n.getMessage('firmwareFlasherReleaseStatusReleaseCandidate')).show(); + } else { + status_e.hide(); + } + + $('div.release_info .name').text(summary.name).prop('href', summary.releaseUrl); + $('div.release_info .date').text(summary.date); + $('div.release_info .file').text(summary.file).prop('href', summary.url); + + var formattedNotes = summary.notes.trim('\r').replace(/\r/g, '
'); + $('div.release_info .notes').html(formattedNotes); + + $('div.release_info').slideDown(); + + } else { + $('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherHexCorrupted')); + } + }); + } + + function failed_to_load() { + $('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherFailedToLoadOnlineFirmware')); + $('a.flash_firmware').addClass('locked'); + } + + var summary = $('select[name="release"] option:selected').data('summary'); + + if (summary) { // undefined while list is loading or while running offline + $.get(summary.url, function (data) { + process_hex(data, summary); + }).fail(failed_to_load); + } else { + $('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherFailedToLoadOnlineFirmware')); + } + }); + + $('a.flash_firmware').click(function () { + if (!$(this).hasClass('locked')) { + if (!GUI.connect_lock) { // button disabled while flashing is in progress + if (parsed_hex != false) { + if (String($('div#port-picker #port').val()) != 'DFU') { + if (String($('div#port-picker #port').val()) != '0') { + var options = {}, + port = String($('div#port-picker #port').val()), + baud; + + switch (GUI.operating_system) { + case 'Windows': + case 'MacOS': + case 'ChromeOS': + case 'Linux': + case 'UNIX': + baud = 921600; + break; + + default: + baud = 115200; + } + + if ($('input.updating').is(':checked')) { + options.no_reboot = true; + } else { + options.reboot_baud = parseInt($('div#port-picker #baud').val()); + } + + if ($('input.erase_chip').is(':checked')) { + options.erase_chip = true; + } + + if ($('input.flash_manual_baud').is(':checked')) { + baud = parseInt($('#flash_manual_baud_rate').val()); + } + + + STM32.connect(port, baud, parsed_hex, options); + } else { + console.log('Please select valid serial port'); + GUI.log('Please select valid serial port'); + } + } else { + STM32DFU.connect(usbDevices.STM32DFU, parsed_hex); + } + } else { + $('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherFirmwareNotLoaded')); + } + } + } + }); + + $(document).on('click', 'span.progressLabel a.save_firmware', function () { + chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: 'baseflight', accepts: [{extensions: ['hex']}]}, function (fileEntry) { + if (chrome.runtime.lastError) { + console.error(chrome.runtime.lastError.message); + return; + } + + chrome.fileSystem.getDisplayPath(fileEntry, function (path) { + console.log('Saving firmware to: ' + path); + + // check if file is writable + chrome.fileSystem.isWritableEntry(fileEntry, function (isWritable) { + if (isWritable) { + var blob = new Blob([intel_hex], {type: 'text/plain'}); + + fileEntry.createWriter(function (writer) { + var truncated = false; + + writer.onerror = function (e) { + console.error(e); + }; + + writer.onwriteend = function() { + if (!truncated) { + // onwriteend will be fired again when truncation is finished + truncated = true; + writer.truncate(blob.size); + + return; + } + }; + + writer.write(blob); + }, function (e) { + console.error(e); + }); + } else { + console.log('You don\'t have write permissions for this file, sorry.'); + GUI.log('You don\'t have write permissions for this file'); + } + }); + }); + }); + }); + + chrome.storage.local.get('no_reboot_sequence', function (result) { + if (result.no_reboot_sequence) { + $('input.updating').prop('checked', true); + $('.flash_on_connect_wrapper').show(); + } else { + $('input.updating').prop('checked', false); + } + + // bind UI hook so the status is saved on change + $('input.updating').change(function() { + var status = $(this).is(':checked'); + + if (status) { + $('.flash_on_connect_wrapper').show(); + } else { + $('input.flash_on_connect').prop('checked', false).change(); + $('.flash_on_connect_wrapper').hide(); + } + + chrome.storage.local.set({'no_reboot_sequence': status}); + }); + }); + + chrome.storage.local.get('flash_manual_baud', function (result) { + if (result.flash_manual_baud) { + $('input.flash_manual_baud').prop('checked', true); + } else { + $('input.flash_manual_baud').prop('checked', false); + } + + // bind UI hook so the status is saved on change + $('input.flash_manual_baud').change(function() { + var status = $(this).is(':checked'); + + chrome.storage.local.set({'flash_manual_baud': status}); + }); + + $('input.flash_manual_baud').change(); + }); + + chrome.storage.local.get('flash_manual_baud_rate', function (result) { + $('#flash_manual_baud_rate').val(result.flash_manual_baud_rate); + + // bind UI hook so the status is saved on change + $('#flash_manual_baud_rate').change(function() { + var baud = parseInt($('#flash_manual_baud_rate').val()); + chrome.storage.local.set({'flash_manual_baud_rate': baud}); + }); + + $('input.flash_manual_baud_rate').change(); + }); + + chrome.storage.local.get('flash_on_connect', function (result) { + if (result.flash_on_connect) { + $('input.flash_on_connect').prop('checked', true); + } else { + $('input.flash_on_connect').prop('checked', false); + } + + $('input.flash_on_connect').change(function () { + var status = $(this).is(':checked'); + + if (status) { + var catch_new_port = function () { + PortHandler.port_detected('flash_detected_device', function (result) { + var port = result[0]; + + if (!GUI.connect_lock) { + GUI.log('Detected: ' + port + ' - triggering flash on connect'); + console.log('Detected: ' + port + ' - triggering flash on connect'); + + // Trigger regular Flashing sequence + GUI.timeout_add('initialization_timeout', function () { + $('a.flash_firmware').click(); + }, 100); // timeout so bus have time to initialize after being detected by the system + } else { + GUI.log('Detected ' + port + ' - previous device still flashing, please replug to try again'); + } + + // Since current port_detected request was consumed, create new one + catch_new_port(); + }, false, true); + }; + + catch_new_port(); + } else { + PortHandler.flush_callbacks(); + } + + chrome.storage.local.set({'flash_on_connect': status}); + }).change(); + }); + + chrome.storage.local.get('erase_chip', function (result) { + if (result.erase_chip) { + $('input.erase_chip').prop('checked', true); + } else { + $('input.erase_chip').prop('checked', false); + } + + // bind UI hook so the status is saved on change + $('input.erase_chip').change(function () { + chrome.storage.local.set({'erase_chip': $(this).is(':checked')}); + }); + }); + + $(document).keypress(function (e) { + if (e.which == 13) { // enter + // Trigger regular Flashing sequence + $('a.flash_firmware').click(); + } + }); + + if (callback) callback(); + }); +}; + +TABS.firmware_flasher.cleanup = function (callback) { + PortHandler.flush_callbacks(); + + // unbind "global" events + $(document).unbind('keypress'); + $(document).off('click', 'span.progressLabel a'); + + if (callback) callback(); +}; \ No newline at end of file diff --git a/tabs/firmware_flasher.html b/tabs/firmware_flasher.html index 7bf2c631..26d011d7 100755 --- a/tabs/firmware_flasher.html +++ b/tabs/firmware_flasher.html @@ -8,28 +8,28 @@
@@ -93,4 +93,4 @@
-
\ No newline at end of file +
diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js index a7e7e940..acc631fa 100755 --- a/tabs/firmware_flasher.js +++ b/tabs/firmware_flasher.js @@ -8,7 +8,8 @@ TABS.firmware_flasher.initialize = function (callback) { GUI.active_tab = 'firmware_flasher'; googleAnalytics.sendAppView('Firmware Flasher'); } - + + var intel_hex = false, // standard intel hex in string format parsed_hex = false; // parsed raw hex in array format @@ -16,7 +17,19 @@ TABS.firmware_flasher.initialize = function (callback) { // translate to user-selected language localize(); - function parse_hex(str, callback) { + // load switchery + var elems = Array.prototype.slice.call(document.querySelectorAll('#toggle')); + +elems.forEach(function(html) { + var switchery = new Switchery(html, + { + color: '#59aa29', + secondaryColor: '#c4c4c4' +}); + }); + + + function parse_hex(str, callback) { // parsing hex in different thread var worker = new Worker('./js/workers/hex_parser.js'); @@ -526,4 +539,7 @@ TABS.firmware_flasher.cleanup = function (callback) { $(document).off('click', 'span.progressLabel a'); if (callback) callback(); -}; \ No newline at end of file +}; + + + diff --git a/tabs/landing kopie.html b/tabs/landing kopie.html new file mode 100644 index 00000000..635f5e12 --- /dev/null +++ b/tabs/landing kopie.html @@ -0,0 +1,66 @@ +
+
+
+

+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+

+
+ +
+
+
+
+

+ • MassiveRC
+

+

+ • Armattan Quads
+

+

+ • Bungeecow Multirotors
+

+

+ • Immersion RC
+

+

+ • RadioC
+

+

+ • MultiiWiiCopter
+

+

+ • OverSkyRC
+

+
+
+
+
\ No newline at end of file diff --git a/tabs/landing.html b/tabs/landing.html index 635f5e12..b50bcf8b 100644 --- a/tabs/landing.html +++ b/tabs/landing.html @@ -22,7 +22,8 @@
-
+
+
diff --git a/tabs/landing.js b/tabs/landing.js index 9845c0e0..f943bca0 100644 --- a/tabs/landing.js +++ b/tabs/landing.js @@ -12,7 +12,8 @@ TABS.landing.initialize = function (callback) { $('#content').load("./tabs/landing.html", function () { //check_usb_permissions(); // temporary enabled in dev branch, should be commented out untill DFU support goes live - // translate to user-selected language + +// translate to user-selected language localize(); // load changelog content @@ -28,4 +29,10 @@ TABS.landing.initialize = function (callback) { TABS.landing.cleanup = function (callback) { if (callback) callback(); -}; \ No newline at end of file +}; + + + + + + diff --git a/test.html b/test.html new file mode 100644 index 00000000..4b45c37e --- /dev/null +++ b/test.html @@ -0,0 +1,63 @@ + + + + +Unbenanntes Dokument + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + +