From a8a6b8904c228b99c693b7adec110979ca364bc0 Mon Sep 17 00:00:00 2001 From: Paul Rogalinski Date: Fri, 19 Dec 2014 03:58:42 +0100 Subject: [PATCH] fixed async issues, added string formatter proto --- main.js | 16 ++++++++ tabs/firmware_flasher.js | 80 ++++++++++++++++++++-------------------- 2 files changed, 56 insertions(+), 40 deletions(-) diff --git a/main.js b/main.js index 002580a8..161b513c 100644 --- a/main.js +++ b/main.js @@ -307,4 +307,20 @@ function bytesToSize(bytes) { Number.prototype.clamp = function(min, max) { return Math.min(Math.max(this, min), max); +}; + +/** + * String formatting now supports currying (partial application). + * For a format string with N replacement indices, you can call .format + * with M <= N arguments. The result is going to be a format string + * with N-M replacement indices, properly counting from 0 .. N-M. + * The following Example should explane the usage of partial aplied format: + * "{0}:{1}:{2}".format("a","b","c") === "{0}:{1}:{2}".format("a","b").format("c") + * "{0}:{1}:{2}".format("a").format("b").format("c") === "{0}:{1}:{2}".format("a").format("b", "c") + **/ +String.prototype.format = function () { + var args = arguments; + return this.replace(/\{(\d+)\}/g, function (t, i) { + return args[i] !== void 0 ? args[i] : "{"+(i-args.length)+"}"; + }); }; \ No newline at end of file diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js index 12991bb2..ea945935 100644 --- a/tabs/firmware_flasher.js +++ b/tabs/firmware_flasher.js @@ -29,53 +29,53 @@ TABS.firmware_flasher.initialize = function (callback) { worker.postMessage(str); } - // Fetch Releases + var processReleases = function (releases){ + var releases_e = $('select[name="release"]').empty(); - var processAssets = function(assets, release, releaseIndex) { - - console.log('in callback'); - console.log(release); // FIXME this is broken, release is undefined - - for (var assetIndex = 0; assetIndex < assets.length; assetIndex++) { - var asset = assets[assetIndex]; - - var targetFromFilenameExpression = /.*_(.*)\.(.*)/; - var match = targetFromFilenameExpression.exec(asset.name); - var target = match[1]; - var format = match[2]; - if (format != 'hex') { - continue; - } + 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++) { - var summary = { - "name" : release.name, - "url" : asset.browser_download_url, - "target" : target, - "date" : release.published_at, - "message" : release.body - }; - - var element = $('').data('obj', summary); - releases_e.append(element); - } - }; - - var processReleases = function(releases) { - var releases_e = $('select[name="release"]').empty(); + var asset = assets[assetIndex]; + var targetFromFilenameExpression = /.*_(.*)\.(.*)/; + var match = targetFromFilenameExpression.exec(asset.name); + var target = match[1]; + var format = match[2]; - for (var releaseIndex = 0; releaseIndex < releases.length; releaseIndex++) { - console.log('processing assets release ' + releaseIndex); - console.log(releases[releaseIndex]); + if (format != 'hex') { + continue; + } - $.get(releases[releaseIndex].assets_url).done(function (assets) { - processAssets(assets, releases[releaseIndex], releaseIndex); - }); + var summary = { + "name" : release.name, + "url" : asset.browser_download_url, + "target" : target, + "date" : release.published_at, + "message" : release.body + }; + + var date = new Date(summary.date); + var formattedDate = "{0}-{1}-{2} {3}:{4}".format(date.getFullYear(),date.getMonth(),date.getDay(), + date.getHours(),date.getMinutes()); + + releases_e.append( + $("". + format(releaseIndex,assetIndex,summary.name,summary.target,formattedDate) ) + .data('obj', summary)); + } + }).bind(this, releases, releaseIndex, releases_e) + ); } }; - - $.get('https://api.github.com/repos/cleanflight/cleanflight/releases', function (releases) { + + $.get('https://api.github.com/repos/cleanflight/cleanflight/releases', function (releases){ processReleases(releases); - }).fail(function () { + }).fail(function (data){ + if (data["responseJSON"]){ + GUI.log("GITHUB Query Failed: {0}".format(data["responseJSON"].message)); + } $('select[name="release"]').empty().append(''); });