AJAX calls are now async.

* JS file is now versioned.
* AJAX calls are now asynchronous (since many browsers no longer support
  synchronous calls).
This commit is contained in:
Jonathan Bernard 2014-09-06 22:15:06 -05:00
parent 64e90eaeb5
commit 7ba8d76843
3 changed files with 60 additions and 54 deletions

View File

@ -1,17 +1,19 @@
VERSION =1.4
VERSION =1.5
BUILD_NUMBER_FILE = build-number.txt
BUILD_NUMBER = $$(cat $(BUILD_NUMBER_FILE))
build : increment-build-number
mkdir -p build/css
mkdir -p build/js
cp src/www/*.* build
cp -r src/www/js build
cp -r resources/* build/.
cp src/www/js/personal-display.js build/js/personal-display-$(VERSION).$(BUILD_NUMBER)js
sed -i "s/%VERSION%/$(VERSION).$(BUILD_NUMBER)/g" build/index.html
sass src/www/css/personal-display.scss build/css/personal-display.css
tar czf personal-display-$(VERSION).$(BUILD_NUMBER).tar.gz build
clean :
rm -r build
-rm -r build
local-deploy: build
cp -r build ~/temp/server

View File

@ -18,10 +18,10 @@
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone.js" defer></script>
-->
<script src="js/personal-display.js" type="text/javascript" defer></script>
<script src="js/personal-display-%VERSION%.js" type="text/javascript" defer></script>
<meta name="viewport" content="width=device-width, user-scalable=no">
<meta name=version content="1.4">
<meta name=version content="1.5">
</head>
<body>
<section id=current-task>

View File

@ -2,7 +2,7 @@
var root = this;
var PD = root.PersonalDisplay = {};
PD.version = "1.4"
PD.version = "1.5"
PD.hasHTML5LocalStorage = function() {
try {
@ -171,7 +171,6 @@
xhrFields: { withCredentials: true },
processData: false,
type: 'POST',
async: false,
data: JSON.stringify(
{"username": username, "password": password}),
@ -183,7 +182,10 @@
else { $(".validate-tips").text("There was an error " +
"trying to log into the TimeStamper service: " +
error); }
PD.tsAuth = false; },
PD.tsAuth = false;
// Hide the wait overlay.
this.$el.find(".wait-overlay").fadeOut(); },
success: function(data, textStatus, jqXHR) {
PD.tsAuth = true;
@ -192,11 +194,10 @@
// Load the user's timelines.
PD.configDialog.loadTsData(host, username);
}
});
// Success or failure we hide the wait overlay.
this.$el.find(".wait-overlay").fadeOut();
// Hide the wait overlay.
this.$el.find(".wait-overlay").fadeOut(); }
});
},
@ -217,7 +218,6 @@
xhrFields: { withCredentials: true },
processData: false,
type: 'POST',
async: false,
data: JSON.stringify(
{"username": username, "password": password}),
@ -229,48 +229,59 @@
else { $(".validate-tips").text("There was an error " +
"trying to log into the Getting Things Done service: " +
error); }
PD.gtdAuth = false; },
PD.gtdAuth = false;
this.$el.find(".wait-overlay").fadeOut(); },
success: function(data, textStatus, jqXHR) {
PD.gtdAuth = true;
$(".validate-tips").text("");
PD.configDialog.loadGtdData(host); }
PD.configDialog.loadGtdData(host);
this.$el.find(".wait-overlay").fadeOut(); }
});
this.$el.find(".wait-overlay").fadeOut();
},
loadTsData: function(host, username) {
var thisView = this;
// (Re)load the user's timelines.
PD.tsCfg.timelines = JSON.parse($.ajax({
$.ajax({
url: 'https://' + host + '/ts_api/timelines/' + username,
xhrFields: { withCredentials: true },
async: false}).responseText);
success: function(data, textStatus, jqXHR) {
debugger;
PD.tsCfg.timelines = data;
// Populate the available timelines list.
var $timelineSelectEl = this.$el.find(".timestamper-config .timeline");
var $timelineSelectEl = $(".timestamper-config .timeline");
$timelineSelectEl.empty();
_.forEach(PD.tsCfg.timelines, function(timeline) {
var $optionEl = $(document.createElement("option"));
$optionEl.attr("value", timeline.id);
$optionEl.text(timeline.description);
$timelineSelectEl.append($optionEl); }); },
$timelineSelectEl.append($optionEl); });
}}); },
loadGtdData: function(host) {
// Load the user's contexts
PD.gtdCfg.contexts = JSON.parse($.ajax({
var contextedLoaded = $.ajax({
url: 'http://' + host + '/gtd/contexts',
xhrFields: { withCredentials: true },
async: false }).responseText);
success: function(data, textStatus, jqXHR) {
PD.gtdCfg.contexts = data;} });
// Load the user's projects
PD.gtdCfg.projects = JSON.parse($.ajax({
var projectsLoaded = $.ajax({
url: 'http://' + host + '/gtd/projects',
xhrFields: { withCredentials: true },
async: false }).responseText);
success: function(data, statuxText, jqXHR) {
PD.gtdCfg.projects = data;} });
$.when(contextLoaded, projectsLoaded).then(function() {
// Populate the available contexts and projects drop-down.
var $categorySelectEl = $(".gtd-config .category")
$categorySelectEl.empty();
@ -283,7 +294,7 @@
$optionEl.attr("value", category.id);
$optionEl.text(category.id);
$categorySelectEl.append($optionEl); });
$categorySelectEl[0].selectedIndex = 0; },
$categorySelectEl[0].selectedIndex = 0; }},
makeCategoryItem: function(catName) {
var $liEl = $(
@ -394,7 +405,6 @@
xhrFields: { withCredentials: true },
processData: false,
type: "POST",
async: false,
data: JSON.stringify(
{ "username": PD.tsCfg.username,
@ -416,7 +426,6 @@
xhrFields: { withCredentials: true },
processData: false,
type: "POST",
async: false,
data: JSON.stringify(
{ "username": PD.gtdCfg.username,
@ -451,12 +460,10 @@
if (jqXHR.status == 401) { PD.tsAuth = false; }
else {
alert("Unable to retrieve current timestamp: " + errorText);
PD.configDialog.show(); }
},
PD.configDialog.show(); } },
success: function(data, textStatus, jqXHR) {
PD.currentActivityModel.set(data[0]); }
});
PD.currentActivityModel.set(data[0]); } });
// Get the list of GTD entries for each of our categories.
var categories = _.reduce(
@ -476,8 +483,7 @@
else if (jqXHR.status == 500) { return; }
else {
alert("Unable to retrieve next actions: " + errorText);
PD.configDialog.show(); }
},
PD.configDialog.show(); } },
success: function(data, textStatus, jqXHR) {
var collection = PD.gtdNextActionCollection;
@ -497,9 +503,7 @@
// longer in our retrieved data and remove them.
collection.forEach(function(model) {
if (!_.any(data, model.equals)) {
collection.remove(model); }});
}
});
collection.remove(model); }}); } });
if (evt) evt.preventDefault();
},