mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-12-03 04:17:34 -05:00
105 lines
3 KiB
JavaScript
105 lines
3 KiB
JavaScript
var ButtonBackBright = {
|
|
classes: "btn-primary",
|
|
action: "back",
|
|
key: "errors.buttons.back"
|
|
},
|
|
ButtonBackDim = {
|
|
classes: "",
|
|
action: "back",
|
|
key: "errors.buttons.back"
|
|
},
|
|
ButtonTryAgain = {
|
|
classes: "btn-primary",
|
|
action: "tryLoading",
|
|
key: "errors.buttons.again"
|
|
},
|
|
ButtonLoadPage = {
|
|
classes: "btn-primary",
|
|
action: "tryLoading",
|
|
key: "errors.buttons.fixed"
|
|
};
|
|
|
|
// The controller for the nice error page
|
|
export default Ember.Controller.extend({
|
|
thrown: null,
|
|
lastTransition: null,
|
|
|
|
isNetwork: function() {
|
|
// never made it on the wire
|
|
if (this.get('thrown.readyState') === 0) return true;
|
|
// timed out
|
|
if (this.get('thrown.jqTextStatus') === "timeout") return true;
|
|
return false;
|
|
}.property(),
|
|
isNotFound: Em.computed.equal('thrown.status', 404),
|
|
isForbidden: Em.computed.equal('thrown.status', 403),
|
|
isServer: Em.computed.gte('thrown.status', 500),
|
|
isUnknown: Em.computed.none('isNetwork', 'isServer'),
|
|
|
|
// TODO
|
|
// make ajax requests to /srv/status with exponential backoff
|
|
// if one succeeds, set networkFixed to true, which puts a "Fixed!" message on the page
|
|
networkFixed: false,
|
|
loading: false,
|
|
|
|
_init: function() {
|
|
this.set('loading', false);
|
|
}.on('init'),
|
|
|
|
reason: function() {
|
|
if (this.get('isNetwork')) {
|
|
return I18n.t('errors.reasons.network');
|
|
} else if (this.get('isServer')) {
|
|
return I18n.t('errors.reasons.server');
|
|
} else if (this.get('isNotFound')) {
|
|
return I18n.t('errors.reasons.not_found');
|
|
} else if (this.get('isForbidden')) {
|
|
return I18n.t('errors.reasons.forbidden');
|
|
} else {
|
|
// TODO
|
|
return I18n.t('errors.reasons.unknown');
|
|
}
|
|
}.property('isNetwork', 'isServer', 'isUnknown'),
|
|
|
|
requestUrl: Em.computed.alias('thrown.requestedUrl'),
|
|
|
|
desc: function() {
|
|
if (this.get('networkFixed')) {
|
|
return I18n.t('errors.desc.network_fixed');
|
|
} else if (this.get('isNetwork')) {
|
|
return I18n.t('errors.desc.network');
|
|
} else if (this.get('isNotFound')) {
|
|
return I18n.t('errors.desc.not_found');
|
|
} else if (this.get('isServer')) {
|
|
return I18n.t('errors.desc.server', { status: this.get('thrown.status') + " " + this.get('thrown.statusText') });
|
|
} else {
|
|
// TODO
|
|
return I18n.t('errors.desc.unknown');
|
|
}
|
|
}.property('networkFixed', 'isNetwork', 'isServer', 'isUnknown'),
|
|
|
|
enabledButtons: function() {
|
|
if (this.get('networkFixed')) {
|
|
return [ButtonLoadPage];
|
|
} else if (this.get('isNetwork')) {
|
|
return [ButtonBackDim, ButtonTryAgain];
|
|
} else {
|
|
return [ButtonBackBright, ButtonTryAgain];
|
|
}
|
|
}.property('networkFixed', 'isNetwork', 'isServer', 'isUnknown'),
|
|
|
|
actions: {
|
|
back: function() {
|
|
window.history.back();
|
|
},
|
|
|
|
tryLoading: function() {
|
|
this.set('loading', true);
|
|
var self = this;
|
|
Em.run.schedule('afterRender', function() {
|
|
self.get('lastTransition').retry();
|
|
self.set('loading', false);
|
|
});
|
|
}
|
|
}
|
|
});
|