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() {