diff --git a/index.html b/index.html
index 0c675d64e..77fce4dff 100644
--- a/index.html
+++ b/index.html
@@ -33,6 +33,7 @@
+
diff --git a/js/id/connection.js b/js/id/connection.js
index 629122f86..e06260810 100644
--- a/js/id/connection.js
+++ b/js/id/connection.js
@@ -91,9 +91,9 @@ iD.Connection = function() {
}
function authenticate(callback) {
- return oauth.authenticate(function() {
+ return oauth.authenticate(function(err, res) {
event.auth();
- if (callback) callback();
+ if (callback) callback(err, res);
});
}
diff --git a/js/id/id.js b/js/id/id.js
index 9c1f8196a..a58dfafb2 100644
--- a/js/id/id.js
+++ b/js/id/id.js
@@ -96,7 +96,7 @@ window.iD = function(container) {
})) > 0;
if (has_changes) {
- connection.authenticate(function() {
+ connection.authenticate(function(err) {
var modal = iD.modal();
modal.select('.content')
.classed('commit-modal', true)
@@ -108,17 +108,8 @@ window.iD = function(container) {
.on('save', save));
});
} else {
- var modal = iD.modal();
- modal.select('.modal').classed('modal-alert', true);
- modal.select('.content')
- .append('p')
+ iD.confirm().select('.description')
.text('You don\'t have any changes to save.');
- modal.select('.content')
- .append('button')
- .text('OK')
- .on('click', function() {
- modal.remove();
- });
}
});
diff --git a/js/id/oauth.js b/js/id/oauth.js
index 874800a9f..366b4e12f 100644
--- a/js/id/oauth.js
+++ b/js/id/oauth.js
@@ -57,8 +57,8 @@ iD.OAuth = function() {
oauth.authenticate = function(callback) {
if (oauth.authenticated()) return callback();
- oauth.logout();
+ oauth.logout();
o = timenonce(o);
var url = baseurl + '/oauth/request_token';
@@ -66,9 +66,14 @@ iD.OAuth = function() {
ohauth.baseString('POST', url, o));
var l = iD.loading('contacting openstreetmap...');
+
ohauth.xhr('POST', url, o, null, {}, function(err, xhr) {
+ if (err) callback(err);
l.remove();
- var resp = ohauth.stringQs(xhr.response);
+ authorize(ohauth.stringQs(xhr.response));
+ });
+
+ function authorize(resp) {
token('oauth_request_token_secret', resp.oauth_token_secret);
var modal = iD.modal();
modal
@@ -82,26 +87,32 @@ iD.OAuth = function() {
.on('load', function() {
if (this.contentWindow.location.search) {
var search = this.contentWindow.location.search,
- oauth_token = ohauth.stringQs(search.slice(1)),
- url = baseurl + '/oauth/access_token';
- o = timenonce(o);
+ oauth_token = ohauth.stringQs(search.slice(1));
modal.remove();
-
- o.oauth_token = oauth_token.oauth_token;
- var request_token_secret = token('oauth_request_token_secret');
- o.oauth_signature = ohauth.signature(oauth_secret, request_token_secret,
- ohauth.baseString('POST', url, o));
- var l = iD.loading('contacting openstreetmap...');
- ohauth.xhr('POST', url, o, null, {}, function(err, xhr) {
- l.remove();
- var access_token = ohauth.stringQs(xhr.response);
- token('oauth_token', access_token.oauth_token);
- token('oauth_token_secret', access_token.oauth_token_secret);
- callback();
- });
+ get_access_token(oauth_token);
}
});
- });
+ }
+
+ function get_access_token(oauth_token) {
+ var url = baseurl + '/oauth/access_token';
+ o = timenonce(o);
+
+ o.oauth_token = oauth_token.oauth_token;
+ var request_token_secret = token('oauth_request_token_secret');
+ o.oauth_signature = ohauth.signature(oauth_secret, request_token_secret,
+ ohauth.baseString('POST', url, o));
+ var l = iD.loading('contacting openstreetmap...');
+ ohauth.xhr('POST', url, o, null, {}, function(err, xhr) {
+ if (err) callback(err);
+ l.remove();
+ var access_token = ohauth.stringQs(xhr.response);
+ token('oauth_token', access_token.oauth_token);
+ token('oauth_token_secret', access_token.oauth_token_secret);
+ callback();
+ });
+ }
+
};
oauth.api = function(_) {