-
Notifications
You must be signed in to change notification settings - Fork 0
/
wallboard.js
167 lines (142 loc) · 4.47 KB
/
wallboard.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
// SICKHEAD PROPRIETARY INFORMATION
//
// This software is supplied under the terms of a license agreement
// or nondisclosure agreement and may not be copied or disclosed
// except in accordance with the terms of that agreement.
//
// Copyright (c) Sickhead Games, LLC
// All Rights Reserved
// www.sickheadgames.com
///////////////////////////////////////////////////////////////////////////////
// JQuery Extensions
jQuery.fn.exists = function () { return ($(this).length > 0); }
jQuery.fn.pulse = function (duration, easing, props_to, props_from)
{
var elem = this;
// Pulse out.
elem.animate(
props_to,
{
duration: duration,
easing: easing,
queue: true,
});
// Pulse back in.
elem.animate(
props_from,
{
duration: duration,
easing: easing,
queue: true,
complete: function () { elem.pulse(duration, easing, props_to, props_from); }
});
}
///////////////////////////////////////////////////////////////////////////////
// TeamCity Stuff
function update_projects()
{
// Load the projects from the TeamCity server.
$.ajax({
dataType: "json",
url: "./teamcity.php",
timeout: 10000,
cache: false,
})
.done(function (projects)
{
var newCards = new Array();
$.each(projects, function (i, project)
{
var cardId = "tc_" + project.id;
if (!$("#" + cardId).exists())
{
$("#builds_content").append('<div id="parent_' + cardId + '" class="project_card"><h3>' + project.name + '</h3><div id="' + cardId + '" class="project_card"><div>');
}
update_builds("#" + cardId, project);
newCards.push("#parent_" + cardId);
});
// Delete old cards.
$("#builds_content").children().not(newCards.toString()).remove();
// Refresh this data in a little bit.
setTimeout(update_projects, 3000);
})
.fail(function (jqXHR, textStatus, errorThrown)
{
// Wait longer to refresh... don't hammer the
// server over and over if its not responding.
setTimeout(update_projects, 20000);
});
}
function update_builds(projectId, project)
{
var newCards = new Array();
$.each(project.builds, function(i, build)
{
var cardId = "tc_"+ build.id;
var card = $("#"+cardId);
if (!card.exists())
{
$(projectId).append('<div id="'+ cardId + '"class="build_card_' + build.status +'">' + build.name + '<div>');
card = $("#" + cardId);
card.hide().slideDown(500);
}
else
{
// Change the state.
card.attr('class', 'build_card_' + build.status);
card.text(build.name);
}
// Store some build state on the card so we
// can react to changes in the state.
var wasRunning = card.data('running');
var startRunning = !wasRunning && build.running == "true";
var buildFailed = card.data('status') == "SUCCESS" && build.status == "FAILED";
var buildSuccess = card.data('status') == "FAILED" && build.status == "SUCCESS";
card.data('running', build.running == "true");
card.data('status', build.status);
// Play the success and failure sounds.
if (buildFailed)
$.playSound('./build_failed.wav');
if (buildSuccess)
$.playSound('./build_success.wav');
if (startRunning)
$.playSound('./build_running.wav');
// If the build is running then start pulsing the card.
if (build.running && !wasRunning)
card.pulse(500, 'linear', { opacity: 0.25 }, { opacity: 1 });
else if (!build.running && wasRunning)
{
// Reset the css state.
card.stop(true);
card.removeAttr('style');
}
newCards.push("#"+cardId);
});
// Delete old cards.
$(projectId).children().not(newCards.toString()).remove();
}
function update_slide(index)
{
if (index == 0)
{
$.deck('go', 0)
setTimeout(function () { update_slide(1) }, 30000);
}
else
{
$.deck('go', 1)
setTimeout(function () { update_slide(0) }, 5000);
}
}
// Start the project update as soon as the
// page is fully loaded.
$(document).ready(function ()
{
$.deck('.slide');
update_projects();
update_slide(0);
});
//$("#builds_content").append('loading...');
//card.hide().animate({width: "show", height: "show", opacity: "show"}, 500);
// Make new build cards fade in.
//$(".tweet_card").hide().animate({ height: "show", opacity: "show" }, 500);