diff options
Diffstat (limited to 'js/lib/ajax.js')
-rw-r--r-- | js/lib/ajax.js | 462 |
1 files changed, 231 insertions, 231 deletions
diff --git a/js/lib/ajax.js b/js/lib/ajax.js index 447d0c634..c84698a22 100644 --- a/js/lib/ajax.js +++ b/js/lib/ajax.js @@ -1,231 +1,231 @@ -/*globals elgg, $*/
-elgg.provide('elgg.ajax');
-
-/**
- * @author Evan Winslow
- * Provides a bunch of useful shortcut functions for making ajax calls
- */
-
-/**
- * Wrapper function for jQuery.ajax which ensures that the url being called
- * is relative to the elgg site root.
- *
- * You would most likely use elgg.get or elgg.post, rather than this function
- *
- * @param {string} url Optionally specify the url as the first argument
- * @param {Object} options Optional. {@see jQuery#ajax}
- * @return {XmlHttpRequest}
- */
-elgg.ajax = function(url, options) {
- options = elgg.ajax.handleOptions(url, options);
-
- options.url = elgg.normalize_url(options.url);
- return $.ajax(options);
-};
-/**
- * @const
- */
-elgg.ajax.SUCCESS = 0;
-
-/**
- * @const
- */
-elgg.ajax.ERROR = -1;
-
-/**
- * Handle optional arguments and return the resulting options object
- *
- * @param url
- * @param options
- * @return {Object}
- * @private
- */
-elgg.ajax.handleOptions = function(url, options) {
- var data_only = true,
- data,
- member;
-
- //elgg.ajax('example/file.php', {...});
- if (elgg.isString(url)) {
- options = options || {};
-
- //elgg.ajax({...});
- } else {
- options = url || {};
- url = options.url;
- }
-
- //elgg.ajax('example/file.php', function() {...});
- if (elgg.isFunction(options)) {
- data_only = false;
- options = {success: options};
- }
-
- //elgg.ajax('example/file.php', {data:{...}});
- if (options.data) {
- data_only = false;
- } else {
- for (member in options) {
- //elgg.ajax('example/file.php', {callback:function(){...}});
- if (elgg.isFunction(options[member])) {
- data_only = false;
- }
- }
- }
-
- //elgg.ajax('example/file.php', {notdata:notfunc});
- if (data_only) {
- data = options;
- options = {data: data};
- }
-
- if (url) {
- options.url = url;
- }
-
- return options;
-};
-
-/**
- * Wrapper function for elgg.ajax which forces the request type to 'get.'
- *
- * @param {string} url Optionally specify the url as the first argument
- * @param {Object} options {@see jQuery#ajax}
- * @return {XmlHttpRequest}
- */
-elgg.get = function(url, options) {
- options = elgg.ajax.handleOptions(url, options);
-
- options.type = 'get';
- return elgg.ajax(options);
-};
-
-/**
- * Wrapper function for elgg.get which forces the dataType to 'json.'
- *
- * @param {string} url Optionally specify the url as the first argument
- * @param {Object} options {@see jQuery#ajax}
- * @return {XmlHttpRequest}
- */
-elgg.getJSON = function(url, options) {
- options = elgg.ajax.handleOptions(url, options);
-
- options.dataType = 'json';
- return elgg.get(options);
-};
-
-/**
- * Wrapper function for elgg.ajax which forces the request type to 'post.'
- *
- * @param {string} url Optionally specify the url as the first argument
- * @param {Object} options {@see jQuery#ajax}
- * @return {XmlHttpRequest}
- */
-elgg.post = function(url, options) {
- options = elgg.ajax.handleOptions(url, options);
-
- options.type = 'post';
- return elgg.ajax(options);
-};
-
-/**
- * Perform an action via ajax
- *
- * @example Usage 1:
- * At its simplest, only the action name is required (and anything more than the
- * action name will be invalid).
- * <pre>
- * elgg.action('name/of/action');
- * </pre>
- * Note that it will *not* love you if you specify the full url as the action
- * (i.e. elgg.yoursite.com/action/name/of/action), but why would you want to do
- * that anyway, when you can just specify the action name?
- *
- * @example Usage 2:
- * If you want to pass some data along with it, use the second parameter
- * <pre>
- * elgg.action('friend/add', { friend: some_guid });
- * </pre>
- *
- * @example Usage 3:
- * Of course, you will have no control over what happens when the request
- * completes if you do it like that, so there's also the most verbose method
- * <pre>
- * elgg.action('friend/add', {
- * data: {
- * friend: some_guid
- * },
- * success: function(json) {
- * //do something
- * },
- * }
- * </pre>
- * You can pass any of your favorite $.ajax arguments into this second parameter.
- *
- * @note If you intend to use the second field in the "verbose" way, you must
- * specify a callback method or the data parameter. If you do not, elgg.action
- * will think you mean to send the second parameter as data.
- *
- * @note You do not have to add security tokens to this request. Elgg does that
- * for you automatically.
- *
- * @see jQuery.ajax
- *
- * @param {String} action The action to call.
- * @param {Object} options
- * @return {XMLHttpRequest}
- */
-elgg.action = function(action, options) {
- elgg.assertTypeOf('string', action);
-
- options = elgg.ajax.handleOptions('action/' + action, options);
-
- options.data = elgg.security.addToken(options.data);
- options.dataType = 'json';
-
- //Always display system messages after actions
- var custom_success = options.success || elgg.nullFunction;
- options.success = function(json, two, three, four) {
- if (json.system_messages) {
- elgg.register_error(json.system_messages.errors);
- elgg.system_message(json.system_messages.messages);
- }
-
- custom_success(json, two, three, four);
- };
-
- return elgg.post(options);
-};
-
-/**
- * Make an API call
- *
- * @example Usage:
- * <pre>
- * elgg.api('system.api.list', {
- * success: function(data) {
- * console.log(data);
- * }
- * });
- * </pre>
- *
- * @param {String} method The API method to be called
- * @param {Object} options {@see jQuery#ajax}
- * @return {XmlHttpRequest}
- */
-elgg.api = function (method, options) {
- elgg.assertTypeOf('string', method);
-
- var defaults = {
- dataType: 'json',
- data: {}
- };
-
- options = elgg.ajax.handleOptions(method, options);
- options = $.extend(defaults, options);
-
- options.url = 'services/api/rest/' + options.dataType + '/';
- options.data.method = method;
-
- return elgg.ajax(options);
-};
+/*globals elgg, $*/ +elgg.provide('elgg.ajax'); + +/** + * @author Evan Winslow + * Provides a bunch of useful shortcut functions for making ajax calls + */ + +/** + * Wrapper function for jQuery.ajax which ensures that the url being called + * is relative to the elgg site root. + * + * You would most likely use elgg.get or elgg.post, rather than this function + * + * @param {string} url Optionally specify the url as the first argument + * @param {Object} options Optional. {@see jQuery#ajax} + * @return {XmlHttpRequest} + */ +elgg.ajax = function(url, options) { + options = elgg.ajax.handleOptions(url, options); + + options.url = elgg.normalize_url(options.url); + return $.ajax(options); +}; +/** + * @const + */ +elgg.ajax.SUCCESS = 0; + +/** + * @const + */ +elgg.ajax.ERROR = -1; + +/** + * Handle optional arguments and return the resulting options object + * + * @param url + * @param options + * @return {Object} + * @private + */ +elgg.ajax.handleOptions = function(url, options) { + var data_only = true, + data, + member; + + //elgg.ajax('example/file.php', {...}); + if (elgg.isString(url)) { + options = options || {}; + + //elgg.ajax({...}); + } else { + options = url || {}; + url = options.url; + } + + //elgg.ajax('example/file.php', function() {...}); + if (elgg.isFunction(options)) { + data_only = false; + options = {success: options}; + } + + //elgg.ajax('example/file.php', {data:{...}}); + if (options.data) { + data_only = false; + } else { + for (member in options) { + //elgg.ajax('example/file.php', {callback:function(){...}}); + if (elgg.isFunction(options[member])) { + data_only = false; + } + } + } + + //elgg.ajax('example/file.php', {notdata:notfunc}); + if (data_only) { + data = options; + options = {data: data}; + } + + if (url) { + options.url = url; + } + + return options; +}; + +/** + * Wrapper function for elgg.ajax which forces the request type to 'get.' + * + * @param {string} url Optionally specify the url as the first argument + * @param {Object} options {@see jQuery#ajax} + * @return {XmlHttpRequest} + */ +elgg.get = function(url, options) { + options = elgg.ajax.handleOptions(url, options); + + options.type = 'get'; + return elgg.ajax(options); +}; + +/** + * Wrapper function for elgg.get which forces the dataType to 'json.' + * + * @param {string} url Optionally specify the url as the first argument + * @param {Object} options {@see jQuery#ajax} + * @return {XmlHttpRequest} + */ +elgg.getJSON = function(url, options) { + options = elgg.ajax.handleOptions(url, options); + + options.dataType = 'json'; + return elgg.get(options); +}; + +/** + * Wrapper function for elgg.ajax which forces the request type to 'post.' + * + * @param {string} url Optionally specify the url as the first argument + * @param {Object} options {@see jQuery#ajax} + * @return {XmlHttpRequest} + */ +elgg.post = function(url, options) { + options = elgg.ajax.handleOptions(url, options); + + options.type = 'post'; + return elgg.ajax(options); +}; + +/** + * Perform an action via ajax + * + * @example Usage 1: + * At its simplest, only the action name is required (and anything more than the + * action name will be invalid). + * <pre> + * elgg.action('name/of/action'); + * </pre> + * Note that it will *not* love you if you specify the full url as the action + * (i.e. elgg.yoursite.com/action/name/of/action), but why would you want to do + * that anyway, when you can just specify the action name? + * + * @example Usage 2: + * If you want to pass some data along with it, use the second parameter + * <pre> + * elgg.action('friend/add', { friend: some_guid }); + * </pre> + * + * @example Usage 3: + * Of course, you will have no control over what happens when the request + * completes if you do it like that, so there's also the most verbose method + * <pre> + * elgg.action('friend/add', { + * data: { + * friend: some_guid + * }, + * success: function(json) { + * //do something + * }, + * } + * </pre> + * You can pass any of your favorite $.ajax arguments into this second parameter. + * + * @note If you intend to use the second field in the "verbose" way, you must + * specify a callback method or the data parameter. If you do not, elgg.action + * will think you mean to send the second parameter as data. + * + * @note You do not have to add security tokens to this request. Elgg does that + * for you automatically. + * + * @see jQuery.ajax + * + * @param {String} action The action to call. + * @param {Object} options + * @return {XMLHttpRequest} + */ +elgg.action = function(action, options) { + elgg.assertTypeOf('string', action); + + options = elgg.ajax.handleOptions('action/' + action, options); + + options.data = elgg.security.addToken(options.data); + options.dataType = 'json'; + + //Always display system messages after actions + var custom_success = options.success || elgg.nullFunction; + options.success = function(json, two, three, four) { + if (json.system_messages) { + elgg.register_error(json.system_messages.errors); + elgg.system_message(json.system_messages.messages); + } + + custom_success(json, two, three, four); + }; + + return elgg.post(options); +}; + +/** + * Make an API call + * + * @example Usage: + * <pre> + * elgg.api('system.api.list', { + * success: function(data) { + * console.log(data); + * } + * }); + * </pre> + * + * @param {String} method The API method to be called + * @param {Object} options {@see jQuery#ajax} + * @return {XmlHttpRequest} + */ +elgg.api = function (method, options) { + elgg.assertTypeOf('string', method); + + var defaults = { + dataType: 'json', + data: {} + }; + + options = elgg.ajax.handleOptions(method, options); + options = $.extend(defaults, options); + + options.url = 'services/api/rest/' + options.dataType + '/'; + options.data.method = method; + + return elgg.ajax(options); +}; |