diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 292ae275..4f2e5790 100755
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -1029,6 +1029,12 @@
"firmwareFlasherFlashSlowlyDescription": {
"message": "Use 115200 baudrate for flashing (useful for flashing via bluetooth)"
},
+ "firmwareFlasherShowDevelopmentReleases":{
+ "message": "Show unstable releases"
+ },
+ "firmwareFlasherShowDevelopmentReleasesDescription":{
+ "message": "Show Release-Candidates and Development Releases"
+ },
"firmwareFlasherOptionLabelSelectFirmware": {
"message": "Choose a Firmware / Board"
},
diff --git a/js/libraries/q.js b/js/libraries/q.js
new file mode 100755
index 00000000..c80c1378
--- /dev/null
+++ b/js/libraries/q.js
@@ -0,0 +1,1986 @@
+// vim:ts=4:sts=4:sw=4:
+/*!
+ *
+ * Copyright 2009-2012 Kris Kowal under the terms of the MIT
+ * license found at http://github.com/kriskowal/q/raw/master/LICENSE
+ *
+ * With parts by Tyler Close
+ * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
+ * at http://www.opensource.org/licenses/mit-license.html
+ * Forked at ref_send.js version: 2009-05-11
+ *
+ * With parts by Mark Miller
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+(function (definition) {
+ "use strict";
+
+ // This file will function properly as a
diff --git a/tabs/firmware_flasher.html b/tabs/firmware_flasher.html
index b83b09a7..e9559268 100755
--- a/tabs/firmware_flasher.html
+++ b/tabs/firmware_flasher.html
@@ -38,6 +38,13 @@
+
+
+
+
diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js
old mode 100644
new mode 100755
index a6434736..0b01ade9
--- a/tabs/firmware_flasher.js
+++ b/tabs/firmware_flasher.js
@@ -29,69 +29,98 @@ TABS.firmware_flasher.initialize = function (callback) {
worker.postMessage(str);
}
- var processReleases = function (releases){
- var releases_e = $('select[name="release"]').empty();
+ $('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'));
+ var optionIndex = 0;
releases_e.append($("".format(chrome.i18n.getMessage('firmwareFlasherOptionLabelSelectFirmware'))));
- for(var releaseIndex = 0; releaseIndex < releases.length; releaseIndex++){
- $.get(releases[releaseIndex].assets_url).done(
- (function (releases, releaseIndex, releases_e, assets){
- var release = releases[releaseIndex];
- for (var assetIndex = 0; assetIndex < assets.length; assetIndex++) {
+ TABS.firmware_flasher.releases.forEach(function(release){
+ release.assets.forEach(function(asset){
+ optionIndex++;
+ var targetFromFilenameExpression = /.*_(.*)\.(.*)/;
+ var match = targetFromFilenameExpression.exec(asset.name);
- var asset = assets[assetIndex];
- var targetFromFilenameExpression = /.*_(.*)\.(.*)/;
- var match = targetFromFilenameExpression.exec(asset.name);
- if (!match) {
- continue;
- }
- var target = match[1];
- var format = match[2];
+ if (!showDevReleases && release.prerelease) {
+ return;
+ }
- if (format != 'hex') {
- continue;
- }
+ if (!match) {
+ 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 summary = {
- "releaseUrl": release.html_url,
- "name" : release.name,
- "url" : asset.browser_download_url,
- "file" : asset.name,
- "target" : target,
- "date" : formattedDate,
- "notes" : release.body,
- "status" : release.prerelease ? "release-candidate" : "stable"
- };
+ var target = match[1];
+ var format = match[2];
- var select_e =
- $("".format(
- releaseIndex,
- assetIndex,
+ 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 summary = {
+ "releaseUrl": release.html_url,
+ "name" : release.name,
+ "url" : asset.browser_download_url,
+ "file" : asset.name,
+ "target" : target,
+ "date" : formattedDate,
+ "notes" : release.body,
+ "status" : release.prerelease ? "release-candidate" : "stable"
+ };
+
+ var select_e =
+ $("".format(
+ optionIndex,
summary.name,
summary.target,
summary.date,
summary.status
- )).data('summary', summary);
-
- releases_e.append(select_e);
+ )).data('summary', summary);
+
+ 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);
}
- }).bind(this, releases, releaseIndex, releases_e)
);
- }
+ });
+
+ 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() {