123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import $ from 'jquery';
- import toastr from './toastr';
- import isOnline from './offline';
- import { config } from 'grav-config';
- import trim from 'mout/string/trim';
- let UNLOADING = false;
- let error = function(response) {
- let error = new Error(response.statusText || response || '');
- error.response = response;
- return error;
- };
- export function parseStatus(response) {
- return response;
- /* Whoops can handle JSON responses so we don't need this for now.
- if (response.status >= 200 && response.status < 300) {
- return response;
- } else {
- throw error(response);
- }
- */
- }
- export function parseJSON(response) {
- return response.text().then((text) => {
- let parsed = text;
- try {
- parsed = JSON.parse(text);
- } catch (error) {
- let content = document.createElement('div');
- content.innerHTML = text;
- let the_error = new Error();
- the_error.stack = trim(content.innerText);
- throw the_error;
- }
- return parsed;
- });
- }
- export function userFeedback(response) {
- if (UNLOADING) { return true; }
- let status = response.status || (response.error ? 'error' : '');
- let message = response.message || (response.error ? response.error.message : null);
- let settings = response.toastr || null;
- let backup;
- switch (status) {
- case 'unauthenticated':
- document.location.href = config.base_url_relative;
- throw error('Logged out');
- case 'unauthorized':
- status = 'error';
- message = message || 'Unauthorized.';
- break;
- case 'error':
- status = 'error';
- message = message || 'Unknown error.';
- break;
- case 'success':
- status = 'success';
- message = message || '';
- break;
- default:
- status = 'error';
- message = message || 'Invalid AJAX response.';
- break;
- }
- if (settings) {
- backup = Object.assign({}, toastr.options);
- Object.keys(settings).forEach((key) => { toastr.options[key] = settings[key]; });
- }
- if (message && (isOnline || (!isOnline && status !== 'error'))) {
- toastr[status === 'success' ? 'success' : 'error'](message);
- }
- if (settings) {
- toastr.options = backup;
- }
- return response;
- }
- export function userFeedbackError(error) {
- if (UNLOADING) { return true; }
- let stack = error.stack ? `<pre><code>${error.stack}</code></pre>` : '';
- toastr.error(`Fetch Failed: <br /> ${error.message} ${stack}`);
- console.error(`${error.message} at ${error.stack}`);
- }
- $(global).on('beforeunload._ajax', () => {
- UNLOADING = true;
- });
|