summaryrefslogtreecommitdiff
path: root/app/assets
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets')
-rw-r--r--app/assets/images/ci/arch.jpgbin0 -> 25222 bytes
-rw-r--r--app/assets/images/ci/favicon.icobin0 -> 5430 bytes
-rw-r--r--app/assets/images/ci/loader.gifbin0 -> 4405 bytes
-rw-r--r--app/assets/images/ci/no_avatar.pngbin0 -> 1337 bytes
-rw-r--r--app/assets/images/ci/rails.pngbin0 -> 6646 bytes
-rw-r--r--app/assets/images/ci/service_sample.pngbin0 -> 76024 bytes
-rw-r--r--app/assets/javascripts/ci/Chart.min.js39
-rw-r--r--app/assets/javascripts/ci/application.js.coffee50
-rw-r--r--app/assets/javascripts/ci/build.coffee41
-rw-r--r--app/assets/javascripts/ci/pager.js.coffee42
-rw-r--r--app/assets/javascripts/ci/projects.js.coffee6
-rw-r--r--app/assets/stylesheets/ci/application.scss46
-rw-r--r--app/assets/stylesheets/ci/generic/avatar.scss29
-rw-r--r--app/assets/stylesheets/ci/generic/buttons.scss7
-rw-r--r--app/assets/stylesheets/ci/generic/callout.scss45
-rw-r--r--app/assets/stylesheets/ci/generic/common.scss189
-rw-r--r--app/assets/stylesheets/ci/generic/forms.scss28
-rw-r--r--app/assets/stylesheets/ci/generic/tables.scss20
-rw-r--r--app/assets/stylesheets/ci/generic/typography.scss63
-rw-r--r--app/assets/stylesheets/ci/generic/xterm.scss904
-rw-r--r--app/assets/stylesheets/ci/main/fonts.scss2
-rw-r--r--app/assets/stylesheets/ci/main/layout.scss18
-rw-r--r--app/assets/stylesheets/ci/main/mixins.scss31
-rw-r--r--app/assets/stylesheets/ci/main/variables.scss44
-rw-r--r--app/assets/stylesheets/ci/sections/builds.scss54
-rw-r--r--app/assets/stylesheets/ci/sections/lint.scss8
-rw-r--r--app/assets/stylesheets/ci/sections/login.scss13
-rw-r--r--app/assets/stylesheets/ci/sections/navbar.scss54
-rw-r--r--app/assets/stylesheets/ci/sections/projects.scss61
-rw-r--r--app/assets/stylesheets/ci/sections/runners.scss34
-rw-r--r--app/assets/stylesheets/ci/sections/setup.scss11
31 files changed, 1839 insertions, 0 deletions
diff --git a/app/assets/images/ci/arch.jpg b/app/assets/images/ci/arch.jpg
new file mode 100644
index 00000000000..0e05674e840
--- /dev/null
+++ b/app/assets/images/ci/arch.jpg
Binary files differ
diff --git a/app/assets/images/ci/favicon.ico b/app/assets/images/ci/favicon.ico
new file mode 100644
index 00000000000..9663d4d00b9
--- /dev/null
+++ b/app/assets/images/ci/favicon.ico
Binary files differ
diff --git a/app/assets/images/ci/loader.gif b/app/assets/images/ci/loader.gif
new file mode 100644
index 00000000000..2fcb8f2da0d
--- /dev/null
+++ b/app/assets/images/ci/loader.gif
Binary files differ
diff --git a/app/assets/images/ci/no_avatar.png b/app/assets/images/ci/no_avatar.png
new file mode 100644
index 00000000000..752d26adba7
--- /dev/null
+++ b/app/assets/images/ci/no_avatar.png
Binary files differ
diff --git a/app/assets/images/ci/rails.png b/app/assets/images/ci/rails.png
new file mode 100644
index 00000000000..d5edc04e65f
--- /dev/null
+++ b/app/assets/images/ci/rails.png
Binary files differ
diff --git a/app/assets/images/ci/service_sample.png b/app/assets/images/ci/service_sample.png
new file mode 100644
index 00000000000..65d29e3fd89
--- /dev/null
+++ b/app/assets/images/ci/service_sample.png
Binary files differ
diff --git a/app/assets/javascripts/ci/Chart.min.js b/app/assets/javascripts/ci/Chart.min.js
new file mode 100644
index 00000000000..ab635881087
--- /dev/null
+++ b/app/assets/javascripts/ci/Chart.min.js
@@ -0,0 +1,39 @@
+var Chart=function(s){function v(a,c,b){a=A((a-c.graphMin)/(c.steps*c.stepValue),1,0);return b*c.steps*a}function x(a,c,b,e){function h(){g+=f;var k=a.animation?A(d(g),null,0):1;e.clearRect(0,0,q,u);a.scaleOverlay?(b(k),c()):(c(),b(k));if(1>=g)D(h);else if("function"==typeof a.onAnimationComplete)a.onAnimationComplete()}var f=a.animation?1/A(a.animationSteps,Number.MAX_VALUE,1):1,d=B[a.animationEasing],g=a.animation?0:1;"function"!==typeof c&&(c=function(){});D(h)}function C(a,c,b,e,h,f){var d;a=
+Math.floor(Math.log(e-h)/Math.LN10);h=Math.floor(h/(1*Math.pow(10,a)))*Math.pow(10,a);e=Math.ceil(e/(1*Math.pow(10,a)))*Math.pow(10,a)-h;a=Math.pow(10,a);for(d=Math.round(e/a);d<b||d>c;)a=d<b?a/2:2*a,d=Math.round(e/a);c=[];z(f,c,d,h,a);return{steps:d,stepValue:a,graphMin:h,labels:c}}function z(a,c,b,e,h){if(a)for(var f=1;f<b+1;f++)c.push(E(a,{value:(e+h*f).toFixed(0!=h%1?h.toString().split(".")[1].length:0)}))}function A(a,c,b){return!isNaN(parseFloat(c))&&isFinite(c)&&a>c?c:!isNaN(parseFloat(b))&&
+isFinite(b)&&a<b?b:a}function y(a,c){var b={},e;for(e in a)b[e]=a[e];for(e in c)b[e]=c[e];return b}function E(a,c){var b=!/\W/.test(a)?F[a]=F[a]||E(document.getElementById(a).innerHTML):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return c?
+b(c):b}var r=this,B={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return 1>(a/=0.5)?0.5*a*a:-0.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return 1>(a/=0.5)?0.5*a*a*a:0.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return 1>(a/=0.5)?
+0.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return 1>(a/=0.5)?0.5*a*a*a*a*a:0.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-0.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0==a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1==
+a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0==a?0:1==a?1:1>(a/=0.5)?0.5*Math.pow(2,10*(a-1)):0.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return 1<=a?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return 1>(a/=0.5)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(1==(a/=1))return 1;b||(b=0.3);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*
+Math.PI)*Math.asin(1/e);return-(e*Math.pow(2,10*(a-=1))*Math.sin((1*a-c)*2*Math.PI/b))},easeOutElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(1==(a/=1))return 1;b||(b=0.3);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/e);return e*Math.pow(2,-10*a)*Math.sin((1*a-c)*2*Math.PI/b)+1},easeInOutElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(2==(a/=0.5))return 1;b||(b=1*0.3*1.5);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/e);return 1>a?-0.5*e*Math.pow(2,10*
+(a-=1))*Math.sin((1*a-c)*2*Math.PI/b):0.5*e*Math.pow(2,-10*(a-=1))*Math.sin((1*a-c)*2*Math.PI/b)+1},easeInBack:function(a){return 1*(a/=1)*a*(2.70158*a-1.70158)},easeOutBack:function(a){return 1*((a=a/1-1)*a*(2.70158*a+1.70158)+1)},easeInOutBack:function(a){var c=1.70158;return 1>(a/=0.5)?0.5*a*a*(((c*=1.525)+1)*a-c):0.5*((a-=2)*a*(((c*=1.525)+1)*a+c)+2)},easeInBounce:function(a){return 1-B.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?1*7.5625*a*a:a<2/2.75?1*(7.5625*(a-=1.5/2.75)*
+a+0.75):a<2.5/2.75?1*(7.5625*(a-=2.25/2.75)*a+0.9375):1*(7.5625*(a-=2.625/2.75)*a+0.984375)},easeInOutBounce:function(a){return 0.5>a?0.5*B.easeInBounce(2*a):0.5*B.easeOutBounce(2*a-1)+0.5}},q=s.canvas.width,u=s.canvas.height;window.devicePixelRatio&&(s.canvas.style.width=q+"px",s.canvas.style.height=u+"px",s.canvas.height=u*window.devicePixelRatio,s.canvas.width=q*window.devicePixelRatio,s.scale(window.devicePixelRatio,window.devicePixelRatio));this.PolarArea=function(a,c){r.PolarArea.defaults={scaleOverlay:!0,
+scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleShowLine:!0,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",
+animateRotate:!0,animateScale:!1,onAnimationComplete:null};var b=c?y(r.PolarArea.defaults,c):r.PolarArea.defaults;return new G(a,b,s)};this.Radar=function(a,c){r.Radar.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleShowLine:!0,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!1,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",
+scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,angleShowLineOut:!0,angleLineColor:"rgba(0,0,0,.1)",angleLineWidth:1,pointLabelFontFamily:"'Arial'",pointLabelFontStyle:"normal",pointLabelFontSize:12,pointLabelFontColor:"#666",pointDot:!0,pointDotRadius:3,pointDotStrokeWidth:1,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Radar.defaults,c):r.Radar.defaults;return new H(a,b,s)};this.Pie=function(a,
+c){r.Pie.defaults={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,onAnimationComplete:null};var b=c?y(r.Pie.defaults,c):r.Pie.defaults;return new I(a,b,s)};this.Doughnut=function(a,c){r.Doughnut.defaults={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,percentageInnerCutout:50,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,
+onAnimationComplete:null};var b=c?y(r.Doughnut.defaults,c):r.Doughnut.defaults;return new J(a,b,s)};this.Line=function(a,c){r.Line.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,bezierCurve:!0,
+pointDot:!0,pointDotRadius:4,pointDotStrokeWidth:2,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Line.defaults,c):r.Line.defaults;return new K(a,b,s)};this.Bar=function(a,c){r.Bar.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",
+scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,barShowStroke:!0,barStrokeWidth:2,barValueSpacing:5,barDatasetSpacing:1,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Bar.defaults,c):r.Bar.defaults;return new L(a,b,s)};var G=function(a,c,b){var e,h,f,d,g,k,j,l,m;g=Math.min.apply(Math,[q,u])/2;g-=Math.max.apply(Math,[0.5*c.scaleFontSize,0.5*c.scaleLineWidth]);
+d=2*c.scaleFontSize;c.scaleShowLabelBackdrop&&(d+=2*c.scaleBackdropPaddingY,g-=1.5*c.scaleBackdropPaddingY);l=g;d=d?d:5;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.length;f++)a[f].value>e&&(e=a[f].value),a[f].value<h&&(h=a[f].value);f=Math.floor(l/(0.66*d));d=Math.floor(0.5*(l/d));m=c.scaleShowLabels?c.scaleLabel:null;c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(m,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(l,f,d,e,h,
+m);k=g/j.steps;x(c,function(){for(var a=0;a<j.steps;a++)if(c.scaleShowLine&&(b.beginPath(),b.arc(q/2,u/2,k*(a+1),0,2*Math.PI,!0),b.strokeStyle=c.scaleLineColor,b.lineWidth=c.scaleLineWidth,b.stroke()),c.scaleShowLabels){b.textAlign="center";b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;var e=j.labels[a];if(c.scaleShowLabelBackdrop){var d=b.measureText(e).width;b.fillStyle=c.scaleBackdropColor;b.beginPath();b.rect(Math.round(q/2-d/2-c.scaleBackdropPaddingX),Math.round(u/2-k*(a+
+1)-0.5*c.scaleFontSize-c.scaleBackdropPaddingY),Math.round(d+2*c.scaleBackdropPaddingX),Math.round(c.scaleFontSize+2*c.scaleBackdropPaddingY));b.fill()}b.textBaseline="middle";b.fillStyle=c.scaleFontColor;b.fillText(e,q/2,u/2-k*(a+1))}},function(e){var d=-Math.PI/2,g=2*Math.PI/a.length,f=1,h=1;c.animation&&(c.animateScale&&(f=e),c.animateRotate&&(h=e));for(e=0;e<a.length;e++)b.beginPath(),b.arc(q/2,u/2,f*v(a[e].value,j,k),d,d+h*g,!1),b.lineTo(q/2,u/2),b.closePath(),b.fillStyle=a[e].color,b.fill(),
+c.segmentShowStroke&&(b.strokeStyle=c.segmentStrokeColor,b.lineWidth=c.segmentStrokeWidth,b.stroke()),d+=h*g},b)},H=function(a,c,b){var e,h,f,d,g,k,j,l,m;a.labels||(a.labels=[]);g=Math.min.apply(Math,[q,u])/2;d=2*c.scaleFontSize;for(e=l=0;e<a.labels.length;e++)b.font=c.pointLabelFontStyle+" "+c.pointLabelFontSize+"px "+c.pointLabelFontFamily,h=b.measureText(a.labels[e]).width,h>l&&(l=h);g-=Math.max.apply(Math,[l,1.5*(c.pointLabelFontSize/2)]);g-=c.pointLabelFontSize;l=g=A(g,null,0);d=d?d:5;e=Number.MIN_VALUE;
+h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(m=0;m<a.datasets[f].data.length;m++)a.datasets[f].data[m]>e&&(e=a.datasets[f].data[m]),a.datasets[f].data[m]<h&&(h=a.datasets[f].data[m]);f=Math.floor(l/(0.66*d));d=Math.floor(0.5*(l/d));m=c.scaleShowLabels?c.scaleLabel:null;c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(m,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(l,f,d,e,h,m);k=g/j.steps;x(c,function(){var e=2*Math.PI/
+a.datasets[0].data.length;b.save();b.translate(q/2,u/2);if(c.angleShowLineOut){b.strokeStyle=c.angleLineColor;b.lineWidth=c.angleLineWidth;for(var d=0;d<a.datasets[0].data.length;d++)b.rotate(e),b.beginPath(),b.moveTo(0,0),b.lineTo(0,-g),b.stroke()}for(d=0;d<j.steps;d++){b.beginPath();if(c.scaleShowLine){b.strokeStyle=c.scaleLineColor;b.lineWidth=c.scaleLineWidth;b.moveTo(0,-k*(d+1));for(var f=0;f<a.datasets[0].data.length;f++)b.rotate(e),b.lineTo(0,-k*(d+1));b.closePath();b.stroke()}c.scaleShowLabels&&
+(b.textAlign="center",b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily,b.textBaseline="middle",c.scaleShowLabelBackdrop&&(f=b.measureText(j.labels[d]).width,b.fillStyle=c.scaleBackdropColor,b.beginPath(),b.rect(Math.round(-f/2-c.scaleBackdropPaddingX),Math.round(-k*(d+1)-0.5*c.scaleFontSize-c.scaleBackdropPaddingY),Math.round(f+2*c.scaleBackdropPaddingX),Math.round(c.scaleFontSize+2*c.scaleBackdropPaddingY)),b.fill()),b.fillStyle=c.scaleFontColor,b.fillText(j.labels[d],0,-k*(d+
+1)))}for(d=0;d<a.labels.length;d++){b.font=c.pointLabelFontStyle+" "+c.pointLabelFontSize+"px "+c.pointLabelFontFamily;b.fillStyle=c.pointLabelFontColor;var f=Math.sin(e*d)*(g+c.pointLabelFontSize),h=Math.cos(e*d)*(g+c.pointLabelFontSize);b.textAlign=e*d==Math.PI||0==e*d?"center":e*d>Math.PI?"right":"left";b.textBaseline="middle";b.fillText(a.labels[d],f,-h)}b.restore()},function(d){var e=2*Math.PI/a.datasets[0].data.length;b.save();b.translate(q/2,u/2);for(var g=0;g<a.datasets.length;g++){b.beginPath();
+b.moveTo(0,d*-1*v(a.datasets[g].data[0],j,k));for(var f=1;f<a.datasets[g].data.length;f++)b.rotate(e),b.lineTo(0,d*-1*v(a.datasets[g].data[f],j,k));b.closePath();b.fillStyle=a.datasets[g].fillColor;b.strokeStyle=a.datasets[g].strokeColor;b.lineWidth=c.datasetStrokeWidth;b.fill();b.stroke();if(c.pointDot){b.fillStyle=a.datasets[g].pointColor;b.strokeStyle=a.datasets[g].pointStrokeColor;b.lineWidth=c.pointDotStrokeWidth;for(f=0;f<a.datasets[g].data.length;f++)b.rotate(e),b.beginPath(),b.arc(0,d*-1*
+v(a.datasets[g].data[f],j,k),c.pointDotRadius,2*Math.PI,!1),b.fill(),b.stroke()}b.rotate(e)}b.restore()},b)},I=function(a,c,b){for(var e=0,h=Math.min.apply(Math,[u/2,q/2])-5,f=0;f<a.length;f++)e+=a[f].value;x(c,null,function(d){var g=-Math.PI/2,f=1,j=1;c.animation&&(c.animateScale&&(f=d),c.animateRotate&&(j=d));for(d=0;d<a.length;d++){var l=j*a[d].value/e*2*Math.PI;b.beginPath();b.arc(q/2,u/2,f*h,g,g+l);b.lineTo(q/2,u/2);b.closePath();b.fillStyle=a[d].color;b.fill();c.segmentShowStroke&&(b.lineWidth=
+c.segmentStrokeWidth,b.strokeStyle=c.segmentStrokeColor,b.stroke());g+=l}},b)},J=function(a,c,b){for(var e=0,h=Math.min.apply(Math,[u/2,q/2])-5,f=h*(c.percentageInnerCutout/100),d=0;d<a.length;d++)e+=a[d].value;x(c,null,function(d){var k=-Math.PI/2,j=1,l=1;c.animation&&(c.animateScale&&(j=d),c.animateRotate&&(l=d));for(d=0;d<a.length;d++){var m=l*a[d].value/e*2*Math.PI;b.beginPath();b.arc(q/2,u/2,j*h,k,k+m,!1);b.arc(q/2,u/2,j*f,k+m,k,!0);b.closePath();b.fillStyle=a[d].color;b.fill();c.segmentShowStroke&&
+(b.lineWidth=c.segmentStrokeWidth,b.strokeStyle=c.segmentStrokeColor,b.stroke());k+=m}},b)},K=function(a,c,b){var e,h,f,d,g,k,j,l,m,t,r,n,p,s=0;g=u;b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;t=1;for(d=0;d<a.labels.length;d++)e=b.measureText(a.labels[d]).width,t=e>t?e:t;q/a.labels.length<t?(s=45,q/a.labels.length<Math.cos(s)*t?(s=90,g-=t):g-=Math.sin(s)*t):g-=c.scaleFontSize;d=c.scaleFontSize;g=g-5-d;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(l=
+0;l<a.datasets[f].data.length;l++)a.datasets[f].data[l]>e&&(e=a.datasets[f].data[l]),a.datasets[f].data[l]<h&&(h=a.datasets[f].data[l]);f=Math.floor(g/(0.66*d));d=Math.floor(0.5*(g/d));l=c.scaleShowLabels?c.scaleLabel:"";c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(l,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(g,f,d,e,h,l);k=Math.floor(g/j.steps);d=1;if(c.scaleShowLabels){b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;
+for(e=0;e<j.labels.length;e++)h=b.measureText(j.labels[e]).width,d=h>d?h:d;d+=10}r=q-d-t;m=Math.floor(r/(a.labels.length-1));n=q-t/2-r;p=g+c.scaleFontSize/2;x(c,function(){b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(q-t/2+5,p);b.lineTo(q-t/2-r-5,p);b.stroke();0<s?(b.save(),b.textAlign="right"):b.textAlign="center";b.fillStyle=c.scaleFontColor;for(var d=0;d<a.labels.length;d++)b.save(),0<s?(b.translate(n+d*m,p+c.scaleFontSize),b.rotate(-(s*(Math.PI/180))),b.fillText(a.labels[d],
+0,0),b.restore()):b.fillText(a.labels[d],n+d*m,p+c.scaleFontSize+3),b.beginPath(),b.moveTo(n+d*m,p+3),c.scaleShowGridLines&&0<d?(b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+d*m,5)):b.lineTo(n+d*m,p+3),b.stroke();b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(n,p+5);b.lineTo(n,5);b.stroke();b.textAlign="right";b.textBaseline="middle";for(d=0;d<j.steps;d++)b.beginPath(),b.moveTo(n-3,p-(d+1)*k),c.scaleShowGridLines?(b.lineWidth=c.scaleGridLineWidth,
+b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+r+5,p-(d+1)*k)):b.lineTo(n-0.5,p-(d+1)*k),b.stroke(),c.scaleShowLabels&&b.fillText(j.labels[d],n-8,p-(d+1)*k)},function(d){function e(b,c){return p-d*v(a.datasets[b].data[c],j,k)}for(var f=0;f<a.datasets.length;f++){b.strokeStyle=a.datasets[f].strokeColor;b.lineWidth=c.datasetStrokeWidth;b.beginPath();b.moveTo(n,p-d*v(a.datasets[f].data[0],j,k));for(var g=1;g<a.datasets[f].data.length;g++)c.bezierCurve?b.bezierCurveTo(n+m*(g-0.5),e(f,g-1),n+m*(g-0.5),
+e(f,g),n+m*g,e(f,g)):b.lineTo(n+m*g,e(f,g));b.stroke();c.datasetFill?(b.lineTo(n+m*(a.datasets[f].data.length-1),p),b.lineTo(n,p),b.closePath(),b.fillStyle=a.datasets[f].fillColor,b.fill()):b.closePath();if(c.pointDot){b.fillStyle=a.datasets[f].pointColor;b.strokeStyle=a.datasets[f].pointStrokeColor;b.lineWidth=c.pointDotStrokeWidth;for(g=0;g<a.datasets[f].data.length;g++)b.beginPath(),b.arc(n+m*g,p-d*v(a.datasets[f].data[g],j,k),c.pointDotRadius,0,2*Math.PI,!0),b.fill(),b.stroke()}}},b)},L=function(a,
+c,b){var e,h,f,d,g,k,j,l,m,t,r,n,p,s,w=0;g=u;b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;t=1;for(d=0;d<a.labels.length;d++)e=b.measureText(a.labels[d]).width,t=e>t?e:t;q/a.labels.length<t?(w=45,q/a.labels.length<Math.cos(w)*t?(w=90,g-=t):g-=Math.sin(w)*t):g-=c.scaleFontSize;d=c.scaleFontSize;g=g-5-d;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(l=0;l<a.datasets[f].data.length;l++)a.datasets[f].data[l]>e&&(e=a.datasets[f].data[l]),a.datasets[f].data[l]<
+h&&(h=a.datasets[f].data[l]);f=Math.floor(g/(0.66*d));d=Math.floor(0.5*(g/d));l=c.scaleShowLabels?c.scaleLabel:"";c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(l,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(g,f,d,e,h,l);k=Math.floor(g/j.steps);d=1;if(c.scaleShowLabels){b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;for(e=0;e<j.labels.length;e++)h=b.measureText(j.labels[e]).width,d=h>d?h:d;d+=10}r=q-d-t;m=
+Math.floor(r/a.labels.length);s=(m-2*c.scaleGridLineWidth-2*c.barValueSpacing-(c.barDatasetSpacing*a.datasets.length-1)-(c.barStrokeWidth/2*a.datasets.length-1))/a.datasets.length;n=q-t/2-r;p=g+c.scaleFontSize/2;x(c,function(){b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(q-t/2+5,p);b.lineTo(q-t/2-r-5,p);b.stroke();0<w?(b.save(),b.textAlign="right"):b.textAlign="center";b.fillStyle=c.scaleFontColor;for(var d=0;d<a.labels.length;d++)b.save(),0<w?(b.translate(n+
+d*m,p+c.scaleFontSize),b.rotate(-(w*(Math.PI/180))),b.fillText(a.labels[d],0,0),b.restore()):b.fillText(a.labels[d],n+d*m+m/2,p+c.scaleFontSize+3),b.beginPath(),b.moveTo(n+(d+1)*m,p+3),b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+(d+1)*m,5),b.stroke();b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(n,p+5);b.lineTo(n,5);b.stroke();b.textAlign="right";b.textBaseline="middle";for(d=0;d<j.steps;d++)b.beginPath(),b.moveTo(n-3,p-(d+1)*
+k),c.scaleShowGridLines?(b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+r+5,p-(d+1)*k)):b.lineTo(n-0.5,p-(d+1)*k),b.stroke(),c.scaleShowLabels&&b.fillText(j.labels[d],n-8,p-(d+1)*k)},function(d){b.lineWidth=c.barStrokeWidth;for(var e=0;e<a.datasets.length;e++){b.fillStyle=a.datasets[e].fillColor;b.strokeStyle=a.datasets[e].strokeColor;for(var f=0;f<a.datasets[e].data.length;f++){var g=n+c.barValueSpacing+m*f+s*e+c.barDatasetSpacing*e+c.barStrokeWidth*e;b.beginPath();
+b.moveTo(g,p);b.lineTo(g,p-d*v(a.datasets[e].data[f],j,k)+c.barStrokeWidth/2);b.lineTo(g+s,p-d*v(a.datasets[e].data[f],j,k)+c.barStrokeWidth/2);b.lineTo(g+s,p);c.barShowStroke&&b.stroke();b.closePath();b.fill()}}},b)},D=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)},F={}}; \ No newline at end of file
diff --git a/app/assets/javascripts/ci/application.js.coffee b/app/assets/javascripts/ci/application.js.coffee
new file mode 100644
index 00000000000..8a8aed1385c
--- /dev/null
+++ b/app/assets/javascripts/ci/application.js.coffee
@@ -0,0 +1,50 @@
+# This is a manifest file that'll be compiled into application.js, which will include all the files
+# listed below.
+#
+# Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
+# or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
+#
+# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+# the compiled file.
+#
+# WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
+# GO AFTER THE REQUIRES BELOW.
+#
+#= require jquery
+#= require bootstrap
+#= require jquery_ujs
+#= require turbolinks
+#= require jquery.turbolinks
+#= require jquery.endless-scroll
+#= require pager
+#= require nprogress
+#= require nprogress-turbolinks
+#= require jquery_nested_form
+#= require_tree .
+#
+#
+
+$(document).on 'click', '.edit-runner-link', (event) ->
+ event.preventDefault()
+
+ descr = $(this).closest('.runner-description').first()
+ descr.addClass('hide')
+ form = descr.next('.runner-description-form')
+ descrInput = form.find('input.description')
+ originalValue = descrInput.val()
+ form.removeClass('hide')
+ form.find('.cancel').on 'click', (event) ->
+ event.preventDefault()
+
+ form.addClass('hide')
+ descrInput.val(originalValue)
+ descr.removeClass('hide')
+
+$(document).on 'click', '.assign-all-runner', ->
+ $(this).replaceWith('<i class="fa-refresh fa-spin"></i> Assign in progress..')
+
+window.unbindEvents = ->
+ $(document).unbind('scroll')
+ $(document).off('scroll')
+
+document.addEventListener("page:fetch", unbindEvents)
diff --git a/app/assets/javascripts/ci/build.coffee b/app/assets/javascripts/ci/build.coffee
new file mode 100644
index 00000000000..be4a3aa757a
--- /dev/null
+++ b/app/assets/javascripts/ci/build.coffee
@@ -0,0 +1,41 @@
+class CiBuild
+ @interval: null
+
+ constructor: (build_url, build_status) ->
+ clearInterval(CiBuild.interval)
+
+ if build_status == "running" || build_status == "pending"
+ #
+ # Bind autoscroll button to follow build output
+ #
+ $("#autoscroll-button").bind "click", ->
+ state = $(this).data("state")
+ if "enabled" is state
+ $(this).data "state", "disabled"
+ $(this).text "enable autoscroll"
+ else
+ $(this).data "state", "enabled"
+ $(this).text "disable autoscroll"
+
+ #
+ # Check for new build output if user still watching build page
+ # Only valid for runnig build when output changes during time
+ #
+ CiBuild.interval = setInterval =>
+ if window.location.href is build_url
+ $.ajax
+ url: build_url
+ dataType: "json"
+ success: (build) =>
+ if build.status == "running"
+ $('#build-trace code').html build.trace_html
+ $('#build-trace code').append '<i class="fa-refresh fa-spin"/>'
+ @checkAutoscroll()
+ else
+ Turbolinks.visit build_url
+ , 4000
+
+ checkAutoscroll: ->
+ $("html,body").scrollTop $("#build-trace").height() if "enabled" is $("#autoscroll-button").data("state")
+
+@CiBuild = CiBuild
diff --git a/app/assets/javascripts/ci/pager.js.coffee b/app/assets/javascripts/ci/pager.js.coffee
new file mode 100644
index 00000000000..b57e7c736e9
--- /dev/null
+++ b/app/assets/javascripts/ci/pager.js.coffee
@@ -0,0 +1,42 @@
+@CiPager =
+ init: (@url, @limit = 0, preload, @disable = false) ->
+ if preload
+ @offset = 0
+ @getItems()
+ else
+ @offset = @limit
+ @initLoadMore()
+
+ getItems: ->
+ $(".loading").show()
+ $.ajax
+ type: "GET"
+ url: @url
+ data: "limit=" + @limit + "&offset=" + @offset
+ complete: =>
+ $(".loading").hide()
+ success: (data) =>
+ Pager.append(data.count, data.html)
+ dataType: "json"
+
+ append: (count, html) ->
+ if count > 1
+ $(".content-list").append html
+ if count == @limit
+ @offset += count
+ else
+ @disable = true
+
+ initLoadMore: ->
+ $(document).unbind('scroll')
+ $(document).endlessScroll
+ bottomPixels: 400
+ fireDelay: 1000
+ fireOnce: true
+ ceaseFire: ->
+ Pager.disable
+
+ callback: (i) =>
+ unless $(".loading").is(':visible')
+ $(".loading").show()
+ Pager.getItems()
diff --git a/app/assets/javascripts/ci/projects.js.coffee b/app/assets/javascripts/ci/projects.js.coffee
new file mode 100644
index 00000000000..7e028b4e115
--- /dev/null
+++ b/app/assets/javascripts/ci/projects.js.coffee
@@ -0,0 +1,6 @@
+$(document).on 'click', '.badge-codes-toggle', ->
+ $('.badge-codes-block').toggleClass("hide")
+ return false
+
+$(document).on 'click', '.sync-now', ->
+ $(this).find('i').addClass('fa-spin')
diff --git a/app/assets/stylesheets/ci/application.scss b/app/assets/stylesheets/ci/application.scss
new file mode 100644
index 00000000000..ce080c7cf8a
--- /dev/null
+++ b/app/assets/stylesheets/ci/application.scss
@@ -0,0 +1,46 @@
+/*
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
+ * listed below.
+ *
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
+ *
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
+ * compiled file, but it's generally better to create a new file per style scope.
+ *
+ *= require_self
+ */
+
+@import "main/variables.scss";
+@import "main/mixins.scss";
+@import "main/fonts.scss";
+@import "main/layout.scss";
+
+/**
+ * Twitter bootstrap
+ */
+@import 'bootstrap';
+
+/**
+ * Font icons
+ *
+ */
+@import "font-awesome";
+
+/**
+ * Generic css (forms, nav etc):
+ */
+@import "generic/*";
+
+/**
+ * Page specific styles (issues, projects etc):
+ */
+
+@import "sections/*";
+
+/*
+ * NProgress
+ */
+$nprogress-color: #9BC;
+@import 'nprogress';
+@import 'nprogress-bootstrap';
diff --git a/app/assets/stylesheets/ci/generic/avatar.scss b/app/assets/stylesheets/ci/generic/avatar.scss
new file mode 100644
index 00000000000..fc0914cddea
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/avatar.scss
@@ -0,0 +1,29 @@
+.avatar {
+ float: left;
+ margin-right: 12px;
+ width: 40px;
+ height: 40px;
+ padding: 0;
+ @include border-radius($avatar_radius);
+
+ &.avatar-inline {
+ float: none;
+ margin-left: 4px;
+ margin-bottom: 2px;
+
+ &.s16 { margin-right: 4px; }
+ &.s24 { margin-right: 4px; }
+ }
+
+ &.avatar-tile {
+ @include border-radius(0px);
+ }
+
+ &.s16 { width: 16px; height: 16px; margin-right: 6px; }
+ &.s24 { width: 24px; height: 24px; margin-right: 8px; }
+ &.s26 { width: 26px; height: 26px; margin-right: 8px; }
+ &.s32 { width: 32px; height: 32px; margin-right: 10px; }
+ &.s60 { width: 60px; height: 60px; margin-right: 12px; }
+ &.s90 { width: 90px; height: 90px; margin-right: 15px; }
+ &.s160 { width: 160px; height: 160px; margin-right: 20px; }
+}
diff --git a/app/assets/stylesheets/ci/generic/buttons.scss b/app/assets/stylesheets/ci/generic/buttons.scss
new file mode 100644
index 00000000000..5605c097c03
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/buttons.scss
@@ -0,0 +1,7 @@
+.btn {
+ @extend .btn-default;
+
+ &.btn-save {
+ @extend .btn-primary;
+ }
+}
diff --git a/app/assets/stylesheets/ci/generic/callout.scss b/app/assets/stylesheets/ci/generic/callout.scss
new file mode 100644
index 00000000000..f1699d21c9b
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/callout.scss
@@ -0,0 +1,45 @@
+/*
+ * Callouts from Bootstrap3 docs
+ *
+ * Not quite alerts, but custom and helpful notes for folks reading the docs.
+ * Requires a base and modifier class.
+ */
+
+/* Common styles for all types */
+.bs-callout {
+ margin: 20px 0;
+ padding: 20px;
+ border-left: 3px solid #eee;
+ color: #666;
+ background: #f9f9f9;
+}
+.bs-callout h4 {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.bs-callout p:last-child {
+ margin-bottom: 0;
+}
+
+/* Variations */
+.bs-callout-danger {
+ background-color: #fdf7f7;
+ border-color: #eed3d7;
+ color: #b94a48;
+}
+.bs-callout-warning {
+ background-color: #faf8f0;
+ border-color: #faebcc;
+ color: #8a6d3b;
+}
+.bs-callout-info {
+ background-color: #f4f8fa;
+ border-color: #bce8f1;
+ color: #34789a;
+}
+.bs-callout-success {
+ background-color: #dff0d8;
+ border-color: #5cA64d;
+ color: #3c763d;
+}
+
diff --git a/app/assets/stylesheets/ci/generic/common.scss b/app/assets/stylesheets/ci/generic/common.scss
new file mode 100644
index 00000000000..58b7a93b0ad
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/common.scss
@@ -0,0 +1,189 @@
+/** COLORS **/
+.cgray { color: gray }
+.clgray { color: #BBB }
+.cred { color: #D12F19 }
+.cgreen { color: #4a2 }
+.cblue { color: #29A }
+.cblack { color: #111 }
+.cdark { color: #444 }
+.camber { color: #ffc000 }
+.cwhite { color: #fff!important }
+.bgred { background: #F2DEDE!important }
+
+/** COMMON CLASSES **/
+.prepend-top-10 { margin-top:10px }
+.prepend-top-20 { margin-top:20px }
+.prepend-left-10 { margin-left:10px }
+.prepend-left-20 { margin-left:20px }
+.append-right-10 { margin-right:10px }
+.append-right-20 { margin-right:20px }
+.append-bottom-10 { margin-bottom:10px }
+.append-bottom-15 { margin-bottom:15px }
+.append-bottom-20 { margin-bottom:20px }
+.inline { display: inline-block }
+.padded { padding:20px }
+.ipadded { padding:20px!important }
+.lborder { border-left:1px solid #eee }
+.underlined_link { text-decoration: underline; }
+.hint { font-style: italic; color: #999; }
+.light { color: #888 }
+.tiny { font-weight: normal }
+.vtop { vertical-align: top !important; }
+
+
+.dropdown-menu > li > a {
+ text-shadow: none;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ background: #29b;
+}
+
+.breadcrumb > li + li:before {
+ content: "/";
+ padding: 0;
+ color: #666;
+}
+
+.str-truncated {
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: top;
+ white-space: nowrap;
+ max-width: 82%;
+}
+
+.page-title {
+ color: #444;
+ line-height: 1.5;
+ margin-top: 0px;
+ margin-bottom: 15px;
+}
+
+.slead {
+ margin-bottom: 18px;
+ font-size: 16px;
+ font-weight: normal;
+ line-height: 1.4;
+}
+
+.help-callout {
+ li {
+ font-size: 15px;
+ line-height: 1.6;
+ }
+}
+
+/** light list with border-bottom between li **/
+ul.bordered-list {
+ margin: 5px 0px;
+ padding: 0px;
+ li {
+ padding: 5px 0;
+ border-bottom: 1px solid #EEE;
+ overflow: hidden;
+ display: block;
+ margin: 0px;
+ &:last-child { border:none }
+ &.active {
+ background: #f9f9f9;
+ a { font-weight: bold; }
+ }
+ }
+
+ &.top-list {
+ li:first-child {
+ padding-top: 0;
+ h4, h5 {
+ margin-top: 0;
+ }
+ }
+ }
+}
+
+.underlined-title {
+ border-bottom: 1px solid #ccc;
+ padding: 0 0 3px 3px;
+}
+
+// Nav tabs
+.nav.nav-tabs {
+ li {
+ > a {
+ padding: 8px 20px;
+ margin-right: 7px;
+ line-height: 20px;
+ border-color: #EEE;
+ color: #888;
+ border-bottom: 1px solid #ddd;
+ .badge {
+ background-color: #eee;
+ color: #888;
+ text-shadow: 0 1px 1px #fff;
+ }
+ i[class^="fa-"] {
+ line-height: 14px;
+ }
+ }
+ &.active {
+ > a {
+ border-color: #CCC;
+ border-bottom: 1px solid #fff;
+ color: #333;
+ font-weight: bold;
+ }
+ }
+ }
+
+ &.nav-small-tabs > li > a {
+ padding: 6px 9px;
+ }
+}
+
+.nav-tabs > li > a,
+.nav-pills > li > a {
+ color: #666;
+}
+
+.nav-small > li > a {
+ padding: 3px 5px;
+ font-size: 12px;
+}
+
+
+
+// Breadcrumb
+ul.breadcrumb {
+ background: white;
+ border: none;
+ li {
+ display: inline;
+ text-shadow: 0 1px 0 white
+ }
+
+ a {
+ font-size: 16px;
+ }
+}
+
+/**
+ * fix to keep tooltips position in top navigation bar
+ *
+ */
+.navbar .nav > li {
+ position: relative;
+ white-space: nowrap;
+}
+
+// alerts
+.alert-disabled {
+ background-color: #e6e6e6;
+ border-color: #ebccd1;
+ color: #b0b0b0;
+}
+
+.label {
+ margin-right: 5px;
+ font-weight: normal;
+}
diff --git a/app/assets/stylesheets/ci/generic/forms.scss b/app/assets/stylesheets/ci/generic/forms.scss
new file mode 100644
index 00000000000..c8e4e8d6602
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/forms.scss
@@ -0,0 +1,28 @@
+input[type='text'].danger {
+ background: #F2DEDE!important;
+ border-color: #D66;
+ text-shadow: 0 1px 1px #fff
+}
+
+fieldset {
+ margin-bottom: 25px;
+}
+
+.form-actions {
+ padding: 17px 20px 18px;
+ margin-top: 18px;
+ margin-bottom: 18px;
+ background-color: whitesmoke;
+ border-top: 1px solid #e5e5e5;
+ padding-left: 17%;
+}
+
+label {
+ &.control-label {
+ @extend .col-sm-2;
+ }
+
+ &.inline-label {
+ margin: 0;
+ }
+}
diff --git a/app/assets/stylesheets/ci/generic/tables.scss b/app/assets/stylesheets/ci/generic/tables.scss
new file mode 100644
index 00000000000..71a7d4abaee
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/tables.scss
@@ -0,0 +1,20 @@
+table {
+ &.table {
+ tr {
+ td, th {
+ padding: 8px 10px;
+ line-height: 20px;
+ vertical-align: middle;
+ }
+ th {
+ font-weight: normal;
+ font-size: 15px;
+ border-bottom: 1px solid #CCC !important;
+ }
+ td {
+ border-color: #F1F1F1 !important;
+ border-bottom: 1px solid;
+ }
+ }
+ }
+}
diff --git a/app/assets/stylesheets/ci/generic/typography.scss b/app/assets/stylesheets/ci/generic/typography.scss
new file mode 100644
index 00000000000..b9ed23b9d3a
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/typography.scss
@@ -0,0 +1,63 @@
+h6 {
+ color: #888;
+ text-transform: uppercase;
+}
+
+pre {
+ font-family: $monospace_font;
+
+ &.dark {
+ background: #333;
+ color: #f5f5f5;
+ }
+}
+
+/**
+ * Links
+ *
+ */
+a {
+ outline: none;
+ color: $link_color;
+ &:hover {
+ text-decoration: none;
+ color: $primary_color;
+ }
+
+ &:focus {
+ text-decoration: underline;
+ }
+
+ &.dark {
+ color: $style_color;
+ }
+
+ &.lined {
+ text-decoration: underline;
+ &:hover { text-decoration: underline; }
+ }
+
+ &.gray {
+ color: gray;
+ }
+
+ &.supp_diff_link {
+ text-align: center;
+ padding: 20px 0;
+ background: #f1f1f1;
+ width: 100%;
+ float: left;
+ }
+
+ &.neib {
+ margin-right: 15px;
+ }
+}
+
+a:focus {
+ outline: none;
+}
+
+.monospace {
+ font-family: $monospace_font;
+}
diff --git a/app/assets/stylesheets/ci/generic/xterm.scss b/app/assets/stylesheets/ci/generic/xterm.scss
new file mode 100644
index 00000000000..460a6bb2024
--- /dev/null
+++ b/app/assets/stylesheets/ci/generic/xterm.scss
@@ -0,0 +1,904 @@
+// color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg
+// see also: https://gist.github.com/jasonm23/2868981
+
+$black: #000000;
+$red: #cd0000;
+$green: #00cd00;
+$yellow: #cdcd00;
+$blue: #0000ee; // according to wikipedia, this is the xterm standard
+//$blue: #1e90ff; // this is used by all the terminals I tried (when configured with the xterm color profile)
+$magenta: #cd00cd;
+$cyan: #00cdcd;
+$white: #e5e5e5;
+$l-black: #7f7f7f;
+$l-red: #ff0000;
+$l-green: #00ff00;
+$l-yellow: #ffff00;
+$l-blue: #5c5cff;
+$l-magenta: #ff00ff;
+$l-cyan: #00ffff;
+$l-white: #ffffff;
+
+.term-bold {
+ font-weight: bold;
+}
+.term-italic {
+ font-style: italic;
+}
+.term-conceal {
+ visibility: hidden;
+}
+.term-underline {
+ text-decoration: underline;
+}
+.term-cross {
+ text-decoration: line-through;
+}
+
+.term-fg-black {
+ color: $black;
+}
+.term-fg-red {
+ color: $red;
+}
+.term-fg-green {
+ color: $green;
+}
+.term-fg-yellow {
+ color: $yellow;
+}
+.term-fg-blue {
+ color: $blue;
+}
+.term-fg-magenta {
+ color: $magenta;
+}
+.term-fg-cyan {
+ color: $cyan;
+}
+.term-fg-white {
+ color: $white;
+}
+.term-fg-l-black {
+ color: $l-black;
+}
+.term-fg-l-red {
+ color: $l-red;
+}
+.term-fg-l-green {
+ color: $l-green;
+}
+.term-fg-l-yellow {
+ color: $l-yellow;
+}
+.term-fg-l-blue {
+ color: $l-blue;
+}
+.term-fg-l-magenta {
+ color: $l-magenta;
+}
+.term-fg-l-cyan {
+ color: $l-cyan;
+}
+.term-fg-l-white {
+ color: $l-white;
+}
+
+.term-bg-black {
+ background-color: $black;
+}
+.term-bg-red {
+ background-color: $red;
+}
+.term-bg-green {
+ background-color: $green;
+}
+.term-bg-yellow {
+ background-color: $yellow;
+}
+.term-bg-blue {
+ background-color: $blue;
+}
+.term-bg-magenta {
+ background-color: $magenta;
+}
+.term-bg-cyan {
+ background-color: $cyan;
+}
+.term-bg-white {
+ background-color: $white;
+}
+.term-bg-l-black {
+ background-color: $l-black;
+}
+.term-bg-l-red {
+ background-color: $l-red;
+}
+.term-bg-l-green {
+ background-color: $l-green;
+}
+.term-bg-l-yellow {
+ background-color: $l-yellow;
+}
+.term-bg-l-blue {
+ background-color: $l-blue;
+}
+.term-bg-l-magenta {
+ background-color: $l-magenta;
+}
+.term-bg-l-cyan {
+ background-color: $l-cyan;
+}
+.term-bg-l-white {
+ background-color: $l-white;
+}
+
+
+.xterm-fg-0 {
+ color: #000000;
+}
+.xterm-fg-1 {
+ color: #800000;
+}
+.xterm-fg-2 {
+ color: #008000;
+}
+.xterm-fg-3 {
+ color: #808000;
+}
+.xterm-fg-4 {
+ color: #000080;
+}
+.xterm-fg-5 {
+ color: #800080;
+}
+.xterm-fg-6 {
+ color: #008080;
+}
+.xterm-fg-7 {
+ color: #c0c0c0;
+}
+.xterm-fg-8 {
+ color: #808080;
+}
+.xterm-fg-9 {
+ color: #ff0000;
+}
+.xterm-fg-10 {
+ color: #00ff00;
+}
+.xterm-fg-11 {
+ color: #ffff00;
+}
+.xterm-fg-12 {
+ color: #0000ff;
+}
+.xterm-fg-13 {
+ color: #ff00ff;
+}
+.xterm-fg-14 {
+ color: #00ffff;
+}
+.xterm-fg-15 {
+ color: #ffffff;
+}
+.xterm-fg-16 {
+ color: #000000;
+}
+.xterm-fg-17 {
+ color: #00005f;
+}
+.xterm-fg-18 {
+ color: #000087;
+}
+.xterm-fg-19 {
+ color: #0000af;
+}
+.xterm-fg-20 {
+ color: #0000d7;
+}
+.xterm-fg-21 {
+ color: #0000ff;
+}
+.xterm-fg-22 {
+ color: #005f00;
+}
+.xterm-fg-23 {
+ color: #005f5f;
+}
+.xterm-fg-24 {
+ color: #005f87;
+}
+.xterm-fg-25 {
+ color: #005faf;
+}
+.xterm-fg-26 {
+ color: #005fd7;
+}
+.xterm-fg-27 {
+ color: #005fff;
+}
+.xterm-fg-28 {
+ color: #008700;
+}
+.xterm-fg-29 {
+ color: #00875f;
+}
+.xterm-fg-30 {
+ color: #008787;
+}
+.xterm-fg-31 {
+ color: #0087af;
+}
+.xterm-fg-32 {
+ color: #0087d7;
+}
+.xterm-fg-33 {
+ color: #0087ff;
+}
+.xterm-fg-34 {
+ color: #00af00;
+}
+.xterm-fg-35 {
+ color: #00af5f;
+}
+.xterm-fg-36 {
+ color: #00af87;
+}
+.xterm-fg-37 {
+ color: #00afaf;
+}
+.xterm-fg-38 {
+ color: #00afd7;
+}
+.xterm-fg-39 {
+ color: #00afff;
+}
+.xterm-fg-40 {
+ color: #00d700;
+}
+.xterm-fg-41 {
+ color: #00d75f;
+}
+.xterm-fg-42 {
+ color: #00d787;
+}
+.xterm-fg-43 {
+ color: #00d7af;
+}
+.xterm-fg-44 {
+ color: #00d7d7;
+}
+.xterm-fg-45 {
+ color: #00d7ff;
+}
+.xterm-fg-46 {
+ color: #00ff00;
+}
+.xterm-fg-47 {
+ color: #00ff5f;
+}
+.xterm-fg-48 {
+ color: #00ff87;
+}
+.xterm-fg-49 {
+ color: #00ffaf;
+}
+.xterm-fg-50 {
+ color: #00ffd7;
+}
+.xterm-fg-51 {
+ color: #00ffff;
+}
+.xterm-fg-52 {
+ color: #5f0000;
+}
+.xterm-fg-53 {
+ color: #5f005f;
+}
+.xterm-fg-54 {
+ color: #5f0087;
+}
+.xterm-fg-55 {
+ color: #5f00af;
+}
+.xterm-fg-56 {
+ color: #5f00d7;
+}
+.xterm-fg-57 {
+ color: #5f00ff;
+}
+.xterm-fg-58 {
+ color: #5f5f00;
+}
+.xterm-fg-59 {
+ color: #5f5f5f;
+}
+.xterm-fg-60 {
+ color: #5f5f87;
+}
+.xterm-fg-61 {
+ color: #5f5faf;
+}
+.xterm-fg-62 {
+ color: #5f5fd7;
+}
+.xterm-fg-63 {
+ color: #5f5fff;
+}
+.xterm-fg-64 {
+ color: #5f8700;
+}
+.xterm-fg-65 {
+ color: #5f875f;
+}
+.xterm-fg-66 {
+ color: #5f8787;
+}
+.xterm-fg-67 {
+ color: #5f87af;
+}
+.xterm-fg-68 {
+ color: #5f87d7;
+}
+.xterm-fg-69 {
+ color: #5f87ff;
+}
+.xterm-fg-70 {
+ color: #5faf00;
+}
+.xterm-fg-71 {
+ color: #5faf5f;
+}
+.xterm-fg-72 {
+ color: #5faf87;
+}
+.xterm-fg-73 {
+ color: #5fafaf;
+}
+.xterm-fg-74 {
+ color: #5fafd7;
+}
+.xterm-fg-75 {
+ color: #5fafff;
+}
+.xterm-fg-76 {
+ color: #5fd700;
+}
+.xterm-fg-77 {
+ color: #5fd75f;
+}
+.xterm-fg-78 {
+ color: #5fd787;
+}
+.xterm-fg-79 {
+ color: #5fd7af;
+}
+.xterm-fg-80 {
+ color: #5fd7d7;
+}
+.xterm-fg-81 {
+ color: #5fd7ff;
+}
+.xterm-fg-82 {
+ color: #5fff00;
+}
+.xterm-fg-83 {
+ color: #5fff5f;
+}
+.xterm-fg-84 {
+ color: #5fff87;
+}
+.xterm-fg-85 {
+ color: #5fffaf;
+}
+.xterm-fg-86 {
+ color: #5fffd7;
+}
+.xterm-fg-87 {
+ color: #5fffff;
+}
+.xterm-fg-88 {
+ color: #870000;
+}
+.xterm-fg-89 {
+ color: #87005f;
+}
+.xterm-fg-90 {
+ color: #870087;
+}
+.xterm-fg-91 {
+ color: #8700af;
+}
+.xterm-fg-92 {
+ color: #8700d7;
+}
+.xterm-fg-93 {
+ color: #8700ff;
+}
+.xterm-fg-94 {
+ color: #875f00;
+}
+.xterm-fg-95 {
+ color: #875f5f;
+}
+.xterm-fg-96 {
+ color: #875f87;
+}
+.xterm-fg-97 {
+ color: #875faf;
+}
+.xterm-fg-98 {
+ color: #875fd7;
+}
+.xterm-fg-99 {
+ color: #875fff;
+}
+.xterm-fg-100 {
+ color: #878700;
+}
+.xterm-fg-101 {
+ color: #87875f;
+}
+.xterm-fg-102 {
+ color: #878787;
+}
+.xterm-fg-103 {
+ color: #8787af;
+}
+.xterm-fg-104 {
+ color: #8787d7;
+}
+.xterm-fg-105 {
+ color: #8787ff;
+}
+.xterm-fg-106 {
+ color: #87af00;
+}
+.xterm-fg-107 {
+ color: #87af5f;
+}
+.xterm-fg-108 {
+ color: #87af87;
+}
+.xterm-fg-109 {
+ color: #87afaf;
+}
+.xterm-fg-110 {
+ color: #87afd7;
+}
+.xterm-fg-111 {
+ color: #87afff;
+}
+.xterm-fg-112 {
+ color: #87d700;
+}
+.xterm-fg-113 {
+ color: #87d75f;
+}
+.xterm-fg-114 {
+ color: #87d787;
+}
+.xterm-fg-115 {
+ color: #87d7af;
+}
+.xterm-fg-116 {
+ color: #87d7d7;
+}
+.xterm-fg-117 {
+ color: #87d7ff;
+}
+.xterm-fg-118 {
+ color: #87ff00;
+}
+.xterm-fg-119 {
+ color: #87ff5f;
+}
+.xterm-fg-120 {
+ color: #87ff87;
+}
+.xterm-fg-121 {
+ color: #87ffaf;
+}
+.xterm-fg-122 {
+ color: #87ffd7;
+}
+.xterm-fg-123 {
+ color: #87ffff;
+}
+.xterm-fg-124 {
+ color: #af0000;
+}
+.xterm-fg-125 {
+ color: #af005f;
+}
+.xterm-fg-126 {
+ color: #af0087;
+}
+.xterm-fg-127 {
+ color: #af00af;
+}
+.xterm-fg-128 {
+ color: #af00d7;
+}
+.xterm-fg-129 {
+ color: #af00ff;
+}
+.xterm-fg-130 {
+ color: #af5f00;
+}
+.xterm-fg-131 {
+ color: #af5f5f;
+}
+.xterm-fg-132 {
+ color: #af5f87;
+}
+.xterm-fg-133 {
+ color: #af5faf;
+}
+.xterm-fg-134 {
+ color: #af5fd7;
+}
+.xterm-fg-135 {
+ color: #af5fff;
+}
+.xterm-fg-136 {
+ color: #af8700;
+}
+.xterm-fg-137 {
+ color: #af875f;
+}
+.xterm-fg-138 {
+ color: #af8787;
+}
+.xterm-fg-139 {
+ color: #af87af;
+}
+.xterm-fg-140 {
+ color: #af87d7;
+}
+.xterm-fg-141 {
+ color: #af87ff;
+}
+.xterm-fg-142 {
+ color: #afaf00;
+}
+.xterm-fg-143 {
+ color: #afaf5f;
+}
+.xterm-fg-144 {
+ color: #afaf87;
+}
+.xterm-fg-145 {
+ color: #afafaf;
+}
+.xterm-fg-146 {
+ color: #afafd7;
+}
+.xterm-fg-147 {
+ color: #afafff;
+}
+.xterm-fg-148 {
+ color: #afd700;
+}
+.xterm-fg-149 {
+ color: #afd75f;
+}
+.xterm-fg-150 {
+ color: #afd787;
+}
+.xterm-fg-151 {
+ color: #afd7af;
+}
+.xterm-fg-152 {
+ color: #afd7d7;
+}
+.xterm-fg-153 {
+ color: #afd7ff;
+}
+.xterm-fg-154 {
+ color: #afff00;
+}
+.xterm-fg-155 {
+ color: #afff5f;
+}
+.xterm-fg-156 {
+ color: #afff87;
+}
+.xterm-fg-157 {
+ color: #afffaf;
+}
+.xterm-fg-158 {
+ color: #afffd7;
+}
+.xterm-fg-159 {
+ color: #afffff;
+}
+.xterm-fg-160 {
+ color: #d70000;
+}
+.xterm-fg-161 {
+ color: #d7005f;
+}
+.xterm-fg-162 {
+ color: #d70087;
+}
+.xterm-fg-163 {
+ color: #d700af;
+}
+.xterm-fg-164 {
+ color: #d700d7;
+}
+.xterm-fg-165 {
+ color: #d700ff;
+}
+.xterm-fg-166 {
+ color: #d75f00;
+}
+.xterm-fg-167 {
+ color: #d75f5f;
+}
+.xterm-fg-168 {
+ color: #d75f87;
+}
+.xterm-fg-169 {
+ color: #d75faf;
+}
+.xterm-fg-170 {
+ color: #d75fd7;
+}
+.xterm-fg-171 {
+ color: #d75fff;
+}
+.xterm-fg-172 {
+ color: #d78700;
+}
+.xterm-fg-173 {
+ color: #d7875f;
+}
+.xterm-fg-174 {
+ color: #d78787;
+}
+.xterm-fg-175 {
+ color: #d787af;
+}
+.xterm-fg-176 {
+ color: #d787d7;
+}
+.xterm-fg-177 {
+ color: #d787ff;
+}
+.xterm-fg-178 {
+ color: #d7af00;
+}
+.xterm-fg-179 {
+ color: #d7af5f;
+}
+.xterm-fg-180 {
+ color: #d7af87;
+}
+.xterm-fg-181 {
+ color: #d7afaf;
+}
+.xterm-fg-182 {
+ color: #d7afd7;
+}
+.xterm-fg-183 {
+ color: #d7afff;
+}
+.xterm-fg-184 {
+ color: #d7d700;
+}
+.xterm-fg-185 {
+ color: #d7d75f;
+}
+.xterm-fg-186 {
+ color: #d7d787;
+}
+.xterm-fg-187 {
+ color: #d7d7af;
+}
+.xterm-fg-188 {
+ color: #d7d7d7;
+}
+.xterm-fg-189 {
+ color: #d7d7ff;
+}
+.xterm-fg-190 {
+ color: #d7ff00;
+}
+.xterm-fg-191 {
+ color: #d7ff5f;
+}
+.xterm-fg-192 {
+ color: #d7ff87;
+}
+.xterm-fg-193 {
+ color: #d7ffaf;
+}
+.xterm-fg-194 {
+ color: #d7ffd7;
+}
+.xterm-fg-195 {
+ color: #d7ffff;
+}
+.xterm-fg-196 {
+ color: #ff0000;
+}
+.xterm-fg-197 {
+ color: #ff005f;
+}
+.xterm-fg-198 {
+ color: #ff0087;
+}
+.xterm-fg-199 {
+ color: #ff00af;
+}
+.xterm-fg-200 {
+ color: #ff00d7;
+}
+.xterm-fg-201 {
+ color: #ff00ff;
+}
+.xterm-fg-202 {
+ color: #ff5f00;
+}
+.xterm-fg-203 {
+ color: #ff5f5f;
+}
+.xterm-fg-204 {
+ color: #ff5f87;
+}
+.xterm-fg-205 {
+ color: #ff5faf;
+}
+.xterm-fg-206 {
+ color: #ff5fd7;
+}
+.xterm-fg-207 {
+ color: #ff5fff;
+}
+.xterm-fg-208 {
+ color: #ff8700;
+}
+.xterm-fg-209 {
+ color: #ff875f;
+}
+.xterm-fg-210 {
+ color: #ff8787;
+}
+.xterm-fg-211 {
+ color: #ff87af;
+}
+.xterm-fg-212 {
+ color: #ff87d7;
+}
+.xterm-fg-213 {
+ color: #ff87ff;
+}
+.xterm-fg-214 {
+ color: #ffaf00;
+}
+.xterm-fg-215 {
+ color: #ffaf5f;
+}
+.xterm-fg-216 {
+ color: #ffaf87;
+}
+.xterm-fg-217 {
+ color: #ffafaf;
+}
+.xterm-fg-218 {
+ color: #ffafd7;
+}
+.xterm-fg-219 {
+ color: #ffafff;
+}
+.xterm-fg-220 {
+ color: #ffd700;
+}
+.xterm-fg-221 {
+ color: #ffd75f;
+}
+.xterm-fg-222 {
+ color: #ffd787;
+}
+.xterm-fg-223 {
+ color: #ffd7af;
+}
+.xterm-fg-224 {
+ color: #ffd7d7;
+}
+.xterm-fg-225 {
+ color: #ffd7ff;
+}
+.xterm-fg-226 {
+ color: #ffff00;
+}
+.xterm-fg-227 {
+ color: #ffff5f;
+}
+.xterm-fg-228 {
+ color: #ffff87;
+}
+.xterm-fg-229 {
+ color: #ffffaf;
+}
+.xterm-fg-230 {
+ color: #ffffd7;
+}
+.xterm-fg-231 {
+ color: #ffffff;
+}
+.xterm-fg-232 {
+ color: #080808;
+}
+.xterm-fg-233 {
+ color: #121212;
+}
+.xterm-fg-234 {
+ color: #1c1c1c;
+}
+.xterm-fg-235 {
+ color: #262626;
+}
+.xterm-fg-236 {
+ color: #303030;
+}
+.xterm-fg-237 {
+ color: #3a3a3a;
+}
+.xterm-fg-238 {
+ color: #444444;
+}
+.xterm-fg-239 {
+ color: #4e4e4e;
+}
+.xterm-fg-240 {
+ color: #585858;
+}
+.xterm-fg-241 {
+ color: #626262;
+}
+.xterm-fg-242 {
+ color: #6c6c6c;
+}
+.xterm-fg-243 {
+ color: #767676;
+}
+.xterm-fg-244 {
+ color: #808080;
+}
+.xterm-fg-245 {
+ color: #8a8a8a;
+}
+.xterm-fg-246 {
+ color: #949494;
+}
+.xterm-fg-247 {
+ color: #9e9e9e;
+}
+.xterm-fg-248 {
+ color: #a8a8a8;
+}
+.xterm-fg-249 {
+ color: #b2b2b2;
+}
+.xterm-fg-250 {
+ color: #bcbcbc;
+}
+.xterm-fg-251 {
+ color: #c6c6c6;
+}
+.xterm-fg-252 {
+ color: #d0d0d0;
+}
+.xterm-fg-253 {
+ color: #dadada;
+}
+.xterm-fg-254 {
+ color: #e4e4e4;
+}
+.xterm-fg-255 {
+ color: #eeeeee;
+}
diff --git a/app/assets/stylesheets/ci/main/fonts.scss b/app/assets/stylesheets/ci/main/fonts.scss
new file mode 100644
index 00000000000..8cc9986415c
--- /dev/null
+++ b/app/assets/stylesheets/ci/main/fonts.scss
@@ -0,0 +1,2 @@
+/** Typo **/
+$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;
diff --git a/app/assets/stylesheets/ci/main/layout.scss b/app/assets/stylesheets/ci/main/layout.scss
new file mode 100644
index 00000000000..fa54481fa05
--- /dev/null
+++ b/app/assets/stylesheets/ci/main/layout.scss
@@ -0,0 +1,18 @@
+html {
+ overflow-y: scroll;
+
+ &.touch .tooltip { display: none !important; }
+}
+
+body {
+ margin-bottom: 20px;
+}
+
+.container {
+ padding-top: 0;
+ z-index: 5;
+}
+
+.container .content {
+ margin: 0 0;
+}
diff --git a/app/assets/stylesheets/ci/main/mixins.scss b/app/assets/stylesheets/ci/main/mixins.scss
new file mode 100644
index 00000000000..40040822331
--- /dev/null
+++ b/app/assets/stylesheets/ci/main/mixins.scss
@@ -0,0 +1,31 @@
+@mixin box-shadow($shadow) {
+ -webkit-box-shadow: $shadow;
+ -moz-box-shadow: $shadow;
+ -ms-box-shadow: $shadow;
+ -o-box-shadow: $shadow;
+ box-shadow: $shadow;
+}
+
+@mixin border-radius($radius) {
+ -webkit-border-radius: $radius;
+ -moz-border-radius: $radius;
+ -ms-border-radius: $radius;
+ -o-border-radius: $radius;
+ border-radius: $radius;
+}
+
+@mixin linear-gradient($from, $to) {
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to));
+ background-image: -webkit-linear-gradient($from, $to);
+ background-image: -moz-linear-gradient($from, $to);
+ background-image: -ms-linear-gradient($from, $to);
+ background-image: -o-linear-gradient($from, $to);
+}
+
+@mixin transition($transition) {
+ -webkit-transition: $transition;
+ -moz-transition: $transition;
+ -ms-transition: $transition;
+ -o-transition: $transition;
+ transition: $transition;
+}
diff --git a/app/assets/stylesheets/ci/main/variables.scss b/app/assets/stylesheets/ci/main/variables.scss
new file mode 100644
index 00000000000..a8c672a8057
--- /dev/null
+++ b/app/assets/stylesheets/ci/main/variables.scss
@@ -0,0 +1,44 @@
+/**
+ * General Colors
+ */
+$primary_color: #2FA0BB;
+$link_color: #3A89A3;
+$style_color: #246;
+$bg_style_color: #246;
+$hover: #D9EDF7;
+
+/*
+ * Success colors (green)
+ */
+$border_success: #019875;
+$bg_success: #019875;
+
+/*
+ * Danger colors (red)
+ */
+$border_danger: #d43f3a;
+$bg_danger: #d9534f;
+
+/*
+ * Primary colors (blue)
+ */
+$border_primary: #246;
+$bg_primary: #246;
+
+/*
+ * Warning colors (yellow)
+ */
+$bg_warning: #EB9532;
+$border_warning: #EB9532;
+
+/**
+ * Twitter bootstrap variables
+ */
+$font-size-base: 13px !default;
+$nav-pills-active-link-hover-bg: $bg_style_color;
+$pagination-active-bg: $bg_style_color;
+
+/**
+ * Avatar variables
+ */
+$avatar_radius: 50%;
diff --git a/app/assets/stylesheets/ci/sections/builds.scss b/app/assets/stylesheets/ci/sections/builds.scss
new file mode 100644
index 00000000000..a9d39bb0cbd
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/builds.scss
@@ -0,0 +1,54 @@
+pre.trace {
+ background: #111111;
+ color: #fff;
+ font-family: $monospace_font;
+ white-space: pre;
+ white-space: pre-wrap; /* css-3 */
+ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
+ overflow: auto;
+ overflow-y: hidden;
+ font-size: 12px;
+
+ .fa-refresh {
+ font-size: 24px;
+ margin-left: 20px;
+ }
+}
+
+.autoscroll-container {
+ position: fixed;
+ bottom: 10px;
+ right: 20px;
+ z-index: 100;
+}
+
+.scroll-controls {
+ position: fixed;
+ bottom: 10px;
+ left: 20px;
+ z-index: 100;
+
+ a {
+ display: block;
+ margin-bottom: 5px;
+ }
+}
+
+.build-widget {
+ padding: 10px;
+ background: #f4f4f4;
+ margin-bottom: 20px;
+ border-radius: 4px;
+
+ .title {
+ margin-top: 0;
+ color: #666;
+ line-height: 1.5;
+ }
+ .attr-name {
+ color: #777;
+ }
+}
diff --git a/app/assets/stylesheets/ci/sections/lint.scss b/app/assets/stylesheets/ci/sections/lint.scss
new file mode 100644
index 00000000000..7191b5d47aa
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/lint.scss
@@ -0,0 +1,8 @@
+.incorrect-syntax{
+ font-size: 19px;
+ color: red;
+}
+.correct-syntax{
+ font-size: 19px;
+ color: #47a447;
+} \ No newline at end of file
diff --git a/app/assets/stylesheets/ci/sections/login.scss b/app/assets/stylesheets/ci/sections/login.scss
new file mode 100644
index 00000000000..47e453ec8d2
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/login.scss
@@ -0,0 +1,13 @@
+.login-block {
+ padding: 15px;
+ margin: 0 auto;
+ text-align: center;
+
+ p {
+ font-size: 15px;
+ }
+
+ .btn-login {
+ padding: 18px 32px;
+ }
+}
diff --git a/app/assets/stylesheets/ci/sections/navbar.scss b/app/assets/stylesheets/ci/sections/navbar.scss
new file mode 100644
index 00000000000..efa70eb2956
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/navbar.scss
@@ -0,0 +1,54 @@
+.navbar-static-top {
+ margin-bottom: 20px;
+}
+
+.navbar-ci {
+ background: $style_color;
+
+ .navbar-brand {
+ color: #fff;
+
+ &:hover {
+ color: #fff;
+ }
+ }
+ .brand,
+ .nav > li > a {
+ color: #fff;
+
+ &:hover, &:focus, &:active {
+ background: none;
+ }
+ }
+
+ .profile-holder {
+ position: relative;
+
+ img {
+ position: absolute;
+ top: -8px;
+ width: 32px;
+ @include border-radius(32px);
+ }
+
+ span {
+ margin-left: 42px;
+ }
+ }
+
+ .btn-login {
+ padding: 7px 22px;
+ margin-top: 7px;
+ &:hover, &:active, &:focus {
+ background: #018865 !important;
+ }
+ }
+}
+
+.turbolink-spinner {
+ position: absolute;
+ top: 11px;
+ left: 50%;
+ color: #FFF;
+ font-size: 20px;
+}
diff --git a/app/assets/stylesheets/ci/sections/projects.scss b/app/assets/stylesheets/ci/sections/projects.scss
new file mode 100644
index 00000000000..84ee1399bff
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/projects.scss
@@ -0,0 +1,61 @@
+.project-title {
+ margin: 0;
+ color: #444;
+ font-size: 20px;
+ line-height: 1.5;
+}
+
+.builds {
+ @extend .table;
+
+ .build {
+ &.alert{
+ margin-bottom: 6px;
+ }
+ }
+}
+
+.projects-table {
+ td {
+ vertical-align: middle !important;
+ }
+}
+
+.commit-info {
+ font-size: 14px;
+
+ .attr-name {
+ font-weight: 300;
+ color: #666;
+ margin-right: 5px;
+ }
+
+ pre.commit-message {
+ font-size: 14px;
+ background: none;
+ padding: 0;
+ margin: 0;
+ border: none;
+ margin: 20px 0;
+ border-bottom: 1px solid #EEE;
+ padding-bottom: 20px;
+ border-radius: 0;
+ }
+}
+
+.search{
+ width: 300px;
+
+ .search-input{
+ height: 35px;
+ }
+
+ form{
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+}
+
+.loading{
+ font-size: 20px;
+}
diff --git a/app/assets/stylesheets/ci/sections/runners.scss b/app/assets/stylesheets/ci/sections/runners.scss
new file mode 100644
index 00000000000..a9111a7388f
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/runners.scss
@@ -0,0 +1,34 @@
+.runner-state {
+ padding: 6px 12px;
+ margin-right: 10px;
+ color: #FFF;
+
+ &.runner-state-shared {
+ background: #32b186;
+ }
+ &.runner-state-specific {
+ background: #3498db;
+ }
+}
+
+.runner-status-online {
+ color: green;
+}
+
+.runner-status-offline {
+ color: gray;
+}
+
+.runner-status-paused {
+ color: red;
+}
+
+.runner {
+ .btn {
+ padding: 1px 6px;
+ }
+
+ h4 {
+ font-weight: normal;
+ }
+}
diff --git a/app/assets/stylesheets/ci/sections/setup.scss b/app/assets/stylesheets/ci/sections/setup.scss
new file mode 100644
index 00000000000..242614616d1
--- /dev/null
+++ b/app/assets/stylesheets/ci/sections/setup.scss
@@ -0,0 +1,11 @@
+.welcome-block {
+ margin-top: 50px;
+ color: #555;
+ font-size: 16px;
+ line-height: 1.5;
+
+ h1, h2, h3 {
+ font-weight: bold;
+ margin-bottom: 20px;
+ }
+}