Moved Discourse.ajax into a mixin.
This commit is contained in:
parent
20f3707fbe
commit
894dc2c6fd
|
@ -7,7 +7,7 @@
|
||||||
@class Discourse
|
@class Discourse
|
||||||
@extends Ember.Application
|
@extends Ember.Application
|
||||||
**/
|
**/
|
||||||
Discourse = Ember.Application.createWithMixins({
|
Discourse = Ember.Application.createWithMixins(Discourse.Ajax, {
|
||||||
rootElement: '#main',
|
rootElement: '#main',
|
||||||
|
|
||||||
// Whether the app has focus or not
|
// Whether the app has focus or not
|
||||||
|
@ -181,71 +181,6 @@ Discourse = Ember.Application.createWithMixins({
|
||||||
if(this.get('loginRequired')) { route.transitionTo('login'); }
|
if(this.get('loginRequired')) { route.transitionTo('login'); }
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
Our own $.ajax method. Makes sure the .then method executes in an Ember runloop
|
|
||||||
for performance reasons. Also automatically adjusts the URL to support installs
|
|
||||||
in subfolders.
|
|
||||||
|
|
||||||
@method ajax
|
|
||||||
**/
|
|
||||||
ajax: function() {
|
|
||||||
|
|
||||||
var url, args;
|
|
||||||
|
|
||||||
if (arguments.length === 1) {
|
|
||||||
if (typeof arguments[0] === "string") {
|
|
||||||
url = arguments[0];
|
|
||||||
args = {};
|
|
||||||
} else {
|
|
||||||
args = arguments[0];
|
|
||||||
url = args.url;
|
|
||||||
delete args.url;
|
|
||||||
}
|
|
||||||
} else if (arguments.length === 2) {
|
|
||||||
url = arguments[0];
|
|
||||||
args = arguments[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.success) {
|
|
||||||
console.warning("DEPRECATION: Discourse.ajax should use promises, received 'success' callback");
|
|
||||||
}
|
|
||||||
if (args.error) {
|
|
||||||
console.warning("DEPRECATION: Discourse.ajax should use promises, received 'error' callback");
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we have URL_FIXTURES, load from there instead (testing)
|
|
||||||
var fixture = Discourse.URL_FIXTURES && Discourse.URL_FIXTURES[url];
|
|
||||||
if (fixture) {
|
|
||||||
return Ember.RSVP.resolve(fixture);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Ember.Deferred.promise(function (promise) {
|
|
||||||
var oldSuccess = args.success;
|
|
||||||
args.success = function(xhr) {
|
|
||||||
Ember.run(promise, promise.resolve, xhr);
|
|
||||||
if (oldSuccess) oldSuccess(xhr);
|
|
||||||
};
|
|
||||||
|
|
||||||
var oldError = args.error;
|
|
||||||
args.error = function(xhr) {
|
|
||||||
|
|
||||||
// If it's a parseerror, don't reject
|
|
||||||
if (xhr.status === 200) return args.success(xhr);
|
|
||||||
|
|
||||||
promise.reject(xhr);
|
|
||||||
if (oldError) oldError(xhr);
|
|
||||||
};
|
|
||||||
|
|
||||||
// We default to JSON on GET. If we don't, sometimes if the server doesn't return the proper header
|
|
||||||
// it will not be parsed as an object.
|
|
||||||
if (!args.type) args.type = 'GET';
|
|
||||||
if ((!args.dataType) && (args.type === 'GET')) args.dataType = 'json';
|
|
||||||
|
|
||||||
$.ajax(Discourse.getURL(url), args);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Subscribes the current user to receive message bus notifications
|
Subscribes the current user to receive message bus notifications
|
||||||
**/
|
**/
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
This mixin provides an 'ajax' method that can be used to perform ajax requests that
|
||||||
|
respect Discourse paths and the run loop.
|
||||||
|
|
||||||
|
@class Discourse.Ajax
|
||||||
|
@extends Ember.Mixin
|
||||||
|
@namespace Discourse
|
||||||
|
@module Discourse
|
||||||
|
**/
|
||||||
|
Discourse.Ajax = Em.Mixin.create({
|
||||||
|
|
||||||
|
/**
|
||||||
|
Our own $.ajax method. Makes sure the .then method executes in an Ember runloop
|
||||||
|
for performance reasons. Also automatically adjusts the URL to support installs
|
||||||
|
in subfolders.
|
||||||
|
|
||||||
|
@method ajax
|
||||||
|
**/
|
||||||
|
ajax: function() {
|
||||||
|
var url, args;
|
||||||
|
|
||||||
|
if (arguments.length === 1) {
|
||||||
|
if (typeof arguments[0] === "string") {
|
||||||
|
url = arguments[0];
|
||||||
|
args = {};
|
||||||
|
} else {
|
||||||
|
args = arguments[0];
|
||||||
|
url = args.url;
|
||||||
|
delete args.url;
|
||||||
|
}
|
||||||
|
} else if (arguments.length === 2) {
|
||||||
|
url = arguments[0];
|
||||||
|
args = arguments[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.success) {
|
||||||
|
console.warning("DEPRECATION: Discourse.ajax should use promises, received 'success' callback");
|
||||||
|
}
|
||||||
|
if (args.error) {
|
||||||
|
console.warning("DEPRECATION: Discourse.ajax should use promises, received 'error' callback");
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we have URL_FIXTURES, load from there instead (testing)
|
||||||
|
var fixture = Discourse.URL_FIXTURES && Discourse.URL_FIXTURES[url];
|
||||||
|
if (fixture) {
|
||||||
|
return Ember.RSVP.resolve(fixture);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ember.Deferred.promise(function (promise) {
|
||||||
|
var oldSuccess = args.success;
|
||||||
|
args.success = function(xhr) {
|
||||||
|
Ember.run(promise, promise.resolve, xhr);
|
||||||
|
if (oldSuccess) oldSuccess(xhr);
|
||||||
|
};
|
||||||
|
|
||||||
|
var oldError = args.error;
|
||||||
|
args.error = function(xhr) {
|
||||||
|
|
||||||
|
// If it's a parseerror, don't reject
|
||||||
|
if (xhr.status === 200) return args.success(xhr);
|
||||||
|
|
||||||
|
promise.reject(xhr);
|
||||||
|
if (oldError) oldError(xhr);
|
||||||
|
};
|
||||||
|
|
||||||
|
// We default to JSON on GET. If we don't, sometimes if the server doesn't return the proper header
|
||||||
|
// it will not be parsed as an object.
|
||||||
|
if (!args.type) args.type = 'GET';
|
||||||
|
if ((!args.dataType) && (args.type === 'GET')) args.dataType = 'json';
|
||||||
|
|
||||||
|
$.ajax(Discourse.getURL(url), args);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
//= require_tree ./external
|
//= require_tree ./external
|
||||||
|
|
||||||
//= require ./discourse/helpers/i18n_helpers
|
//= require ./discourse/helpers/i18n_helpers
|
||||||
|
//= require ./discourse/mixins/ajax
|
||||||
//= require ./discourse
|
//= require ./discourse
|
||||||
|
|
||||||
// Pagedown customizations
|
// Pagedown customizations
|
||||||
|
|
Loading…
Reference in New Issue