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.

79 lines
1.7 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));
}
this.ui.copy.find('pre > code').each(function (index, el) {
var language = _.reduce(el.classList, function (memo, className) {
if (/language-/.test(className)) {
return className.replace('language-', '');
}
return memo;
}, '');
var $el = $(el);
syntax($el.text(), language, function (html) {
$el.html(html);
});
});
},
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;
});