Add base javascript for build detail

build-pdf-ret-val
Anthony Johnson 2015-08-14 16:17:07 -07:00
parent 365d8d92f4
commit 22db8f3d3d
3 changed files with 105 additions and 0 deletions

View File

@ -17,6 +17,7 @@ var gulp = require('gulp'),
// picking up dependencies of the primary entry points and putting any
// limitations on directory structure for entry points.
var sources = {
builds: ['js/detail.js'],
core: [
'js/readthedocs-doc-embed.js',
'js/autocomplete.js',

View File

@ -0,0 +1,103 @@
// Build detail view
var ko = window.knockout || require('knockout');
var $ = window.jquery || require('jquery');
function BuildCommand (data) {
var self = this;
self.id = ko.observable(data.id);
self.command = ko.observable(data.command);
self.output = ko.observable(data.output);
self.exit_code = ko.observable(data.exit_code || 0);
self.successful = ko.observable(self.exit_code() == 0);
self.run_time = ko.observable(data.run_time);
self.is_showing = ko.observable(!self.successful());
self.toggleCommand = function () {
self.is_showing(!self.is_showing());
};
self.command_status = ko.computed(function () {
return self.successful() ?
'build-command-successful' :
'build-command-failed';
});
}
function BuildDetailView (instance) {
var self = this,
instance = instance || {};
/* Instance variables */
self.state = ko.observable(instance.state);
self.state_display = ko.observable(instance.state_display);
self.finished = ko.computed(function () {
return self.state() == 'finished';
});
self.date = ko.observable(instance.date);
self.success = ko.observable(instance.success);
self.error = ko.observable(instance.error);
self.length = ko.observable(instance.length);
self.commands = ko.observableArray(instance.commands);
self.display_commands = ko.computed(function () {
var commands_display = [],
commands_raw = self.commands();
for (n in commands_raw) {
var command = new BuildCommand(commands_raw[n]);
commands_display.push(command)
}
return commands_display;
});
self.commit = ko.observable(instance.commit);
/* Others */
self.legacy_output = ko.observable(false);
self.show_legacy_output = function () {
self.legacy_output(true);
};
function poll_api () {
if (self.finished()) {
return;
}
$.getJSON('/api/v2/build/' + instance.id + '/', function (data) {
self.state(data.state);
self.state_display(data.state_display);
self.date(data.date);
self.success(data.success);
self.error(data.error);
self.length(data.length);
self.commit(data.commit);
for (n in data.commands) {
var command = data.commands[n];
var match = ko.utils.arrayFirst(
self.commands(),
function(command_cmp) {
return (command_cmp.id == command.id);
}
);
if (!match) {
self.commands.push(command);
}
}
});
setTimeout(poll_api, 2000);
}
poll_api();
}
BuildDetailView.init = function (instance, domobj) {
var view = new BuildDetailView(instance),
domobj = domobj || $('#build-detail')[0];
ko.applyBindings(view, domobj);
return view;
};
module.exports.BuildDetailView = BuildDetailView;
if (typeof(window) != 'undefined') {
window.build = module.exports;
}

View File

@ -0,0 +1 @@
!function e(t,o,n){function r(i,u){if(!o[i]){if(!t[i]){var a="function"==typeof require&&require;if(!u&&a)return a(i,!0);if(s)return s(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var d=o[i]={exports:{}};t[i][0].call(d.exports,function(e){var o=t[i][1][e];return r(o?o:e)},d,d.exports,e,t,o,n)}return o[i].exports}for(var s="function"==typeof require&&require,i=0;i<n.length;i++)r(n[i]);return r}({1:[function(e,t,o){function r(e){var t=this;t.id=i.observable(e.id),t.command=i.observable(e.command),t.output=i.observable(e.output),t.exit_code=i.observable(e.exit_code||0),t.successful=i.observable(0==t.exit_code()),t.run_time=i.observable(e.run_time),t.is_showing=i.observable(!t.successful()),t.toggleCommand=function(){t.is_showing(!t.is_showing())},t.command_status=i.computed(function(){return t.successful()?"build-command-successful":"build-command-failed"})}function s(e){function t(){o.finished()||(u.getJSON("/api/v2/build/"+e.id+"/",function(e){o.state(e.state),o.state_display(e.state_display),o.date(e.date),o.success(e.success),o.error(e.error),o.length(e.length),o.commit(e.commit);for(n in e.commands){var t=e.commands[n],r=i.utils.arrayFirst(o.commands(),function(e){return e.id==t.id});r||o.commands.push(t)}}),setTimeout(t,2e3))}var o=this,e=e||{};o.state=i.observable(e.state),o.state_display=i.observable(e.state_display),o.finished=i.computed(function(){return"finished"==o.state()}),o.date=i.observable(e.date),o.success=i.observable(e.success),o.error=i.observable(e.error),o.length=i.observable(e.length),o.commands=i.observableArray(e.commands),o.display_commands=i.computed(function(){var e=[],t=o.commands();for(n in t){var s=new r(t[n]);e.push(s)}return e}),o.commit=i.observable(e.commit),o.legacy_output=i.observable(!1),o.show_legacy_output=function(){o.legacy_output(!0)},t()}var i=window.knockout||e("knockout"),u=window.jquery||e("jquery");s.init=function(e,t){var o=new s(e),t=t||u("#build-detail")[0];return i.applyBindings(o,t),o},t.exports.BuildDetailView=s,"undefined"!=typeof window&&(window.build=t.exports)},{jquery:"jquery",knockout:"knockout"}]},{},[1]);