You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2013/07/19 01:45:21 UTC

[22/39] Organized WebUI static assets into directories.

http://git-wip-us.apache.org/repos/asf/mesos/blob/5852eb93/src/webui/master/static/css/bootstrap-responsive-2.3.2.min.css
----------------------------------------------------------------------
diff --git a/src/webui/master/static/css/bootstrap-responsive-2.3.2.min.css b/src/webui/master/static/css/bootstrap-responsive-2.3.2.min.css
new file mode 100644
index 0000000..f4ede63
--- /dev/null
+++ b/src/webui/master/static/css/bootstrap-responsive-2.3.2.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap Responsive v2.3.2
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{dis
 play:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-flui
 d{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094
 017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307
 693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:
 28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span
 6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px
 }.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87
 292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margi
 n-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.4737275185141
 7%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.sp
 an11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:aut
 o}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.m
 odal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:a
 uto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar
 -inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,
 255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}

http://git-wip-us.apache.org/repos/asf/mesos/blob/5852eb93/src/webui/master/static/css/graph.css
----------------------------------------------------------------------
diff --git a/src/webui/master/static/css/graph.css b/src/webui/master/static/css/graph.css
new file mode 100644
index 0000000..a0d9022
--- /dev/null
+++ b/src/webui/master/static/css/graph.css
@@ -0,0 +1,100 @@
+.graph-container {
+   position: relative;
+   overflow: hidden;
+}
+.graph {
+  float: right;
+}
+
+/* The rest of this file is taken from square.github.com/cubism. */
+.group {
+  margin-bottom: 1em;
+}
+
+.axis {
+  font: 10px sans-serif;
+  position: fixed;
+  pointer-events: none;
+  z-index: 2;
+}
+
+.axis text {
+  -webkit-transition: fill-opacity 250ms linear;
+}
+
+.axis path {
+  display: none;
+}
+
+.axis line {
+  stroke: #000;
+  shape-rendering: crispEdges;
+}
+
+.axis.top {
+  background-image: linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -o-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -moz-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -webkit-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -ms-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
+  top: 0px;
+  padding: 0 0 24px 0;
+}
+
+.axis.bottom {
+  background-image: linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -o-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -moz-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -webkit-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
+  background-image: -ms-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
+  bottom: 0px;
+  padding: 24px 0 0 0;
+}
+
+.horizon {
+  border-bottom: solid 1px #000;
+  overflow: hidden;
+  position: relative;
+}
+
+.horizon {
+  border-top: solid 1px #000;
+  border-bottom: solid 1px #000;
+}
+
+.horizon + .horizon {
+  border-top: none;
+}
+
+.horizon canvas {
+  display: block;
+}
+
+.horizon .title,
+.horizon .value {
+  bottom: 0;
+  line-height: 30px;
+  margin: 0 6px;
+  position: absolute;
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
+  white-space: nowrap;
+}
+
+.horizon .title {
+  left: 0;
+}
+
+.horizon .value {
+  right: 0;
+}
+
+.line {
+  background: #000;
+  opacity: .2;
+  z-index: 2;
+}
+
+@media all and (max-width: 1439px) {
+  .axis { position: static; }
+  .axis.top, .axis.bottom { padding: 0; }
+}

http://git-wip-us.apache.org/repos/asf/mesos/blob/5852eb93/src/webui/master/static/css/mesos.css
----------------------------------------------------------------------
diff --git a/src/webui/master/static/css/mesos.css b/src/webui/master/static/css/mesos.css
new file mode 100644
index 0000000..d1413b7
--- /dev/null
+++ b/src/webui/master/static/css/mesos.css
@@ -0,0 +1,82 @@
+body {
+  /* Add space for fixed position navbar. */
+  padding-top: 60px;
+}
+
+@media (max-width: 979px) {
+  body {
+    /* Mobile devices 979px and narrower use a statically positioned navbar */
+    /* and therefore need no padding for the <body>. */
+    /* */
+    /* @see http://twitter.github.io/bootstrap/scaffolding.html#responsive */
+    padding-top: 0;
+  }
+}
+
+dl.inline dt, dl.inline dd {
+  float: left;
+}
+
+dl.inline dd + dt, dl.inline dd + dd {
+  clear: left
+}
+
+dl.inline dd + dd {
+  float: none
+}
+
+dl.inline dt {
+  font-weight: bold
+}
+
+th.descending:after {
+  padding-left: 5px;
+  content: "▼";
+}
+
+th.ascending:after {
+  padding-left: 5px;
+  content: "▲";
+}
+
+th.unselected:after {
+  padding-left: 5px;
+  content: " ";
+}
+
+.inline .btn-mini,
+.table-condensed .btn-mini {
+  margin-bottom: -2px;
+  margin-top: -5px;
+  visibility: hidden;
+}
+
+.inline .zeroclipboard-is-hover,
+.table-condensed .zeroclipboard-is-hover,
+.flash dd:hover .btn-mini,
+.flash td:hover .btn-mini {
+  visibility: visible;
+}
+
+.zeroclipboard-is-hover {
+  background-color: #e6e6e6;
+  background-position: 0 -15px;
+}
+
+.zeroclipboard-is-active {
+  background-image: none;
+}
+
+.badge-type {
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  font-weight: normal;
+  padding-left: 4px;
+  padding-right: 4px;
+  text-shadow: none;
+}
+
+a.badge-type:hover {
+  text-decoration: underline;
+}

http://git-wip-us.apache.org/repos/asf/mesos/blob/5852eb93/src/webui/master/static/cubism.v1.js
----------------------------------------------------------------------
diff --git a/src/webui/master/static/cubism.v1.js b/src/webui/master/static/cubism.v1.js
deleted file mode 100644
index f09f00f..0000000
--- a/src/webui/master/static/cubism.v1.js
+++ /dev/null
@@ -1,975 +0,0 @@
-(function(exports){
-var cubism = exports.cubism = {version: "1.0.0"};
-var cubism_id = 0;
-function cubism_identity(d) { return d; }
-cubism.option = function(name, value) {
-  var options = location.search.substring(1).split("&"),
-      i = -1,
-      n = options.length,
-      o;
-  while (++i < n) {
-    if ((o = options[i].split("="))[0] == name) {
-      return decodeURIComponent(o[1]);
-    }
-  }
-  return value;
-};
-cubism.context = function() {
-  var context = new cubism_context,
-      step = 1e4, // ten seconds, in milliseconds
-      size = 1440, // four hours at ten seconds, in pixels
-      start0, stop0, // the start and stop for the previous change event
-      start1, stop1, // the start and stop for the next prepare event
-      serverDelay = 5e3,
-      clientDelay = 5e3,
-      event = d3.dispatch("prepare", "beforechange", "change", "focus"),
-      scale = context.scale = d3.time.scale().range([0, size]),
-      timeout,
-      focus;
-
-  function update() {
-    var now = Date.now();
-    stop0 = new Date(Math.floor((now - serverDelay - clientDelay) / step) * step);
-    start0 = new Date(stop0 - size * step);
-    stop1 = new Date(Math.floor((now - serverDelay) / step) * step);
-    start1 = new Date(stop1 - size * step);
-    scale.domain([start0, stop0]);
-    return context;
-  }
-
-  context.start = function() {
-    if (timeout) clearTimeout(timeout);
-    var delay = +stop1 + serverDelay - Date.now();
-
-    // If we're too late for the first prepare event, skip it.
-    if (delay < clientDelay) delay += step;
-
-    timeout = setTimeout(function prepare() {
-      stop1 = new Date(Math.floor((Date.now() - serverDelay) / step) * step);
-      start1 = new Date(stop1 - size * step);
-      event.prepare.call(context, start1, stop1);
-
-      setTimeout(function() {
-        scale.domain([start0 = start1, stop0 = stop1]);
-        event.beforechange.call(context, start1, stop1);
-        event.change.call(context, start1, stop1);
-        event.focus.call(context, focus);
-      }, clientDelay);
-
-      timeout = setTimeout(prepare, step);
-    }, delay);
-    return context;
-  };
-
-  context.stop = function() {
-    timeout = clearTimeout(timeout);
-    return context;
-  };
-
-  timeout = setTimeout(context.start, 10);
-
-  // Set or get the step interval in milliseconds.
-  // Defaults to ten seconds.
-  context.step = function(_) {
-    if (!arguments.length) return step;
-    step = +_;
-    return update();
-  };
-
-  // Set or get the context size (the count of metric values).
-  // Defaults to 1440 (four hours at ten seconds).
-  context.size = function(_) {
-    if (!arguments.length) return size;
-    scale.range([0, size = +_]);
-    return update();
-  };
-
-  // The server delay is the amount of time we wait for the server to compute a
-  // metric. This delay may result from clock skew or from delays collecting
-  // metrics from various hosts. Defaults to 4 seconds.
-  context.serverDelay = function(_) {
-    if (!arguments.length) return serverDelay;
-    serverDelay = +_;
-    return update();
-  };
-
-  // The client delay is the amount of additional time we wait to fetch those
-  // metrics from the server. The client and server delay combined represent the
-  // age of the most recent displayed metric. Defaults to 1 second.
-  context.clientDelay = function(_) {
-    if (!arguments.length) return clientDelay;
-    clientDelay = +_;
-    return update();
-  };
-
-  // Sets the focus to the specified index, and dispatches a "focus" event.
-  context.focus = function(i) {
-    event.focus.call(context, focus = i);
-    return context;
-  };
-
-  // Add, remove or get listeners for events.
-  context.on = function(type, listener) {
-    if (arguments.length < 2) return event.on(type);
-
-    event.on(type, listener);
-
-    // Notify the listener of the current start and stop time, as appropriate.
-    // This way, metrics can make requests for data immediately,
-    // and likewise the axis can display itself synchronously.
-    if (listener != null) {
-      if (/^prepare(\.|$)/.test(type)) listener.call(context, start1, stop1);
-      if (/^beforechange(\.|$)/.test(type)) listener.call(context, start0, stop0);
-      if (/^change(\.|$)/.test(type)) listener.call(context, start0, stop0);
-      if (/^focus(\.|$)/.test(type)) listener.call(context, focus);
-    }
-
-    return context;
-  };
-
-  d3.select(window).on("keydown.context-" + ++cubism_id, function() {
-    switch (!d3.event.metaKey && d3.event.keyCode) {
-      case 37: // left
-        if (focus == null) focus = size - 1;
-        if (focus > 0) context.focus(--focus);
-        break;
-      case 39: // right
-        if (focus == null) focus = size - 2;
-        if (focus < size - 1) context.focus(++focus);
-        break;
-      default: return;
-    }
-    d3.event.preventDefault();
-  });
-
-  return update();
-};
-
-function cubism_context() {}
-
-var cubism_contextPrototype = cubism_context.prototype;
-
-cubism_contextPrototype.constant = function(value) {
-  return new cubism_metricConstant(this, +value);
-};
-cubism_contextPrototype.cube = function(host) {
-  if (!arguments.length) host = "";
-  var source = {},
-      context = this;
-
-  source.metric = function(expression) {
-    return context.metric(function(start, stop, step, callback) {
-      d3.json(host + "/1.0/metric"
-          + "?expression=" + encodeURIComponent(expression)
-          + "&start=" + cubism_cubeFormatDate(start)
-          + "&stop=" + cubism_cubeFormatDate(stop)
-          + "&step=" + step, function(data) {
-        if (!data) return callback(new Error("unable to load data"));
-        callback(null, data.map(function(d) { return d.value; }));
-      });
-    }, expression += "");
-  };
-
-  // Returns the Cube host.
-  source.toString = function() {
-    return host;
-  };
-
-  return source;
-};
-
-var cubism_cubeFormatDate = d3.time.format.iso;
-cubism_contextPrototype.graphite = function(host) {
-  if (!arguments.length) host = "";
-  var source = {},
-      context = this;
-
-  source.metric = function(expression) {
-    return context.metric(function(start, stop, step, callback) {
-      d3.text(host + "/render?format=raw"
-          + "&target=" + encodeURIComponent("alias(" + expression + ",'')")
-          + "&from=" + cubism_graphiteFormatDate(start - 2 * step) // off-by-two?
-          + "&until=" + cubism_graphiteFormatDate(stop - 1000), function(text) {
-        if (!text) return callback(new Error("unable to load data"));
-        callback(null, cubism_graphiteParse(text));
-      });
-    }, expression += "");
-  };
-
-  source.find = function(pattern, callback) {
-    d3.json(host + "/metrics/find?format=completer"
-        + "&query=" + encodeURIComponent(pattern), function(result) {
-      if (!result) return callback(new Error("unable to find metrics"));
-      callback(null, result.metrics.map(function(d) { return d.path; }));
-    });
-  };
-
-  // Returns the graphite host.
-  source.toString = function() {
-    return host;
-  };
-
-  return source;
-};
-
-// Graphite understands seconds since UNIX epoch.
-function cubism_graphiteFormatDate(time) {
-  return Math.floor(time / 1000);
-}
-
-// Helper method for parsing graphite's raw format.
-function cubism_graphiteParse(text) {
-  var i = text.indexOf("|"),
-      meta = text.substring(0, i),
-      c = meta.lastIndexOf(","),
-      b = meta.lastIndexOf(",", c - 1),
-      a = meta.lastIndexOf(",", b - 1),
-      start = meta.substring(a + 1, b) * 1000,
-      step = meta.substring(c + 1) * 1000;
-  return text
-      .substring(i + 1)
-      .split(",")
-      .slice(1) // the first value is always None?
-      .map(function(d) { return +d; });
-}
-function cubism_metric(context) {
-  if (!(context instanceof cubism_context)) throw new Error("invalid context");
-  this.context = context;
-}
-
-var cubism_metricPrototype = cubism_metric.prototype;
-
-cubism_metricPrototype.valueAt = function() {
-  return NaN;
-};
-
-cubism_metricPrototype.extent = function() {
-  var i = 0,
-      n = this.context.size(),
-      value,
-      min = Infinity,
-      max = -Infinity;
-  while (++i < n) {
-    value = this.valueAt(i);
-    if (value < min) min = value;
-    if (value > max) max = value;
-  }
-  return [min, max];
-};
-
-cubism_metricPrototype.on = function(type, listener) {
-  return arguments.length < 2 ? null : this;
-};
-
-cubism_metricPrototype.shift = function() {
-  return this;
-};
-
-cubism_metricPrototype.on = function() {
-  return arguments.length < 2 ? null : this;
-};
-
-cubism_contextPrototype.metric = function(request, name) {
-  var context = this,
-      metric = new cubism_metric(context),
-      id = ".metric-" + ++cubism_id,
-      start = -Infinity,
-      stop,
-      step = context.step(),
-      size = context.size(),
-      values = [],
-      event = d3.dispatch("change"),
-      listening = 0,
-      fetching;
-
-  // Prefetch new data into a temporary array.
-  function prepare(start1, stop) {
-    var steps = Math.min(size, Math.round((start1 - start) / step));
-    if (!steps || fetching) return; // already fetched, or fetching!
-    fetching = true;
-    steps = Math.min(size, steps + cubism_metricOverlap);
-    var start0 = new Date(stop - steps * step);
-    request(start0, stop, step, function(error, data) {
-      fetching = false;
-      if (error) return console.warn(error);
-      var i = isFinite(start) ? Math.round((start0 - start) / step) : 0;
-      for (var j = 0, m = data.length; j < m; ++j) values[j + i] = data[j];
-      event.change.call(metric, start, stop);
-    });
-  }
-
-  // When the context changes, switch to the new data, ready-or-not!
-  function beforechange(start1, stop1) {
-    if (!isFinite(start)) start = start1;
-    values.splice(0, Math.max(0, Math.min(size, Math.round((start1 - start) / step))));
-    start = start1;
-    stop = stop1;
-  }
-
-  //
-  metric.valueAt = function(i) {
-    return values[i];
-  };
-
-  //
-  metric.shift = function(offset) {
-    return context.metric(cubism_metricShift(request, +offset));
-  };
-
-  //
-  metric.on = function(type, listener) {
-    if (!arguments.length) return event.on(type);
-
-    // If there are no listeners, then stop listening to the context,
-    // and avoid unnecessary fetches.
-    if (listener == null) {
-      if (event.on(type) != null && --listening == 0) {
-        context.on("prepare" + id, null).on("beforechange" + id, null);
-      }
-    } else {
-      if (event.on(type) == null && ++listening == 1) {
-        context.on("prepare" + id, prepare).on("beforechange" + id, beforechange);
-      }
-    }
-
-    event.on(type, listener);
-
-    // Notify the listener of the current start and stop time, as appropriate.
-    // This way, charts can display synchronous metrics immediately.
-    if (listener != null) {
-      if (/^change(\.|$)/.test(type)) listener.call(context, start, stop);
-    }
-
-    return metric;
-  };
-
-  //
-  if (arguments.length > 1) metric.toString = function() {
-    return name;
-  };
-
-  return metric;
-};
-
-// Number of metric to refetch each period, in case of lag.
-var cubism_metricOverlap = 6;
-
-// Wraps the specified request implementation, and shifts time by the given offset.
-function cubism_metricShift(request, offset) {
-  return function(start, stop, step, callback) {
-    request(new Date(+start + offset), new Date(+stop + offset), step, callback);
-  };
-}
-function cubism_metricConstant(context, value) {
-  cubism_metric.call(this, context);
-  value = +value;
-  var name = value + "";
-  this.valueOf = function() { return value; };
-  this.toString = function() { return name; };
-}
-
-var cubism_metricConstantPrototype = cubism_metricConstant.prototype = Object.create(cubism_metric.prototype);
-
-cubism_metricConstantPrototype.valueAt = function() {
-  return +this;
-};
-
-cubism_metricConstantPrototype.extent = function() {
-  return [+this, +this];
-};
-function cubism_metricOperator(name, operate) {
-
-  function cubism_metricOperator(left, right) {
-    if (!(right instanceof cubism_metric)) right = new cubism_metricConstant(left.context, right);
-    else if (left.context !== right.context) throw new Error("mismatch context");
-    cubism_metric.call(this, left.context);
-    this.left = left;
-    this.right = right;
-    this.toString = function() { return left + " " + name + " " + right; };
-  }
-
-  var cubism_metricOperatorPrototype = cubism_metricOperator.prototype = Object.create(cubism_metric.prototype);
-
-  cubism_metricOperatorPrototype.valueAt = function(i) {
-    return operate(this.left.valueAt(i), this.right.valueAt(i));
-  };
-
-  cubism_metricOperatorPrototype.shift = function(offset) {
-    return new cubism_metricOperator(this.left.shift(offset), this.right.shift(offset));
-  };
-
-  cubism_metricOperatorPrototype.on = function(type, listener) {
-    if (arguments.length < 2) return this.left.on(type);
-    this.left.on(type, listener);
-    this.right.on(type, listener);
-    return this;
-  };
-
-  return function(right) {
-    return new cubism_metricOperator(this, right);
-  };
-}
-
-cubism_metricPrototype.add = cubism_metricOperator("+", function(left, right) {
-  return left + right;
-});
-
-cubism_metricPrototype.subtract = cubism_metricOperator("-", function(left, right) {
-  return left - right;
-});
-
-cubism_metricPrototype.multiply = cubism_metricOperator("*", function(left, right) {
-  return left * right;
-});
-
-cubism_metricPrototype.divide = cubism_metricOperator("/", function(left, right) {
-  return left / right;
-});
-cubism_contextPrototype.horizon = function() {
-  var context = this,
-      mode = "offset",
-      buffer = document.createElement("canvas"),
-      width = buffer.width = context.size(),
-      height = buffer.height = 30,
-      scale = d3.scale.linear().interpolate(d3.interpolateRound),
-      metric = cubism_identity,
-      extent = null,
-      title = cubism_identity,
-      format = d3.format(".2s"),
-      colors = ["#08519c","#3182bd","#6baed6","#bdd7e7","#bae4b3","#74c476","#31a354","#006d2c"];
-
-  function horizon(selection) {
-
-    selection
-        .on("mousemove.horizon", function() { context.focus(d3.mouse(this)[0]); })
-        .on("mouseout.horizon", function() { context.focus(null); });
-
-    selection.append("canvas")
-        .attr("width", width)
-        .attr("height", height);
-
-    selection.append("span")
-        .attr("class", "title")
-        .text(title);
-
-    selection.append("span")
-        .attr("class", "value");
-
-    selection.each(function(d, i) {
-      var that = this,
-          id = ++cubism_id,
-          metric_ = typeof metric === "function" ? metric.call(that, d, i) : metric,
-          colors_ = typeof colors === "function" ? colors.call(that, d, i) : colors,
-          extent_ = typeof extent === "function" ? extent.call(that, d, i) : extent,
-          start = -Infinity,
-          step = context.step(),
-          canvas = d3.select(that).select("canvas"),
-          span = d3.select(that).select(".value"),
-          max_,
-          m = colors_.length >> 1,
-          ready;
-
-      canvas.datum({id: id, metric: metric_});
-      canvas = canvas.node().getContext("2d");
-
-      function change(start1, stop) {
-        canvas.save();
-
-        // compute the new extent and ready flag
-        var extent = metric_.extent();
-        ready = extent.every(isFinite);
-        if (extent_ != null) extent = extent_;
-
-        // if this is an update (with no extent change), copy old values!
-        var i0 = 0, max = Math.max(-extent[0], extent[1]);
-        if (this === context) {
-          if (max == max_) {
-            i0 = width - cubism_metricOverlap;
-            var dx = (start1 - start) / step;
-            if (dx < width) {
-              var canvas0 = buffer.getContext("2d");
-              canvas0.clearRect(0, 0, width, height);
-              canvas0.drawImage(canvas.canvas, dx, 0, width - dx, height, 0, 0, width - dx, height);
-              canvas.clearRect(0, 0, width, height);
-              canvas.drawImage(canvas0.canvas, 0, 0);
-            }
-          }
-          start = start1;
-        }
-
-        // update the domain
-        scale.domain([0, max_ = max]);
-
-        // clear for the new data
-        canvas.clearRect(i0, 0, width - i0, height);
-
-        // record whether there are negative values to display
-        var negative;
-
-        // positive bands
-        for (var j = 0; j < m; ++j) {
-          canvas.fillStyle = colors_[m + j];
-
-          // Adjust the range based on the current band index.
-          var y0 = (j - m + 1) * height;
-          scale.range([m * height + y0, y0]);
-          y0 = scale(0);
-
-          for (var i = i0, n = width, y1; i < n; ++i) {
-            y1 = metric_.valueAt(i);
-            if (y1 <= 0) { negative = true; continue; }
-            canvas.fillRect(i, y1 = scale(y1), 1, y0 - y1);
-          }
-        }
-
-        if (negative) {
-          // enable offset mode
-          if (mode === "offset") {
-            canvas.translate(0, height);
-            canvas.scale(1, -1);
-          }
-
-          // negative bands
-          for (var j = 0; j < m; ++j) {
-            canvas.fillStyle = colors_[m - 1 - j];
-
-            // Adjust the range based on the current band index.
-            var y0 = (j - m + 1) * height;
-            scale.range([m * height + y0, y0]);
-            y0 = scale(0);
-
-            for (var i = i0, n = width, y1; i < n; ++i) {
-              y1 = metric_.valueAt(i);
-              if (y1 >= 0) continue;
-              canvas.fillRect(i, scale(-y1), 1, y0 - scale(-y1));
-            }
-          }
-        }
-
-        canvas.restore();
-      }
-
-      function focus(i) {
-        if (i == null) i = width - 1;
-        var value = metric_.valueAt(i);
-        span.datum(value).text(isNaN(value) ? null : format);
-      }
-
-      // Update the chart when the context changes.
-      context.on("change.horizon-" + id, change);
-      context.on("focus.horizon-" + id, focus);
-
-      // Display the first metric change immediately,
-      // but defer subsequent updates to the canvas change.
-      // Note that someone still needs to listen to the metric,
-      // so that it continues to update automatically.
-      metric_.on("change.horizon-" + id, function(start, stop) {
-        change(start, stop), focus();
-        if (ready) metric_.on("change.horizon-" + id, cubism_identity);
-      });
-    });
-  }
-
-  horizon.remove = function(selection) {
-
-    selection
-        .on("mousemove.horizon", null)
-        .on("mouseout.horizon", null);
-
-    selection.selectAll("canvas")
-        .each(remove)
-        .remove();
-
-    selection.selectAll(".title,.value")
-        .remove();
-
-    function remove(d) {
-      d.metric.on("change.horizon-" + d.id, null);
-      context.on("change.horizon-" + d.id, null);
-      context.on("focus.horizon-" + d.id, null);
-    }
-  };
-
-  horizon.mode = function(_) {
-    if (!arguments.length) return mode;
-    mode = _ + "";
-    return horizon;
-  };
-
-  horizon.height = function(_) {
-    if (!arguments.length) return height;
-    buffer.height = height = +_;
-    return horizon;
-  };
-
-  horizon.metric = function(_) {
-    if (!arguments.length) return metric;
-    metric = _;
-    return horizon;
-  };
-
-  horizon.scale = function(_) {
-    if (!arguments.length) return scale;
-    scale = _;
-    return horizon;
-  };
-
-  horizon.extent = function(_) {
-    if (!arguments.length) return extent;
-    extent = _;
-    return horizon;
-  };
-
-  horizon.title = function(_) {
-    if (!arguments.length) return title;
-    title = _;
-    return horizon;
-  };
-
-  horizon.format = function(_) {
-    if (!arguments.length) return format;
-    format = _;
-    return horizon;
-  };
-
-  horizon.colors = function(_) {
-    if (!arguments.length) return colors;
-    colors = _;
-    return horizon;
-  };
-
-  return horizon;
-};
-cubism_contextPrototype.comparison = function() {
-  var context = this,
-      width = context.size(),
-      height = 120,
-      scale = d3.scale.linear().interpolate(d3.interpolateRound),
-      primary = function(d) { return d[0]; },
-      secondary = function(d) { return d[1]; },
-      extent = null,
-      title = cubism_identity,
-      formatPrimary = cubism_comparisonPrimaryFormat,
-      formatChange = cubism_comparisonChangeFormat,
-      colors = ["#9ecae1", "#225b84", "#a1d99b", "#22723a"],
-      strokeWidth = 1.5;
-
-  function comparison(selection) {
-
-    selection
-        .on("mousemove.comparison", function() { context.focus(d3.mouse(this)[0]); })
-        .on("mouseout.comparison", function() { context.focus(null); });
-
-    selection.append("canvas")
-        .attr("width", width)
-        .attr("height", height);
-
-    selection.append("span")
-        .attr("class", "title")
-        .text(title);
-
-    selection.append("span")
-        .attr("class", "value primary");
-
-    selection.append("span")
-        .attr("class", "value change");
-
-    selection.each(function(d, i) {
-      var that = this,
-          id = ++cubism_id,
-          primary_ = typeof primary === "function" ? primary.call(that, d, i) : primary,
-          secondary_ = typeof secondary === "function" ? secondary.call(that, d, i) : secondary,
-          extent_ = typeof extent === "function" ? extent.call(that, d, i) : extent,
-          div = d3.select(that),
-          canvas = div.select("canvas"),
-          spanPrimary = div.select(".value.primary"),
-          spanChange = div.select(".value.change"),
-          ready;
-
-      canvas.datum({id: id, primary: primary_, secondary: secondary_});
-      canvas = canvas.node().getContext("2d");
-
-      function change(start, stop) {
-        canvas.save();
-        canvas.clearRect(0, 0, width, height);
-
-        // update the scale
-        var primaryExtent = primary_.extent(),
-            secondaryExtent = secondary_.extent(),
-            extent = extent_ == null ? primaryExtent : extent_;
-        scale.domain(extent).range([height, 0]);
-        ready = primaryExtent.concat(secondaryExtent).every(isFinite);
-
-        // consistent overplotting
-        var round = start / context.step() & 1
-            ? cubism_comparisonRoundOdd
-            : cubism_comparisonRoundEven;
-
-        // positive changes
-        canvas.fillStyle = colors[2];
-        for (var i = 0, n = width; i < n; ++i) {
-          var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-          if (y0 < y1) canvas.fillRect(round(i), y0, 1, y1 - y0);
-        }
-
-        // negative changes
-        canvas.fillStyle = colors[0];
-        for (i = 0; i < n; ++i) {
-          var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-          if (y0 > y1) canvas.fillRect(round(i), y1, 1, y0 - y1);
-        }
-
-        // positive values
-        canvas.fillStyle = colors[3];
-        for (i = 0; i < n; ++i) {
-          var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-          if (y0 <= y1) canvas.fillRect(round(i), y0, 1, strokeWidth);
-        }
-
-        // negative values
-        canvas.fillStyle = colors[1];
-        for (i = 0; i < n; ++i) {
-          var y0 = scale(primary_.valueAt(i)),
-              y1 = scale(secondary_.valueAt(i));
-          if (y0 > y1) canvas.fillRect(round(i), y0 - strokeWidth, 1, strokeWidth);
-        }
-
-        canvas.restore();
-      }
-
-      function focus(i) {
-        if (i == null) i = width - 1;
-        var valuePrimary = primary_.valueAt(i),
-            valueSecondary = secondary_.valueAt(i),
-            valueChange = (valuePrimary - valueSecondary) / valueSecondary;
-
-        spanPrimary
-            .datum(valuePrimary)
-            .text(isNaN(valuePrimary) ? null : formatPrimary);
-
-        spanChange
-            .datum(valueChange)
-            .text(isNaN(valueChange) ? null : formatChange)
-            .attr("class", "value change " + (valueChange > 0 ? "positive" : valueChange < 0 ? "negative" : ""));
-      }
-
-      // Display the first primary change immediately,
-      // but defer subsequent updates to the context change.
-      // Note that someone still needs to listen to the metric,
-      // so that it continues to update automatically.
-      primary_.on("change.comparison-" + id, firstChange);
-      secondary_.on("change.comparison-" + id, firstChange);
-      function firstChange(start, stop) {
-        change(start, stop), focus();
-        if (ready) {
-          primary_.on("change.comparison-" + id, cubism_identity);
-          secondary_.on("change.comparison-" + id, cubism_identity);
-        }
-      }
-
-      // Update the chart when the context changes.
-      context.on("change.comparison-" + id, change);
-      context.on("focus.comparison-" + id, focus);
-    });
-  }
-
-  comparison.remove = function(selection) {
-
-    selection
-        .on("mousemove.comparison", null)
-        .on("mouseout.comparison", null);
-
-    selection.selectAll("canvas")
-        .each(remove)
-        .remove();
-
-    selection.selectAll(".title,.value")
-        .remove();
-
-    function remove(d) {
-      d.primary.on("change.comparison-" + d.id, null);
-      d.secondary.on("change.comparison-" + d.id, null);
-      context.on("change.comparison-" + d.id, null);
-      context.on("focus.comparison-" + d.id, null);
-    }
-  };
-
-  comparison.height = function(_) {
-    if (!arguments.length) return height;
-    height = +_;
-    return comparison;
-  };
-
-  comparison.primary = function(_) {
-    if (!arguments.length) return primary;
-    primary = _;
-    return comparison;
-  };
-
-  comparison.secondary = function(_) {
-    if (!arguments.length) return secondary;
-    secondary = _;
-    return comparison;
-  };
-
-  comparison.scale = function(_) {
-    if (!arguments.length) return scale;
-    scale = _;
-    return comparison;
-  };
-
-  comparison.extent = function(_) {
-    if (!arguments.length) return extent;
-    extent = _;
-    return comparison;
-  };
-
-  comparison.title = function(_) {
-    if (!arguments.length) return title;
-    title = _;
-    return comparison;
-  };
-
-  comparison.formatPrimary = function(_) {
-    if (!arguments.length) return formatPrimary;
-    formatPrimary = _;
-    return comparison;
-  };
-
-  comparison.formatChange = function(_) {
-    if (!arguments.length) return formatChange;
-    formatChange = _;
-    return comparison;
-  };
-
-  comparison.colors = function(_) {
-    if (!arguments.length) return colors;
-    colors = _;
-    return comparison;
-  };
-
-  comparison.strokeWidth = function(_) {
-    if (!arguments.length) return strokeWidth;
-    strokeWidth = _;
-    return comparison;
-  };
-
-  return comparison;
-};
-
-var cubism_comparisonPrimaryFormat = d3.format(".2s"),
-    cubism_comparisonChangeFormat = d3.format("+.0%");
-
-function cubism_comparisonRoundEven(i) {
-  return i & 0xfffffe;
-}
-
-function cubism_comparisonRoundOdd(i) {
-  return ((i + 1) & 0xfffffe) - 1;
-}
-cubism_contextPrototype.axis = function() {
-  var context = this,
-      scale = context.scale,
-      axis_ = d3.svg.axis().scale(scale),
-      format = context.step() < 6e4 ? cubism_axisFormatSeconds : cubism_axisFormatMinutes;
-
-  function axis(selection) {
-    var id = ++cubism_id,
-        tick;
-
-    var g = selection.append("svg")
-        .datum({id: id})
-        .attr("width", context.size())
-        .attr("height", Math.max(28, -axis.tickSize()))
-      .append("g")
-        .attr("transform", "translate(0," + (axis_.orient() === "top" ? 27 : 4) + ")")
-        .call(axis_);
-
-    context.on("change.axis-" + id, function() {
-      g.call(axis_);
-      if (!tick) tick = cloneTick();
-    });
-
-    context.on("focus.axis-" + id, function(i) {
-      if (tick) {
-        if (i == null) {
-          tick.style("display", "none");
-          g.selectAll("text").style("fill-opacity", null);
-        } else {
-          tick.style("display", null).attr("x", i).text(format(scale.invert(i)));
-          var dx = tick.node().getComputedTextLength() + 6;
-          g.selectAll("text").style("fill-opacity", function(d) { return Math.abs(scale(d) - i) < dx ? 0 : 1; });
-        }
-      }
-    });
-
-    function cloneTick() {
-      return g.select(function() { return this.appendChild(g.select("text").node().cloneNode(true)); })
-          .style("display", "none")
-          .text(null);
-    }
-  }
-
-  axis.remove = function(selection) {
-
-    selection.selectAll("svg")
-        .each(remove)
-        .remove();
-
-    function remove(d) {
-      context.on("change.axis-" + d.id, null);
-      context.on("focus.axis-" + d.id, null);
-    }
-  };
-
-  return d3.rebind(axis, axis_,
-      "orient",
-      "ticks",
-      "tickSubdivide",
-      "tickSize",
-      "tickPadding",
-      "tickFormat");
-};
-
-var cubism_axisFormatSeconds = d3.time.format("%I:%M:%S %p"),
-    cubism_axisFormatMinutes = d3.time.format("%I:%M %p");
-cubism_contextPrototype.rule = function() {
-  var context = this;
-
-  function rule(selection) {
-    var id = ++cubism_id;
-
-    var line = selection.append("div")
-        .datum({id: id})
-        .attr("class", "line")
-        .style("position", "fixed")
-        .style("top", 0)
-        .style("right", 0)
-        .style("bottom", 0)
-        .style("width", "1px")
-        .style("pointer-events", "none");
-
-    context.on("focus.rule-" + id, function(i) {
-      line
-          .style("display", i == null ? "none" : null)
-          .style("left", function() { return this.parentNode.getBoundingClientRect().left + i + "px"; });
-    });
-  }
-
-  rule.remove = function(selection) {
-
-    selection.selectAll(".line")
-        .each(remove)
-        .remove();
-
-    function remove(d) {
-      context.on("focus.rule-" + d.id, null);
-    }
-  };
-
-  return rule;
-};
-})(this);

http://git-wip-us.apache.org/repos/asf/mesos/blob/5852eb93/src/webui/master/static/cubism.v1.min.js
----------------------------------------------------------------------
diff --git a/src/webui/master/static/cubism.v1.min.js b/src/webui/master/static/cubism.v1.min.js
deleted file mode 100644
index 16aa4ba..0000000
--- a/src/webui/master/static/cubism.v1.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(a){function d(a){return a}function e(){}function h(a){return Math.floor(a/1e3)}function i(a){var b=a.indexOf("|"),c=a.substring(0,b),d=c.lastIndexOf(","),e=c.lastIndexOf(",",d-1),f=c.lastIndexOf(",",e-1),g=c.substring(f+1,e)*1e3,h=c.substring(d+1)*1e3;return a.substring(b+1).split(",").slice(1).map(function(a){return+a})}function j(a){if(!(a instanceof e))throw new Error("invalid context");this.context=a}function m(a,b){return function(c,d,e,f){a(new Date(+c+b),new Date(+d+b),e,f)}}function n(a,b){j.call(this,a),b=+b;var c=b+"";this.valueOf=function(){return b},this.toString=function(){return c}}function p(a,b){function c(b,c){if(c instanceof j){if(b.context!==c.context)throw new Error("mismatch context")}else c=new n(b.context,c);j.call(this,b.context),this.left=b,this.right=c,this.toString=function(){return b+" "+a+" "+c}}var d=c.prototype=Object.create(j.prototype);return d.valueAt=function(a){return b(this.left.valueAt(a),this.right.valueAt(a))},d.shift=function(a){ret
 urn new c(this.left.shift(a),this.right.shift(a))},d.on=function(a,b){return arguments.length<2?this.left.on(a):(this.left.on(a,b),this.right.on(a,b),this)},function(a){return new c(this,a)}}function s(a){return a&16777214}function t(a){return(a+1&16777214)-1}function x(a){a.style("position","absolute").style("top",0).style("bottom",0).style("width","1px").style("pointer-events","none")}function y(a){return a+"px"}var b=a.cubism={version:"1.2.2"},c=0;b.option=function(a,c){var d=b.options(a);return d.length?d[0]:c},b.options=function(a,b){var c=location.search.substring(1).split("&"),d=[],e=-1,f=c.length,g;while(++e<f)(g=c[e].split("="))[0]==a&&d.push(decodeURIComponent(g[1]));return d.length||arguments.length<2?d:b},b.context=function(){function p(){var c=Date.now();return g=new Date(Math.floor((c-j-k)/b)*b),f=new Date(g-d*b),i=new Date(Math.floor((c-j)/b)*b),h=new Date(i-d*b),m.domain([f,g]),a}var a=new e,b=1e4,d=1440,f,g,h,i,j=5e3,k=5e3,l=d3.dispatch("prepare","beforechange","cha
 nge","focus"),m=a.scale=d3.time.scale().range([0,d]),n,o;return a.start=function(){n&&clearTimeout(n);var c=+i+j-Date.now();return c<k&&(c+=b),n=setTimeout(function e(){i=new Date(Math.floor((Date.now()-j)/b)*b),h=new Date(i-d*b),l.prepare.call(a,h,i),setTimeout(function(){m.domain([f=h,g=i]),l.beforechange.call(a,h,i),l.change.call(a,h,i),l.focus.call(a,o)},k),n=setTimeout(e,b)},c),a},a.stop=function(){return n=clearTimeout(n),a},n=setTimeout(a.start,10),a.step=function(a){return arguments.length?(b=+a,p()):b},a.size=function(a){return arguments.length?(m.range([0,d=+a]),p()):d},a.serverDelay=function(a){return arguments.length?(j=+a,p()):j},a.clientDelay=function(a){return arguments.length?(k=+a,p()):k},a.focus=function(b){return l.focus.call(a,o=b),a},a.on=function(b,c){return arguments.length<2?l.on(b):(l.on(b,c),c!=null&&(/^prepare(\.|$)/.test(b)&&c.call(a,h,i),/^beforechange(\.|$)/.test(b)&&c.call(a,f,g),/^change(\.|$)/.test(b)&&c.call(a,f,g),/^focus(\.|$)/.test(b)&&c.call(a,o
 )),a)},d3.select(window).on("keydown.context-"+ ++c,function(){switch(!d3.event.metaKey&&d3.event.keyCode){case 37:o==null&&(o=d-1),o>0&&a.focus(--o);break;case 39:o==null&&(o=d-2),o<d-1&&a.focus(++o);break;default:return}d3.event.preventDefault()}),p()};var f=b.context.prototype=e.prototype;f.constant=function(a){return new n(this,+a)},f.cube=function(a){arguments.length||(a="");var b={},c=this;return b.metric=function(b){return c.metric(function(c,d,e,f){d3.json(a+"/1.0/metric"+"?expression="+encodeURIComponent(b)+"&start="+g(c)+"&stop="+g(d)+"&step="+e,function(a){if(!a)return f(new Error("unable to load data"));f(null,a.map(function(a){return a.value}))})},b+="")},b.toString=function(){return a},b};var g=d3.time.format.iso;f.graphite=function(a){arguments.length||(a="");var b={},c=this;return b.metric=function(b){var d="sum",e=c.metric(function(c,e,f,g){var j=b;f!==1e4&&(j="summarize("+j+",'"+(f%36e5?f%6e4?f/1e3+"sec":f/6e4+"min":f/36e5+"hour")+"','"+d+"')"),d3.text(a+"/render?f
 ormat=raw"+"&target="+encodeURIComponent("alias("+j+",'')")+"&from="+h(c-2*f)+"&until="+h(e-1e3),function(a){if(!a)return g(new Error("unable to load data"));g(null,i(a))})},b+="");return e.summarize=function(a){return d=a,e},e},b.find=function(b,c){d3.json(a+"/metrics/find?format=completer"+"&query="+encodeURIComponent(b),function(a){if(!a)return c(new Error("unable to find metrics"));c(null,a.metrics.map(function(a){return a.path}))})},b.toString=function(){return a},b};var k=j.prototype;b.metric=j,k.valueAt=function(){return NaN},k.alias=function(a){return this.toString=function(){return a},this},k.extent=function(){var a=0,b=this.context.size(),c,d=Infinity,e=-Infinity;while(++a<b)c=this.valueAt(a),c<d&&(d=c),c>e&&(e=c);return[d,e]},k.on=function(a,b){return arguments.length<2?null:this},k.shift=function(){return this},k.on=function(){return arguments.length<2?null:this},f.metric=function(a,b){function r(b,c){var d=Math.min(k,Math.round((b-g)/i));if(!d||q)return;q=!0,d=Math.min(
 k,d+l);var f=new Date(c-d*i);a(f,c,i,function(a,b){q=!1;if(a)return console.warn(a);var d=isFinite(g)?Math.round((f-g)/i):0;for(var h=0,j=b.length;h<j;++h)n[h+d]=b[h];o.change.call(e,g,c)})}function s(a,b){isFinite(g)||(g=a),n.splice(0,Math.max(0,Math.min(k,Math.round((a-g)/i)))),g=a,h=b}var d=this,e=new j(d),f=".metric-"+ ++c,g=-Infinity,h,i=d.step(),k=d.size(),n=[],o=d3.dispatch("change"),p=0,q;return e.valueAt=function(a){return n[a]},e.shift=function(b){return d.metric(m(a,+b))},e.on=function(a,b){return arguments.length?(b==null?o.on(a)!=null&&--p==0&&d.on("prepare"+f,null).on("beforechange"+f,null):o.on(a)==null&&++p==1&&d.on("prepare"+f,r).on("beforechange"+f,s),o.on(a,b),b!=null&&/^change(\.|$)/.test(a)&&b.call(d,g,h),e):o.on(a)},arguments.length>1&&(e.toString=function(){return b}),e};var l=6,o=n.prototype=Object.create(j.prototype);o.valueAt=function(){return+this},o.extent=function(){return[+this,+this]},k.add=p("+",function(a,b){return a+b}),k.subtract=p("-",function(a,b
 ){return a-b}),k.multiply=p("*",function(a,b){return a*b}),k.divide=p("/",function(a,b){return a/b}),f.horizon=function(){function o(o){o.on("mousemove.horizon",function(){a.focus(Math.round(d3.mouse(this)[0]))}).on("mouseout.horizon",function(){a.focus(null)}),o.append("canvas").attr("width",f).attr("height",g),o.append("span").attr("class","title").text(k),o.append("span").attr("class","value"),o.each(function(k,o){function B(c,d){w.save();var i=r.extent();A=i.every(isFinite),t!=null&&(i=t);var j=0,k=Math.max(-i[0],i[1]);if(this===a){if(k==y){j=f-l;var m=(c-u)/v;if(m<f){var n=e.getContext("2d");n.clearRect(0,0,f,g),n.drawImage(w.canvas,m,0,f-m,g,0,0,f-m,g),w.clearRect(0,0,f,g),w.drawImage(n.canvas,0,0)}}u=c}h.domain([0,y=k]),w.clearRect(j,0,f-j,g);var o;for(var p=0;p<z;++p){w.fillStyle=s[z+p];var q=(p-z+1)*g;h.range([z*g+q,q]),q=h(0);for(var x=j,B=f,C;x<B;++x){C=r.valueAt(x);if(C<=0){o=!0;continue}w.fillRect(x,C=h(C),1,q-C)}}if(o){b==="offset"&&(w.translate(0,g),w.scale(1,-1));for
 (var p=0;p<z;++p){w.fillStyle=s[z-1-p];var q=(p-z+1)*g;h.range([z*g+q,q]),q=h(0);for(var x=j,B=f,C;x<B;++x){C=r.valueAt(x);if(C>=0)continue;w.fillRect(x,h(-C),1,q-h(-C))}}}w.restore()}function C(a){a==null&&(a=f-1);var b=r.valueAt(a);x.datum(b).text(isNaN(b)?null:m)}var p=this,q=++c,r=typeof i=="function"?i.call(p,k,o):i,s=typeof n=="function"?n.call(p,k,o):n,t=typeof j=="function"?j.call(p,k,o):j,u=-Infinity,v=a.step(),w=d3.select(p).select("canvas"),x=d3.select(p).select(".value"),y,z=s.length>>1,A;w.datum({id:q,metric:r}),w=w.node().getContext("2d"),a.on("change.horizon-"+q,B),a.on("focus.horizon-"+q,C),r.on("change.horizon-"+q,function(a,b){B(a,b),C(),A&&r.on("change.horizon-"+q,d)})})}var a=this,b="offset",e=document.createElement("canvas"),f=e.width=a.size(),g=e.height=30,h=d3.scale.linear().interpolate(d3.interpolateRound),i=d,j=null,k=d,m=d3.format(".2s"),n=["#08519c","#3182bd","#6baed6","#bdd7e7","#bae4b3","#74c476","#31a354","#006d2c"];return o.remove=function(b){function 
 c(b){b.metric.on("change.horizon-"+b.id,null),a.on("change.horizon-"+b.id,null),a.on("focus.horizon-"+b.id,null)}b.on("mousemove.horizon",null).on("mouseout.horizon",null),b.selectAll("canvas").each(c).remove(),b.selectAll(".title,.value").remove()},o.mode=function(a){return arguments.length?(b=a+"",o):b},o.height=function(a){return arguments.length?(e.height=g=+a,o):g},o.metric=function(a){return arguments.length?(i=a,o):i},o.scale=function(a){return arguments.length?(h=a,o):h},o.extent=function(a){return arguments.length?(j=a,o):j},o.title=function(a){return arguments.length?(k=a,o):k},o.format=function(a){return arguments.length?(m=a,o):m},o.colors=function(a){return arguments.length?(n=a,o):n},o},f.comparison=function(){function o(o){o.on("mousemove.comparison",function(){a.focus(Math.round(d3.mouse(this)[0]))}).on("mouseout.comparison",function(){a.focus(null)}),o.append("canvas").attr("width",b).attr("height",e),o.append("span").attr("class","title").text(j),o.append("span").a
 ttr("class","value primary"),o.append("span").attr("class","value change"),o.each(function(j,o){function B(c,d){x.save(),x.clearRect(0,0,b,e);var g=r.extent(),h=u.extent(),i=v==null?g:v;f.domain(i).range([e,0]),A=g.concat(h).every(isFinite);var j=c/a.step()&1?t:s;x.fillStyle=m[2];for(var k=0,l=b;k<l;++k){var o=f(r.valueAt(k)),p=f(u.valueAt(k));o<p&&x.fillRect(j(k),o,1,p-o)}x.fillStyle=m[0];for(k=0;k<l;++k){var o=f(r.valueAt(k)),p=f(u.valueAt(k));o>p&&x.fillRect(j(k),p,1,o-p)}x.fillStyle=m[3];for(k=0;k<l;++k){var o=f(r.valueAt(k)),p=f(u.valueAt(k));o<=p&&x.fillRect(j(k),o,1,n)}x.fillStyle=m[1];for(k=0;k<l;++k){var o=f(r.valueAt(k)),p=f(u.valueAt(k));o>p&&x.fillRect(j(k),o-n,1,n)}x.restore()}function C(a){a==null&&(a=b-1);var c=r.valueAt(a),d=u.valueAt(a),e=(c-d)/d;y.datum(c).text(isNaN(c)?null:k),z.datum(e).text(isNaN(e)?null:l).attr("class","value change "+(e>0?"positive":e<0?"negative":""))}function D(a,b){B(a,b),C(),A&&(r.on("change.comparison-"+q,d),u.on("change.comparison-"+q,d)
 )}var p=this,q=++c,r=typeof g=="function"?g.call(p,j,o):g,u=typeof h=="function"?h.call(p,j,o):h,v=typeof i=="function"?i.call(p,j,o):i,w=d3.select(p),x=w.select("canvas"),y=w.select(".value.primary"),z=w.select(".value.change"),A;x.datum({id:q,primary:r,secondary:u}),x=x.node().getContext("2d"),r.on("change.comparison-"+q,D),u.on("change.comparison-"+q,D),a.on("change.comparison-"+q,B),a.on("focus.comparison-"+q,C)})}var a=this,b=a.size(),e=120,f=d3.scale.linear().interpolate(d3.interpolateRound),g=function(a){return a[0]},h=function(a){return a[1]},i=null,j=d,k=q,l=r,m=["#9ecae1","#225b84","#a1d99b","#22723a"],n=1.5;return o.remove=function(b){function c(b){b.primary.on("change.comparison-"+b.id,null),b.secondary.on("change.comparison-"+b.id,null),a.on("change.comparison-"+b.id,null),a.on("focus.comparison-"+b.id,null)}b.on("mousemove.comparison",null).on("mouseout.comparison",null),b.selectAll("canvas").each(c).remove(),b.selectAll(".title,.value").remove()},o.height=function(a){
 return arguments.length?(e=+a,o):e},o.primary=function(a){return arguments.length?(g=a,o):g},o.secondary=function(a){return arguments.length?(h=a,o):h},o.scale=function(a){return arguments.length?(f=a,o):f},o.extent=function(a){return arguments.length?(i=a,o):i},o.title=function(a){return arguments.length?(j=a,o):j},o.formatPrimary=function(a){return arguments.length?(k=a,o):k},o.formatChange=function(a){return arguments.length?(l=a,o):l},o.colors=function(a){return arguments.length?(m=a,o):m},o.strokeWidth=function(a){return arguments.length?(n=a,o):n},o};var q=d3.format(".2s"),r=d3.format("+.0%");f.axis=function(){function f(g){var h=++c,i,j=g.append("svg").datum({id:h}).attr("width",a.size()).attr("height",Math.max(28,-f.tickSize())).append("g").attr("transform","translate(0,"+(d.orient()==="top"?27:4)+")").call(d);a.on("change.axis-"+h,function(){j.call(d),i||(i=d3.select(j.node().appendChild(j.selectAll("text").node().cloneNode(!0))).style("display","none").text(null))}),a.on("
 focus.axis-"+h,function(a){if(i)if(a==null)i.style("display","none"),j.selectAll("text").style("fill-opacity",null);else{i.style("display",null).attr("x",a).text(e(b.invert(a)));var c=i.node().getComputedTextLength()+6;j.selectAll("text").style("fill-opacity",function(d){return Math.abs(b(d)-a)<c?0:1})}})}var a=this,b=a.scale,d=d3.svg.axis().scale(b),e=a.step()<6e4?u:a.step()<864e5?v:w;return f.remove=function(b){function c(b){a.on("change.axis-"+b.id,null),a.on("focus.axis-"+b.id,null)}b.selectAll("svg").each(c).remove()},d3.rebind(f,d,"orient","ticks","tickSubdivide","tickSize","tickPadding","tickFormat")};var u=d3.time.format("%I:%M:%S %p"),v=d3.time.format("%I:%M %p"),w=d3.time.format("%B %d");f.rule=function(){function e(d){var e=++c,f=d.append("div").datum({id:e}).attr("class","line").call(x);d.each(function(e,f){function j(b,c){var e=[];for(var f=0,g=a.size();f<g;++f)i.valueAt(f)&&e.push(f);var h=d.selectAll(".metric").data(e);h.exit().remove(),h.enter().append("div").attr("c
 lass","metric line").call(x),h.style("left",y)}var g=this,h=++c,i=typeof b=="function"?b.call(g,e,f):b;if(!i)return;a.on("change.rule-"+h,j),i.on("change.rule-"+h,j)}),a.on("focus.rule-"+e,function(a){f.datum(a).style("display",a==null?"none":null).style("left",a==null?null:y)})}var a=this,b=d;return e.remove=function(b){function c(b){a.on("focus.rule-"+b.id,null)}b.selectAll(".line").each(c).remove()},e.metric=function(a){return arguments.length?(b=a,e):b},e}})(this);
\ No newline at end of file