Skip to content

Commit

Permalink
feat(ajax): adds elgg/Ajax#forward method
Browse files Browse the repository at this point in the history
Adds a new method to elgg/Ajax AMD module that allows a redirect
to a new page while keeping the spinner running
  • Loading branch information
hypeJunction committed Mar 23, 2018
1 parent 1342615 commit 7fd6e57
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 9 deletions.
11 changes: 11 additions & 0 deletions docs/guides/ajax.rst
Expand Up @@ -249,6 +249,17 @@ Notes for forms:
In ajax views and forms, note that ``$vars`` can be populated by client input. The data is filtered like
``get_input()``, but may not be the type you're expecting or may have unexpected keys.

Redirects
---------

Use ``ajax.forward()`` to start a spinner and redirect the user to a new destination.

.. code-block:: js
var Ajax = require('elgg/Ajax');
var ajax = new Ajax();
ajax.forward('/activity');
Piggybacking on an Ajax request
-------------------------------
Expand Down
12 changes: 12 additions & 0 deletions views/default/elgg/Ajax.js
Expand Up @@ -351,6 +351,18 @@ define(function (require) {

return new FormData($(el)[0]);
};

/**
* Issue a redirect and display a spinner
*
* @param destination String URL to forward to
* @returns {void}
*/
this.forward = function(destination) {
spinner_starts++;
spinner.start();
elgg.forward(destination);
};
}

/**
Expand Down
15 changes: 6 additions & 9 deletions views/default/forms/login.js
Expand Up @@ -4,33 +4,30 @@ define(function(require) {
var Ajax = require('elgg/Ajax');
var spinner = require('elgg/spinner');

// manage Spinner manually
var ajax = new Ajax(false);

$(document).on('submit', '.elgg-form-login', function(e) {
var $form = $(this);

spinner.start();
var ajax = new Ajax();

ajax.action($form.prop('action'), {
data: ajax.objectify($form)
}).done(function(json, status, jqXHR) {
if (jqXHR.AjaxData.status == -1) {
if (jqXHR.AjaxData.status === -1) {
$('input[name=password]', $form).val('').focus();
spinner.stop();
return;
}

if (json) {
if (typeof json.forward === 'string') {
elgg.forward(json.forward);
ajax.forward(json.forward);
return;
} else if (json.forward === -1) {
elgg.forward(location.href);
ajax.forward(location.href);
return;
}
}

elgg.forward();
ajax.forward();
});

e.preventDefault();
Expand Down

0 comments on commit 7fd6e57

Please sign in to comment.