You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.3 KiB
JavaScript

define([
'jquery',
'underscore',
'marionette',
'lib/markdown',
'lib/syntax',
'widgets/slide/results',
'widgets/slide/template'
], function AppSlideWidget(
$,
_,
Marionette,
markdown,
syntax,
ResultsModel,
template
) {
'use strict';
var SlideView = Marionette.ItemView.extend({
template: template,
ui: {
copy: '.copy',
code: '.language-javascript',
button: '.request'
},
events: {
'click @ui.button': 'onRequestResult'
},
modelEvents: {
change: 'render'
},
onRender: function onRender() {
var copy = this.model.get('copy');
if (copy) {
this.ui.copy.html(markdown(copy));
}
var code = this.model.get('code');
if (code) {
this.ui.code.html(syntax(code));
}
},
onRequestResult: function onRequestResult(event) {
event.preventDefault();
var env = $(event.target).data('env');
if (env === 'clear') {
this.render();
return;
}
var results = new ResultsModel({id: this.model.get('id'), env: env});
var $code = this.ui.code;
results.fetch({
success: function () {
$code.text(results.get('stdout') + results.get('stderr'));
},
error: function () {
$code.text('error');
}
});
}
});
return SlideView;
});