Commit fc50d995 authored by Savorboard's avatar Savorboard

add dashbaord

parent 5c6dc66c
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Sample.RabbitMQ.SqlServer.Controllers;
namespace Sample.RabbitMQ.SqlServer namespace Sample.RabbitMQ.SqlServer
{ {
public class AppDbContext : DbContext public class AppDbContext : DbContext
{ {
public DbSet<Person> Persons { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {
optionsBuilder.UseSqlServer("Server=192.168.2.206;Initial Catalog=TestCap;User Id=cmswuliu;Password=h7xY81agBn*Veiu3;MultipleActiveResultSets=True"); //optionsBuilder.UseSqlServer("Server=192.168.2.206;Initial Catalog=TestCap;User Id=cmswuliu;Password=h7xY81agBn*Veiu3;MultipleActiveResultSets=True");
//optionsBuilder.UseSqlServer("Server=DESKTOP-M9R8T31;Initial Catalog=Sample.Kafka.SqlServer;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True"); optionsBuilder.UseSqlServer("Server=DESKTOP-M9R8T31;Initial Catalog=Sample.Kafka.SqlServer;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True");
} }
} }
} }
...@@ -2,12 +2,14 @@ ...@@ -2,12 +2,14 @@
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
using DotNetCore.CAP; using DotNetCore.CAP;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Sample.RabbitMQ.SqlServer.Controllers namespace Sample.RabbitMQ.SqlServer.Controllers
{ {
public class Person public class Person
{ {
public int Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public int Age { get; set; } public int Age { get; set; }
...@@ -33,12 +35,14 @@ namespace Sample.RabbitMQ.SqlServer.Controllers ...@@ -33,12 +35,14 @@ namespace Sample.RabbitMQ.SqlServer.Controllers
[Route("~/publish")] [Route("~/publish")]
public IActionResult PublishMessage() public IActionResult PublishMessage()
{ {
using(var trans = _dbContext.Database.BeginTransaction()) var person = new Person { Name = "宜兴", Age = 11 };
{
//_capBus.Publish("sample.rabbitmq.mysql22222", DateTime.Now); _dbContext.Persons.Add(person);
_capBus.Publish("sample.rabbitmq.mysql33333", new Person { Name = "宜兴", Age = 11 }); _dbContext.SaveChanges();
trans.Commit(); throw new Exception();
} //_capBus.Publish("sample.rabbitmq.mysql22222", DateTime.Now);
_capBus.Publish("sample.rabbitmq.mysql33333", person);
return Ok(); return Ok();
} }
...@@ -48,7 +52,7 @@ namespace Sample.RabbitMQ.SqlServer.Controllers ...@@ -48,7 +52,7 @@ namespace Sample.RabbitMQ.SqlServer.Controllers
using (var trans = await _dbContext.Database.BeginTransactionAsync()) using (var trans = await _dbContext.Database.BeginTransactionAsync())
{ {
await _capBus.PublishAsync("sample.rabbitmq.mysql", ""); await _capBus.PublishAsync("sample.rabbitmq.mysql", "");
trans.Commit(); trans.Commit();
} }
return Ok(); return Ok();
......
// <auto-generated />
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Storage.Internal;
using Sample.RabbitMQ.SqlServer;
using System;
namespace Sample.RabbitMQ.SqlServer.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20170824130007_AddPersons")]
partial class AddPersons
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "2.0.0-rtm-26452")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("Sample.RabbitMQ.SqlServer.Controllers.Person", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("Age");
b.Property<string>("Name");
b.HasKey("Id");
b.ToTable("Persons");
});
#pragma warning restore 612, 618
}
}
}
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using System;
using System.Collections.Generic;
namespace Sample.RabbitMQ.SqlServer.Migrations
{
public partial class AddPersons : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Persons",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Age = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Persons", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Persons");
}
}
}
// <auto-generated />
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Storage.Internal;
using Sample.RabbitMQ.SqlServer;
using System;
namespace Sample.RabbitMQ.SqlServer.Migrations
{
[DbContext(typeof(AppDbContext))]
partial class AppDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "2.0.0-rtm-26452")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("Sample.RabbitMQ.SqlServer.Controllers.Person", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("Age");
b.Property<string>("Name");
b.HasKey("Id");
b.ToTable("Persons");
});
#pragma warning restore 612, 618
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DotNetCore.CAP;
namespace Sample.RabbitMQ.SqlServer.Services
{
public interface ICmsService
{
void Add();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Sample.RabbitMQ.SqlServer.Services
{
public interface IOrderService
{
void Check();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DotNetCore.CAP;
namespace Sample.RabbitMQ.SqlServer.Services.Impl
{
public class CmsService : ICmsService, ICapSubscribe
{
public void Add()
{
throw new NotImplementedException();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DotNetCore.CAP;
namespace Sample.RabbitMQ.SqlServer.Services.Impl
{
public class OrderService : IOrderService, ICapSubscribe
{
public void Check()
{
throw new NotImplementedException();
}
}
}
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sample.RabbitMQ.SqlServer.Services;
using Sample.RabbitMQ.SqlServer.Services.Impl;
namespace Sample.RabbitMQ.SqlServer namespace Sample.RabbitMQ.SqlServer
{ {
...@@ -11,14 +13,13 @@ namespace Sample.RabbitMQ.SqlServer ...@@ -11,14 +13,13 @@ namespace Sample.RabbitMQ.SqlServer
{ {
services.AddDbContext<AppDbContext>(); services.AddDbContext<AppDbContext>();
services.AddTransient<IOrderService, OrderService>();
services.AddTransient<ICmsService, CmsService>();
services.AddCap(x => services.AddCap(x =>
{ {
x.UseEntityFramework<AppDbContext>(); x.UseEntityFramework<AppDbContext>();
x.UseRabbitMQ(y=> { x.UseRabbitMQ("localhost");
y.HostName = "192.168.2.206";
y.UserName = "admin";
y.Password = "123123";
});
}); });
services.AddMvc(); services.AddMvc();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Sticky footer styles
-------------------------------------------------- */
html, body {
height: 100%;
/* The html and body elements cannot have any padding or margin. */
}
body {
/* 75px to make the container go all the way to the bottom of the topbar */
padding-top: 75px;
}
/* Wrapper for page content to push down footer */
#wrap {
min-height: 100%;
height: auto !important;
height: 100%;
/* Negative indent footer by its height */
margin: 0 auto -60px;
/* Pad bottom by footer height */
padding: 0 0 60px;
}
/* Set the fixed height of the footer here */
#footer {
background-color: #f5f5f5;
}
/* Custom page CSS
-------------------------------------------------- */
.container .credit {
margin: 20px 0;
}
.page-header {
margin-top: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.btn-death {
background-color: #777;
border-color: #666;
color: #fff;
}
.btn-death:hover {
background-color: #666;
border-color: #555;
color: #fff;
}
.list-group .list-group-item .glyphicon {
margin-right: 3px;
}
.breadcrumb {
margin-bottom: 10px;
background-color: inherit;
padding: 0;
}
.btn-toolbar-label {
padding: 7px 0;
vertical-align: middle;
display: inline-block;
margin-left: 5px;
}
.btn-toolbar-label-sm {
padding: 5px 0;
}
.btn-toolbar-spacer {
width: 5px;
display: inline-block;
height: 1px;
}
a:hover .label-hover {
background-color: #2a6496!important;
color: #fff!important;
}
.expander {
cursor: pointer;
}
.expandable {
display: none;
}
.table-inner {
margin-bottom: 7px;
font-size: 90%;
}
.min-width {
width: 1%;
white-space: nowrap;
}
.align-right {
text-align: right;
}
.table>tbody>tr.hover:hover>td, .table>tbody>tr.hover:hover>th {
background-color: #f9f9f9;
}
.table>tbody>tr.highlight>td, .table>tbody>tr.highlight>th {
background-color: #fcf8e3;
border-color: #fbeed5;
}
.table>tbody>tr.highlight:hover>td, .table>tbody>tr.highlight:hover>th {
background-color: #f6f2dd;
border-color: #f5e8ce;
}
.word-break {
word-break: break-all;
}
/* Statistics widget
-------------------------------------------------- */
#stats .list-group-item {
border-color: #e7e7e7;
background-color: #f8f8f8;
}
#stats a.list-group-item {
color: #777;
}
#stats a.list-group-item:hover,
#stats a.list-group-item:focus {
color: #333;
}
#stats .list-group-item.active,
#stats .list-group-item.active:hover,
#stats .list-group-item.active:focus {
color: #555;
background-color: #e7e7e7;
border-color: #e7e7e7;
}
.table td.failed-job-details {
padding-top: 0;
padding-bottom: 0;
border-top: none;
background-color: #f5f5f5;
}
.obsolete-data, .obsolete-data a, .obsolete-data pre, .obsolete-data .label {
color: #999;
}
.obsolete-data pre, .obsolete-data .label {
background-color: #f5f5f5;
}
.obsolete-data .glyphicon-question-sign {
font-size: 80%;
color: #999;
}
.stack-trace {
padding: 10px;
border: none;
}
.st-type {
font-weight: bold;
}
.st-param-name {
color: #666;
}
.st-file {
color: #999;
}
.st-method {
color: #00008B;
font-weight: bold;
}
.st-line {
color: #8B008B;
}
.width-200 {
width: 200px;
}
.btn-toolbar-top {
margin-bottom: 10px;
}
.paginator .btn {
color: #428bca;
}
.paginator .btn.active {
color: #333;
}
/* Job Snippet styles */
.job-snippet {
margin-bottom: 20px;
padding: 15px;
display: table;
width: 100%;
-ms-border-radius: 4px;
border-radius: 4px;
background-color: #f5f5f5;
}
.job-snippet > * {
display: table-cell;
vertical-align: top;
}
.job-snippet-code {
vertical-align: top;
}
.job-snippet-code pre {
border: none;
margin: 0;
background: inherit;
padding: 0;
-ms-border-radius: 0;
border-radius: 0;
font-size: 14px;
}
.job-snippet-code code {
display: block;
color: black;
}
.job-snippet-code pre .comment {
color: rgb(0, 128, 0);
}
.job-snippet-code pre .keyword {
color: rgb(0, 0, 255);
}
.job-snippet-code pre .string {
color: rgb(163, 21, 21);
}
.job-snippet-code pre .type {
color: rgb(43, 145, 175);
}
.job-snippet-code pre .xmldoc {
color: rgb(128, 128, 128);
}
.job-snippet-properties {
max-width: 200px;
padding-left: 5px;
}
.job-snippet-properties dl {
margin: 0;
}
.job-snippet-properties dl dt {
color: #999;
text-shadow: 0 1px white;
font-weight: normal;
}
.job-snippet-properties dl dd {
margin-left: 0;
margin-bottom: 5px;
}
.job-snippet-properties pre {
background-color: white;
-webkit-box-shadow: none;
-ms-box-shadow: none;
padding: 2px 4px;
border: none;
margin: 0;
}
.job-snippet-properties code {
color: black;
}
.state-card {
position: relative;
display: block;
margin-bottom: 7px;
padding: 12px;
background-color: #fff;
border: 1px solid #e5e5e5;
border-radius: 3px;
}
.state-card-title {
margin-bottom: 0;
}
.state-card-title .pull-right {
margin-top: 3px;
}
.state-card-text {
margin-top: 5px;
margin-bottom: 0;
}
.state-card h4 {
margin-top: 0;
}
.state-card-body {
padding: 10px;
margin: 10px -12px -12px -12px;
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
background-color: #f5f5f5;
}
.state-card-body dl {
margin-top: 5px;
margin-bottom: 0;
}
.state-card-body pre {
white-space: pre-wrap; /* CSS 3 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
background: transparent;
padding: 0;
}
.state-card-body .stack-trace {
background-color: transparent;
padding: 0 20px;
margin-bottom: 0px;
}
.state-card-body .exception-type {
margin-top: 0;
}
/* Job History styles */
.job-history {
margin-bottom: 10px;
opacity: 0.8;
}
.job-history.job-history-current {
opacity: 1.0;
}
.job-history-heading {
padding: 5px 10px;
color: #666;
-ms-border-top-left-radius: 4px;
border-top-left-radius: 4px;
-ms-border-top-right-radius: 4px;
border-top-right-radius: 4px;
}
.job-history-body {
background-color: #f5f5f5;
padding: 10px;
}
.job-history-title {
margin-top: 0;
margin-bottom: 2px;
}
.job-history dl {
margin-top: 5px;
margin-bottom: 5px;
}
.job-history .stack-trace {
background-color: transparent;
padding: 0 20px;
margin-bottom: 5px;
}
.job-history .exception-type {
margin-top: 0;
}
.job-history-current .job-history-heading,
.job-history-current small {
color: white;
}
a.job-method {
color: inherit;
}
.list-group .glyphicon {
top: 2px;
}
span.metric {
display: inline-block;
min-width: 10px;
padding: 2px 6px;
font-size: 12px;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
background-color: transparent;
border-radius: 10px;
border: solid 1px;
-webkit-transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
-moz-transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
-ms-transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
-o-transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
}
span.metric.highlighted {
font-weight: bold;
color: #fff!important;
}
span.metric-default {
color: #777;
border-color: #777;
}
span.metric-default.highlighted {
background-color: #777;
}
div.metric {
border: solid 1px transparent;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);
box-shadow: 0 1px 1px rgba(0,0,0,.05);
margin-bottom: 20px;
transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
}
div.metric .metric-body {
padding: 15px 15px 0;
font-size: 26px;
text-align: center;
}
div.metric .metric-description {
padding: 0 15px 15px;
text-align: center;
}
div.metric.metric-default {
border-color: #ddd;
}
div.metric-info,
span.metric-info {
color: #5bc0de;
border-color: #5bc0de;
}
span.metric-info.highlighted {
background-color: #5bc0de;
}
div.metric-warning,
span.metric-warning {
color: #f0ad4e;
border-color: #f0ad4e;
}
span.metric-warning.highlighted {
background-color: #f0ad4e;
}
div.metric-success,
span.metric-success {
color: #5cb85c;
border-color: #5cb85c;
}
span.metric-success.highlighted {
background-color: #5cb85c;
}
div.metric-danger,
span.metric-danger {
color: #d9534f;
border-color: #d9534f;
}
span.metric-danger.highlighted {
background-color: #d9534f;
}
span.metric-null,
div.metric-null {
display: none;
}
@media (min-width: 992px) {
#stats {
position: fixed;
width: 220px
}
}
@media (min-width: 1200px) {
#stats {
width: 262.5px;
}
}
.rickshaw_graph .detail{pointer-events:none;position:absolute;top:0;z-index:2;background:rgba(0,0,0,.1);bottom:0;width:1px;transition:opacity .25s linear;-moz-transition:opacity .25s linear;-o-transition:opacity .25s linear;-webkit-transition:opacity .25s linear}.rickshaw_graph .detail.inactive{opacity:0}.rickshaw_graph .detail .item.active{opacity:1}.rickshaw_graph .detail .x_label{font-family:Arial,sans-serif;border-radius:3px;padding:6px;opacity:.5;border:1px solid #e0e0e0;font-size:12px;position:absolute;background:#fff;white-space:nowrap}.rickshaw_graph .detail .item{position:absolute;z-index:2;border-radius:3px;padding:.25em;font-size:12px;font-family:Arial,sans-serif;opacity:0;background:rgba(0,0,0,.4);color:#fff;border:1px solid rgba(0,0,0,.4);margin-left:1em;margin-top:-1em;white-space:nowrap}.rickshaw_graph .detail .item.active{opacity:1;background:rgba(0,0,0,.8)}.rickshaw_graph .detail .item:before{content:"\25c2";position:absolute;left:-.5em;color:rgba(0,0,0,.7);width:0}.rickshaw_graph .detail .dot{width:4px;height:4px;margin-left:-4px;margin-top:-3px;border-radius:5px;position:absolute;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;border-width:2px;border-style:solid;display:none;background-clip:padding-box}.rickshaw_graph .detail .dot.active{display:block}.rickshaw_graph{position:relative}.rickshaw_graph svg{display:block;overflow:hidden}.rickshaw_graph .x_tick{position:absolute;top:0;bottom:0;width:0;border-left:1px dotted rgba(0,0,0,.2);pointer-events:none}.rickshaw_graph .x_tick .title{position:absolute;font-size:12px;font-family:Arial,sans-serif;opacity:.5;white-space:nowrap;margin-left:3px;bottom:1px}.rickshaw_annotation_timeline{height:1px;border-top:1px solid #e0e0e0;margin-top:10px;position:relative}.rickshaw_annotation_timeline .annotation{position:absolute;height:6px;width:6px;margin-left:-2px;top:-3px;border-radius:5px;background-color:rgba(0,0,0,.25)}.rickshaw_graph .annotation_line{position:absolute;top:0;bottom:-6px;width:0;border-left:2px solid rgba(0,0,0,.3);display:none}.rickshaw_graph .annotation_line.active{display:block}.rickshaw_graph .annotation_range{background:rgba(0,0,0,.1);display:none;position:absolute;top:0;bottom:-6px}.rickshaw_graph .annotation_range.active{display:block}.rickshaw_graph .annotation_range.active.offscreen{display:none}.rickshaw_annotation_timeline .annotation .content{background:#fff;color:#000;opacity:.9;padding:5px;box-shadow:0 0 2px rgba(0,0,0,.8);border-radius:3px;position:relative;z-index:20;font-size:12px;padding:6px 8px 8px;top:18px;left:-11px;width:160px;display:none;cursor:pointer}.rickshaw_annotation_timeline .annotation .content:before{content:"\25b2";position:absolute;top:-11px;color:#fff;text-shadow:0 -1px 1px rgba(0,0,0,.8)}.rickshaw_annotation_timeline .annotation.active,.rickshaw_annotation_timeline .annotation:hover{background-color:rgba(0,0,0,.8);cursor:none}.rickshaw_annotation_timeline .annotation .content:hover{z-index:50}.rickshaw_annotation_timeline .annotation.active .content{display:block}.rickshaw_annotation_timeline .annotation:hover .content{display:block;z-index:50}.rickshaw_graph .y_axis,.rickshaw_graph .x_axis_d3{fill:none}.rickshaw_graph .y_ticks .tick,.rickshaw_graph .x_ticks_d3 .tick{stroke:rgba(0,0,0,.16);stroke-width:2px;shape-rendering:crisp-edges;pointer-events:none}.rickshaw_graph .y_grid .tick,.rickshaw_graph .x_grid_d3 .tick{z-index:-1;stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:1 1}.rickshaw_graph .y_grid path,.rickshaw_graph .x_grid_d3 path{fill:none;stroke:none}.rickshaw_graph .y_ticks path,.rickshaw_graph .x_ticks_d3 path{fill:none;stroke:gray}.rickshaw_graph .y_ticks text,.rickshaw_graph .x_ticks_d3 text{opacity:.5;font-size:12px;pointer-events:none}.rickshaw_graph .x_tick.glow .title,.rickshaw_graph .y_ticks.glow text{fill:#000;color:#000;text-shadow:-1px 1px 0 rgba(255,255,255,.1),1px -1px 0 rgba(255,255,255,.1),1px 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1),0 -1px 0 rgba(255,255,255,.1),1px 0 0 rgba(255,255,255,.1),-1px 0 0 rgba(255,255,255,.1),-1px -1px 0 rgba(255,255,255,.1)}.rickshaw_graph .x_tick.inverse .title,.rickshaw_graph .y_ticks.inverse text{fill:#fff;color:#fff;text-shadow:-1px 1px 0 rgba(0,0,0,.8),1px -1px 0 rgba(0,0,0,.8),1px 1px 0 rgba(0,0,0,.8),0 1px 0 rgba(0,0,0,.8),0 -1px 0 rgba(0,0,0,.8),1px 0 0 rgba(0,0,0,.8),-1px 0 0 rgba(0,0,0,.8),-1px -1px 0 rgba(0,0,0,.8)}.rickshaw_legend{font-family:Arial;font-size:12px;color:#fff;background:#404040;display:inline-block;padding:12px 5px;border-radius:2px;position:relative}.rickshaw_legend:hover{z-index:10}.rickshaw_legend .swatch{width:10px;height:10px;border:1px solid rgba(0,0,0,.2)}.rickshaw_legend .line{clear:both;line-height:140%;padding-right:15px}.rickshaw_legend .line .swatch{display:inline-block;margin-right:3px;border-radius:2px}.rickshaw_legend .label{margin:0;white-space:nowrap;display:inline;font-size:inherit;background-color:transparent;color:inherit;font-weight:400;line-height:normal;padding:0;text-shadow:none}.rickshaw_legend .action:hover{opacity:.6}.rickshaw_legend .action{margin-right:.2em;font-size:10px;opacity:.2;cursor:pointer;font-size:14px}.rickshaw_legend .line.disabled{opacity:.4}.rickshaw_legend ul{list-style-type:none;margin:0;padding:0;margin:2px;cursor:pointer}.rickshaw_legend li{padding:0 0 0 2px;min-width:80px;white-space:nowrap}.rickshaw_legend li:hover{background:rgba(255,255,255,.08);border-radius:3px}.rickshaw_legend li:active{background:rgba(255,255,255,.2);border-radius:3px}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* Bootstrap v3.3.5 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under the MIT license
*/
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
(function(){function a(a){var b=a.source,d=a.target,e=c(b,d),f=[b];while(b!==e)b=b.parent,f.push(b);var g=f.length;while(d!==e)f.splice(g,0,d),d=d.parent;return f}function b(a){var b=[],c=a.parent;while(c!=null)b.push(a),a=c,c=c.parent;return b.push(a),b}function c(a,c){if(a===c)return a;var d=b(a),e=b(c),f=d.pop(),g=e.pop(),h=null;while(f===g)h=f,f=d.pop(),g=e.pop();return h}function g(a){a.fixed|=2}function h(a){a!==f&&(a.fixed&=1)}function i(){j(),f.fixed&=1,e=f=null}function j(){f.px+=d3.event.dx,f.py+=d3.event.dy,e.resume()}function k(a,b,c){var d=0,e=0;a.charge=0;if(!a.leaf){var f=a.nodes,g=f.length,h=-1,i;while(++h<g){i=f[h];if(i==null)continue;k(i,b,c),a.charge+=i.charge,d+=i.charge*i.cx,e+=i.charge*i.cy}}if(a.point){a.leaf||(a.point.x+=Math.random()-.5,a.point.y+=Math.random()-.5);var j=b*c[a.point.index];a.charge+=a.pointCharge=j,d+=j*a.point.x,e+=j*a.point.y}a.cx=d/a.charge,a.cy=e/a.charge}function l(a){return 20}function m(a){return 1}function o(a){return a.x}function p(a){return a.y}function q(a,b,c){a.y0=b,a.y=c}function t(a){var b=1,c=0,d=a[0][1],e,f=a.length;for(;b<f;++b)(e=a[b][1])>d&&(c=b,d=e);return c}function u(a){return a.reduce(v,0)}function v(a,b){return a+b[1]}function w(a,b){return x(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function x(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function y(a){return[d3.min(a),d3.max(a)]}function z(a,b){return a.sort=d3.rebind(a,b.sort),a.children=d3.rebind(a,b.children),a.links=D,a.value=d3.rebind(a,b.value),a.nodes=function(b){return E=!0,(a.nodes=a)(b)},a}function A(a){return a.children}function B(a){return a.value}function C(a,b){return b.value-a.value}function D(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function F(a,b){return a.value-b.value}function G(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function H(a,b){a._pack_next=b,b._pack_prev=a}function I(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function J(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(K),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],O(g,h,i),l(i),G(g,i),g._pack_prev=i,G(i,h),h=g._pack_next;for(var m=3;m<f;m++){O(g,h,i=a[m]);var n=0,o=1,p=1;for(j=h._pack_next;j!==h;j=j._pack_next,o++)if(I(j,i)){n=1;break}if(n==1)for(k=g._pack_prev;k!==j._pack_prev;k=k._pack_prev,p++)if(I(k,i)){p<o&&(n=-1,j=k);break}n==0?(G(g,i),h=i,l(i)):n>0?(H(g,j),h=j,m--):(H(j,h),g=j,m--)}}}var q=(b+c)/2,r=(d+e)/2,s=0;for(var m=0;m<f;m++){var t=a[m];t.x-=q,t.y-=r,s=Math.max(s,t.r+Math.sqrt(t.x*t.x+t.y*t.y))}return a.forEach(L),s}function K(a){a._pack_next=a._pack_prev=a}function L(a){delete a._pack_next,delete a._pack_prev}function M(a){var b=a.children;b&&b.length?(b.forEach(M),a.r=J(b)):a.r=Math.sqrt(a.value)}function N(a,b,c,d){var e=a.children;a.x=b+=d*a.x,a.y=c+=d*a.y,a.r*=d;if(e){var f=-1,g=e.length;while(++f<g)N(e[f],b,c,d)}}function O(a,b,c){var d=a.r+c.r,e=b.x-a.x,f=b.y-a.y;if(d&&(e||f)){var g=b.r+c.r,h=Math.sqrt(e*e+f*f),i=Math.max(-1,Math.min(1,(d*d+h*h-g*g)/(2*d*h))),j=Math.acos(i),k=i*(d/=h),l=Math.sin(j)*d;c.x=a.x+k*e+l*f,c.y=a.y+k*f-l*e}else c.x=a.x+d,c.y=a.y}function P(a){return 1+d3.max(a,function(a){return a.y})}function Q(a){return a.reduce(function(a,b){return a+b.x},0)/a.length}function R(a){var b=a.children;return b&&b.length?R(b[0]):a}function S(a){var b=a.children,c;return b&&(c=b.length)?S(b[c-1]):a}function T(a,b){return a.parent==b.parent?1:2}function U(a){var b=a.children;return b&&b.length?b[0]:a._tree.thread}function V(a){var b=a.children,c;return b&&(c=b.length)?b[c-1]:a._tree.thread}function W(a,b){var c=a.children;if(c&&(e=c.length)){var d,e,f=-1;while(++f<e)b(d=W(c[f],b),a)>0&&(a=d)}return a}function X(a,b){return a.x-b.x}function Y(a,b){return b.x-a.x}function Z(a,b){return a.depth-b.depth}function $(a,b){function c(a,d){var e=a.children;if(e&&(i=e.length)){var f,g=null,h=-1,i;while(++h<i)f=e[h],c(f,g),g=f}b(a,d)}c(a,null)}function _(a){var b=0,c=0,d=a.children,e=d.length,f;while(--e>=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function ba(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function bb(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function bc(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function bd(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];return e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0),{x:c,y:d,dx:e,dy:f}}d3.layout={},d3.layout.bundle=function(){return function(b){var c=[],d=-1,e=b.length;while(++d<e)c.push(a(b[d]));return c}},d3.layout.chord=function(){function j(){var a={},j=[],l=d3.range(e),m=[],n,o,p,q,r;b=[],c=[],n=0,q=-1;while(++q<e){o=0,r=-1;while(++r<e)o+=d[q][r];j.push(o),m.push(d3.range(e)),n+=o}g&&l.sort(function(a,b){return g(j[a],j[b])}),h&&m.forEach(function(a,b){a.sort(function(a,c){return h(d[b][a],d[b][c])})}),n=(2*Math.PI-f*e)/n,o=0,q=-1;while(++q<e){p=o,r=-1;while(++r<e){var s=l[q],t=m[s][r],u=d[s][t],v=o,w=o+=u*n;a[s+"-"+t]={index:s,subindex:t,startAngle:v,endAngle:w,value:u}}c.push({index:s,startAngle:p,endAngle:o,value:(o-p)/n}),o+=f}q=-1;while(++q<e){r=q-1;while(++r<e){var x=a[q+"-"+r],y=a[r+"-"+q];(x.value||y.value)&&b.push(x.value<y.value?{source:y,target:x}:{source:x,target:y})}}i&&k()}function k(){b.sort(function(a,b){return i((a.source.value+a.target.value)/2,(b.source.value+b.target.value)/2)})}var a={},b,c,d,e,f=0,g,h,i;return a.matrix=function(f){return arguments.length?(e=(d=f)&&d.length,b=c=null,a):d},a.padding=function(d){return arguments.length?(f=d,b=c=null,a):f},a.sortGroups=function(d){return arguments.length?(g=d,b=c=null,a):g},a.sortSubgroups=function(c){return arguments.length?(h=c,b=null,a):h},a.sortChords=function(c){return arguments.length?(i=c,b&&k(),a):i},a.chords=function(){return b||j(),b},a.groups=function(){return c||j(),c},a},d3.layout.force=function(){function A(a){return function(b,c,d,e,f){if(b.point!==a){var g=b.cx-a.x,h=b.cy-a.y,i=1/Math.sqrt(g*g+h*h);if((e-c)*i<t){var j=b.charge*i*i;return a.px-=g*j,a.py-=h*j,!0}if(b.point&&isFinite(i)){var j=b.pointCharge*i*i;a.px-=g*j,a.py-=h*j}}return!b.charge}}function B(){var a=v.length,d=w.length,e,f,g,h,i,j,l,m,p;for(f=0;f<d;++f){g=w[f],h=g.source,i=g.target,m=i.x-h.x,p=i.y-h.y;if(j=m*m+p*p)j=n*y[f]*((j=Math.sqrt(j))-x[f])/j,m*=j,p*=j,i.x-=m*(l=h.weight/(i.weight+h.weight)),i.y-=p*l,h.x+=m*(l=1-l),h.y+=p*l}if(l=n*s){m=c[0]/2,p=c[1]/2,f=-1;if(l)while(++f<a)g=v[f],g.x+=(m-g.x)*l,g.y+=(p-g.y)*l}if(r){k(e=d3.geom.quadtree(v),n,z),f=-1;while(++f<a)(g=v[f]).fixed||e.visit(A(g))}f=-1;while(++f<a)g=v[f],g.fixed?(g.x=g.px,g.y=g.py):(g.x-=(g.px-(g.px=g.x))*o,g.y-=(g.py-(g.py=g.y))*o);return b.tick({type:"tick",alpha:n}),(n*=.99)<.005}function C(b){g(f=b),e=a}var a={},b=d3.dispatch("tick"),c=[1,1],d,n,o=.9,p=l,q=m,r=-30,s=.1,t=.8,u,v=[],w=[],x,y,z;return a.on=function(c,d){return b.on(c,d),a},a.nodes=function(b){return arguments.length?(v=b,a):v},a.links=function(b){return arguments.length?(w=b,a):w},a.size=function(b){return arguments.length?(c=b,a):c},a.linkDistance=function(b){return arguments.length?(p=d3.functor(b),a):p},a.distance=a.linkDistance,a.linkStrength=function(b){return arguments.length?(q=d3.functor(b),a):q},a.friction=function(b){return arguments.length?(o=b,a):o},a.charge=function(b){return arguments.length?(r=typeof b=="function"?b:+b,a):r},a.gravity=function(b){return arguments.length?(s=b,a):s},a.theta=function(b){return arguments.length?(t=b,a):t},a.start=function(){function k(a,c){var d=l(b),e=-1,f=d.length,g;while(++e<f)if(!isNaN(g=d[e][a]))return g;return Math.random()*c}function l(){if(!i){i=[];for(d=0;d<e;++d)i[d]=[];for(d=0;d<f;++d){var a=w[d];i[a.source.index].push(a.target),i[a.target.index].push(a.source)}}return i[b]}var b,d,e=v.length,f=w.length,g=c[0],h=c[1],i,j;for(b=0;b<e;++b)(j=v[b]).index=b,j.weight=0;x=[],y=[];for(b=0;b<f;++b)j=w[b],typeof j.source=="number"&&(j.source=v[j.source]),typeof j.target=="number"&&(j.target=v[j.target]),x[b]=p.call(this,j,b),y[b]=q.call(this,j,b),++j.source.weight,++j.target.weight;for(b=0;b<e;++b)j=v[b],isNaN(j.x)&&(j.x=k("x",g)),isNaN(j.y)&&(j.y=k("y",h)),isNaN(j.px)&&(j.px=j.x),isNaN(j.py)&&(j.py=j.y);z=[];if(typeof r=="function")for(b=0;b<e;++b)z[b]=+r.call(this,v[b],b);else for(b=0;b<e;++b)z[b]=r;return a.resume()},a.resume=function(){return n=.1,d3.timer(B),a},a.stop=function(){return n=0,a},a.drag=function(){d||(d=d3.behavior.drag().on("dragstart",C).on("drag",j).on("dragend",i)),this.on("mouseover.force",g).on("mouseout.force",h).call(d)},a};var e,f;d3.layout.partition=function(){function c(a,b,d,e){var f=a.children;a.x=b,a.y=a.depth*e,a.dx=d,a.dy=e;if(f&&(h=f.length)){var g=-1,h,i,j;d=a.value?d/a.value:0;while(++g<h)c(i=f[g],b,j=i.value*d,e),b+=j}}function d(a){var b=a.children,c=0;if(b&&(f=b.length)){var e=-1,f;while(++e<f)c=Math.max(c,d(b[e]))}return 1+c}function e(e,f){var g=a.call(this,e,f);return c(g[0],0,b[0],b[1]/d(g[0])),g}var a=d3.layout.hierarchy(),b=[1,1];return e.size=function(a){return arguments.length?(b=a,e):b},z(e,a)},d3.layout.pie=function(){function f(g,h){var i=g.map(function(b,c){return+a.call(f,b,c)}),j=+(typeof c=="function"?c.apply(this,arguments):c),k=((typeof e=="function"?e.apply(this,arguments):e)-c)/d3.sum(i),l=d3.range(g.length);b!=null&&l.sort(b===n?function(a,b){return i[b]-i[a]}:function(a,c){return b(g[a],g[c])});var m=l.map(function(a){return{data:g[a],value:d=i[a],startAngle:j,endAngle:j+=d*k}});return g.map(function(a,b){return m[l[b]]})}var a=Number,b=n,c=0,e=2*Math.PI;return f.value=function(b){return arguments.length?(a=b,f):a},f.sort=function(a){return arguments.length?(b=a,f):b},f.startAngle=function(a){return arguments.length?(c=a,f):c},f.endAngle=function(a){return arguments.length?(e=a,f):e},f};var n={};d3.layout.stack=function(){function g(h,i){var j=h.map(function(b,c){return a.call(g,b,c)}),k=j.map(function(a,b){return a.map(function(a,b){return[e.call(g,a,b),f.call(g,a,b)]})}),l=b.call(g,k,i);j=d3.permute(j,l),k=d3.permute(k,l);var m=c.call(g,k,i),n=j.length,o=j[0].length,p,q,r;for(q=0;q<o;++q){d.call(g,j[0][q],r=m[q],k[0][q][1]);for(p=1;p<n;++p)d.call(g,j[p][q],r+=k[p-1][q][1],k[p][q][1])}return h}var a=Object,b=r["default"],c=s.zero,d=q,e=o,f=p;return g.values=function(b){return arguments.length?(a=b,g):a},g.order=function(a){return arguments.length?(b=typeof a=="function"?a:r[a],g):b},g.offset=function(a){return arguments.length?(c=typeof a=="function"?a:s[a],g):c},g.x=function(a){return arguments.length?(e=a,g):e},g.y=function(a){return arguments.length?(f=a,g):f},g.out=function(a){return arguments.length?(d=a,g):d},g};var r={"inside-out":function(a){var b=a.length,c,d,e=a.map(t),f=a.map(u),g=d3.range(b).sort(function(a,b){return e[a]-e[b]}),h=0,i=0,j=[],k=[];for(c=0;c<b;++c)d=g[c],h<i?(h+=f[d],j.push(d)):(i+=f[d],k.push(d));return k.reverse().concat(j)},reverse:function(a){return d3.range(a.length).reverse()},"default":function(a){return d3.range(a.length)}},s={silhouette:function(a){var b=a.length,c=a[0].length,d=[],e=0,f,g,h,i=[];for(g=0;g<c;++g){for(f=0,h=0;f<b;f++)h+=a[f][g][1];h>e&&(e=h),d.push(h)}for(g=0;g<c;++g)i[g]=(e-d[g])/2;return i},wiggle:function(a){var b=a.length,c=a[0],d=c.length,e=0,f,g,h,i,j,k,l,m,n,o=[];o[0]=m=n=0;for(g=1;g<d;++g){for(f=0,i=0;f<b;++f)i+=a[f][g][1];for(f=0,j=0,l=c[g][0]-c[g-1][0];f<b;++f){for(h=0,k=(a[f][g][1]-a[f][g-1][1])/(2*l);h<f;++h)k+=(a[h][g][1]-a[h][g-1][1])/l;j+=k*a[f][g][1]}o[g]=m-=i?j/i*l:0,m<n&&(n=m)}for(g=0;g<d;++g)o[g]-=n;return o},expand:function(a){var b=a.length,c=a[0].length,d=1/b,e,f,g,h=[];for(f=0;f<c;++f){for(e=0,g=0;e<b;e++)g+=a[e][f][1];if(g)for(e=0;e<b;e++)a[e][f][1]/=g;else for(e=0;e<b;e++)a[e][f][1]=d}for(f=0;f<c;++f)h[f]=0;return h},zero:function(a){var b=-1,c=a[0].length,d=[];while(++b<c)d[b]=0;return d}};d3.layout.histogram=function(){function e(e,f){var g=[],h=e.map(b,this),i=c.call(this,h,f),j=d.call(this,i,h,f),k,f=-1,l=h.length,m=j.length-1,n=a?1:1/l,o;while(++f<m)k=g[f]=[],k.dx=j[f+1]-(k.x=j[f]),k.y=0;f=-1;while(++f<l)o=h[f],o>=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]));return g}var a=!0,b=Number,c=y,d=w;return e.value=function(a){return arguments.length?(b=a,e):b},e.range=function(a){return arguments.length?(c=d3.functor(a),e):c},e.bins=function(a){return arguments.length?(d=typeof a=="number"?function(b){return x(b,a)}:d3.functor(a),e):d},e.frequency=function(b){return arguments.length?(a=!!b,e):a},e},d3.layout.hierarchy=function(){function e(f,h,i){var j=b.call(g,f,h),k=E?f:{data:f};k.depth=h,i.push(k);if(j&&(m=j.length)){var l=-1,m,n=k.children=[],o=0,p=h+1;while(++l<m)d=e(j[l],p,i),d.parent=k,n.push(d),o+=d.value;a&&n.sort(a),c&&(k.value=o)}else c&&(k.value=+c.call(g,f,h)||0);return k}function f(a,b){var d=a.children,e=0;if(d&&(i=d.length)){var h=-1,i,j=b+1;while(++h<i)e+=f(d[h],j)}else c&&(e=+c.call(g,E?a:a.data,b)||0);return c&&(a.value=e),e}function g(a){var b=[];return e(a,0,b),b}var a=C,b=A,c=B;return g.sort=function(b){return arguments.length?(a=b,g):a},g.children=function(a){return arguments.length?(b=a,g):b},g.value=function(a){return arguments.length?(c=a,g):c},g.revalue=function(a){return f(a,0),a},g};var E=!1;d3.layout.pack=function(){function c(c,d){var e=a.call(this,c,d),f=e[0];f.x=0,f.y=0,M(f);var g=b[0],h=b[1],i=1/Math.max(2*f.r/g,2*f.r/h);return N(f,g/2,h/2,i),e}var a=d3.layout.hierarchy().sort(F),b=[1,1];return c.size=function(a){return arguments.length?(b=a,c):b},z(c,a)},d3.layout.cluster=function(){function d(d,e){var f=a.call(this,d,e),g=f[0],h,i=0,j,k;$(g,function(a){var c=a.children;c&&c.length?(a.x=Q(c),a.y=P(c)):(a.x=h?i+=b(a,h):0,a.y=0,h=a)});var l=R(g),m=S(g),n=l.x-b(l,m)/2,o=m.x+b(m,l)/2;return $(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=(1-a.y/g.y)*c[1]}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=T,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},z(d,a)},d3.layout.tree=function(){function d(d,e){function h(a,c){var d=a.children,e=a._tree;if(d&&(f=d.length)){var f,g=d[0],i,k=g,l,m=-1;while(++m<f)l=d[m],h(l,i),k=j(l,i,k),i=l;_(a);var n=.5*(g._tree.prelim+l._tree.prelim);c?(e.prelim=c._tree.prelim+b(a,c),e.mod=e.prelim-n):e.prelim=n}else c&&(e.prelim=c._tree.prelim+b(a,c))}function i(a,b){a.x=a._tree.prelim+b;var c=a.children;if(c&&(e=c.length)){var d=-1,e;b+=a._tree.mod;while(++d<e)i(c[d],b)}}function j(a,c,d){if(c){var e=a,f=a,g=c,h=a.parent.children[0],i=e._tree.mod,j=f._tree.mod,k=g._tree.mod,l=h._tree.mod,m;while(g=V(g),e=U(e),g&&e)h=U(h),f=V(f),f._tree.ancestor=a,m=g._tree.prelim+k-e._tree.prelim-i+b(g,e),m>0&&(ba(bb(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!V(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!U(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];$(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=W(g,Y),l=W(g,X),m=W(g,Z),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return $(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=T,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},z(d,a)},d3.layout.treemap=function(){function i(a,b){var c=-1,d=a.length,e,f;while(++c<d)f=(e=a[c]).value*(b<0?0:b),e.area=isNaN(f)||f<=0?0:f}function j(a){var b=a.children;if(b&&b.length){var c=e(a),d=[],f=b.slice(),g,h=Infinity,k,n=Math.min(c.dx,c.dy),o;i(f,c.dx*c.dy/a.value),d.area=0;while((o=f.length)>0)d.push(g=f[o-1]),d.area+=g.area,(k=l(d,n))<=h?(f.pop(),h=k):(d.area-=d.pop().area,m(d,n,c,!1),n=Math.min(c.dx,c.dy),d.length=d.area=0,h=Infinity);d.length&&(m(d,n,c,!0),d.length=d.area=0),b.forEach(j)}}function k(a){var b=a.children;if(b&&b.length){var c=e(a),d=b.slice(),f,g=[];i(d,c.dx*c.dy/a.value),g.area=0;while(f=d.pop())g.push(f),g.area+=f.area,f.z!=null&&(m(g,f.z?c.dx:c.dy,c,!d.length),g.length=g.area=0);b.forEach(k)}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++g<i){if(!(d=a[g].area))continue;d<f&&(f=d),d>e&&(e=d)}return c*=c,b*=b,c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=j?d.dy:0;while(++f<g)k=a[f],k.x=h,k.y=i,k.dy=j,h+=k.dx=j?b(k.area/j):0;k.z=!0,k.dx+=d.x+d.dx-h,d.y+=j,d.dy-=j}else{if(e||j>d.dx)j=j?d.dx:0;while(++f<g)k=a[f],k.x=h,k.y=i,k.dx=j,i+=k.dy=j?b(k.area/j):0;k.z=!1,k.dy+=d.y+d.dy-i,d.x+=j,d.dx-=j}}function n(b){var d=g||a(b),e=d[0];return e.x=0,e.y=0,e.dx=c[0],e.dy=c[1],g&&a.revalue(e),i([e],e.dx*e.dy/e.value),(g?k:j)(e),f&&(g=d),d}var a=d3.layout.hierarchy(),b=Math.round,c=[1,1],d=null,e=bc,f=!1,g,h=.5*(1+Math.sqrt(5));return n.size=function(a){return arguments.length?(c=a,n):c},n.padding=function(a){function b(b){var c=a.call(n,b,b.depth);return c==null?bc(b):bd(b,typeof c=="number"?[c,c,c,c]:c)}function c(b){return bd(b,a)}if(!arguments.length)return d;var f;return e=(d=a)==null?bc:(f=typeof a)==="function"?b:f==="number"?(a=[a,a,a,a],c):c,n},n.round=function(a){return arguments.length?(b=a?Math.round:Number,n):b!=Number},n.sticky=function(a){return arguments.length?(f=a,g=null,n):f},n.ratio=function(a){return arguments.length?(h=a,n):h},z(n,a)}})();
\ No newline at end of file
(function(){function e(a){var b=-1,c=a.length,d=[];while(++b<c)d.push(a[b]);return d}function f(a){return Array.prototype.slice.call(a)}function i(){return this}function j(a){return a!=null&&!isNaN(a)}function k(a){return a.length}function l(a){return a==null}function m(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function o(){}function p(){function c(){var b=a,c=-1,d=b.length,e;while(++c<d)(e=b[c])._on&&e.apply(this,arguments)}var a=[],b={};return c.on=function(d,e){var f,g;if(f=b[d])f._on=!1,a=a.slice(0,g=a.indexOf(f)).concat(a.slice(g+1)),delete b[d];return e&&(e._on=!0,a.push(e),b[d]=e),c},c}function s(a,b){return b-(a?1+Math.floor(Math.log(a+Math.pow(10,1+Math.floor(Math.log(a)/Math.LN10)-b))/Math.LN10):1)}function t(a){return a+""}function u(a){var b=a.lastIndexOf("."),c=b>=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function w(a,b){return{scale:Math.pow(10,(8-b)*3),symbol:a}}function B(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function C(a){return function(b){return 1-a(1-b)}}function D(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function E(a){return a}function F(a){return function(b){return Math.pow(b,a)}}function G(a){return 1-Math.cos(a*Math.PI/2)}function H(a){return Math.pow(2,10*(a-1))}function I(a){return 1-Math.sqrt(1-a*a)}function J(a,b){var c;return arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a),function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function K(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-a)}}function L(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function M(){d3.event.stopPropagation(),d3.event.preventDefault()}function O(a){return a=="transform"?d3.interpolateTransform:d3.interpolate}function P(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return(c-a)*b}}function Q(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return Math.max(0,Math.min(1,(c-a)*b))}}function R(a,b,c){return new S(a,b,c)}function S(a,b,c){this.r=a,this.g=b,this.b=c}function T(a){return a<16?"0"+Math.max(0,a).toString(16):Math.min(255,a).toString(16)}function U(a,b,c){var d=0,e=0,f=0,g,h,i;g=/([a-z]+)\((.*)\)/i.exec(a);if(g){h=g[2].split(",");switch(g[1]){case"hsl":return c(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case"rgb":return b(W(h[0]),W(h[1]),W(h[2]))}}return(i=X[a])?b(i.r,i.g,i.b):(a!=null&&a.charAt(0)==="#"&&(a.length===4?(d=a.charAt(1),d+=d,e=a.charAt(2),e+=e,f=a.charAt(3),f+=f):a.length===7&&(d=a.substring(1,3),e=a.substring(3,5),f=a.substring(5,7)),d=parseInt(d,16),e=parseInt(e,16),f=parseInt(f,16)),b(d,e,f))}function V(a,b,c){var d=Math.min(a/=255,b/=255,c/=255),e=Math.max(a,b,c),f=e-d,g,h,i=(e+d)/2;return f?(h=i<.5?f/(e+d):f/(2-e-d),a==e?g=(b-c)/f+(b<c?6:0):b==e?g=(c-a)/f+2:g=(a-b)/f+4,g*=60):h=g=0,Z(g,h,i)}function W(a){var b=parseFloat(a);return a.charAt(a.length-1)==="%"?Math.round(b*2.55):b}function Z(a,b,c){return new $(a,b,c)}function $(a,b,c){this.h=a,this.s=b,this.l=c}function _(a,b,c){function f(a){return a>360?a-=360:a<0&&(a+=360),a<60?d+(e-d)*a/60:a<180?e:a<240?d+(e-d)*(240-a)/60:d}function g(a){return Math.round(f(a)*255)}var d,e;return a%=360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e,R(g(a+120),g(a),g(a-120))}function ba(a){return h(a,bd),a}function be(a){return function(){return bb(a,this)}}function bf(a){return function(){return bc(a,this)}}function bh(a,b){function f(){if(b=this.classList)return b.add(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;c.lastIndex=0,c.test(e)||(e=m(e+" "+a),d?b.baseVal=e:this.className=e)}function g(){if(b=this.classList)return b.remove(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;e=m(e.replace(c," ")),d?b.baseVal=e:this.className=e}function h(){(b.apply(this,arguments)?f:g).call(this)}var c=new RegExp("(^|\\s+)"+d3.requote(a)+"(\\s+|$)","g");if(arguments.length<2){var d=this.node();if(e=d.classList)return e.contains(a);var e=d.className;return c.lastIndex=0,c.test(e.baseVal!=null?e.baseVal:e)}return this.each(typeof b=="function"?h:b?f:g)}function bi(a){return{__data__:a}}function bj(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bl(a){return h(a,bm),a}function bn(a,b,c){h(a,br);var d={},e=d3.dispatch("start","end"),f=bu;return a.id=b,a.time=c,a.tween=function(b,c){return arguments.length<2?d[b]:(c==null?delete d[b]:d[b]=c,a)},a.ease=function(b){return arguments.length?(f=typeof b=="function"?b:d3.ease.apply(d3,arguments),a):f},a.each=function(b,c){return arguments.length<2?bv.call(a,b):(e.on(b,c),a)},d3.timer(function(g){return a.each(function(h,i,j){function p(a){if(o.active>b)return r();o.active=b;for(var f in d)(f=d[f].call(l,h,i))&&k.push(f);return e.start.call(l,h,i),q(a)||d3.timer(q,0,c),1}function q(a){if(o.active!==b)return r();var c=(a-m)/n,d=f(c),g=k.length;while(g>0)k[--g].call(l,d);if(c>=1)return r(),bt=b,e.end.call(l,h,i),bt=0,1}function r(){return--o.count||delete l.__transition__,1}var k=[],l=this,m=a[j][i].delay,n=a[j][i].duration,o=l.__transition__||(l.__transition__={active:0,count:0});++o.count,m<=g?p(g):d3.timer(p,m,c)}),1},0,c),a}function bp(a,b,c){return c!=""&&bo}function bq(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bo:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=O(a);return typeof b=="function"?d:b==null?bp:(b+="",e)}function bv(a){for(var b=0,c=this.length;b<c;b++)for(var d=this[b],e=0,f=d.length;e<f;e++){var g=d[e];g&&a.call(g=g.node,g.__data__,e,b)}return this}function bz(){var a,b=Date.now(),c=bw;while(c)a=b-c.then,a>=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bA()-b;d>24?(isFinite(d)&&(clearTimeout(by),by=setTimeout(bz,d)),bx=0):(bx=1,bB(bz))}function bA(){var a=null,b=bw,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bw=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bC(a){var b=[a.a,a.b],c=[a.c,a.d],d=bE(b),e=bD(b,c),f=bE(bF(c,b,-e));this.translate=[a.e,a.f],this.rotate=Math.atan2(a.b,a.a)*bH,this.scale=[d,f||0],this.skew=f?e/f*bH:0}function bD(a,b){return a[0]*b[0]+a[1]*b[1]}function bE(a){var b=Math.sqrt(bD(a,a));return a[0]/=b,a[1]/=b,b}function bF(a,b,c){return a[0]+=c*b[0],a[1]+=c*b[1],a}function bI(){}function bJ(a){var b=a[0],c=a[a.length-1];return b<c?[b,c]:[c,b]}function bK(a,b){var c=0,d=a.length-1,e=a[c],f=a[d],g;f<e&&(g=c,c=d,d=g,g=e,e=f,f=g);if(g=f-e)b=b(g),a[c]=b.floor(e),a[d]=b.ceil(f);return a}function bL(){return Math}function bM(a,b,c,d){function g(){var g=a.length==2?bS:bT,i=d?Q:P;return e=g(a,b,i,c),f=g(b,a,i,d3.interpolate),h}function h(a){return e(a)}var e,f;return h.invert=function(a){return f(a)},h.domain=function(b){return arguments.length?(a=b.map(Number),g()):a},h.range=function(a){return arguments.length?(b=a,g()):b},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){return arguments.length?(d=a,g()):d},h.interpolate=function(a){return arguments.length?(c=a,g()):c},h.ticks=function(b){return bQ(a,b)},h.tickFormat=function(b){return bR(a,b)},h.nice=function(){return bK(a,bO),g()},h.copy=function(){return bM(a,b,c,d)},g()}function bN(a,b){return a.range=d3.rebind(a,b.range),a.rangeRound=d3.rebind(a,b.rangeRound),a.interpolate=d3.rebind(a,b.interpolate),a.clamp=d3.rebind(a,b.clamp),a}function bO(a){return a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1),{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function bP(a,b){var c=bJ(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;return f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e,c}function bQ(a,b){return d3.range.apply(d3,bP(a,b))}function bR(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(bP(a,b)[2])/Math.LN10+.01))+"f")}function bS(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function bT(a,b,c,d){var e=[],f=[],g=0,h=a.length;while(++g<h)e.push(c(a[g-1],a[g])),f.push(d(b[g-1],b[g]));return function(b){var c=d3.bisect(a,b,1,a.length-1)-1;return f[c](e[c](b))}}function bU(a,b){function d(c){return a(b(c))}var c=b.pow;return d.invert=function(b){return c(a.invert(b))},d.domain=function(e){return arguments.length?(b=e[0]<0?bX:bW,c=b.pow,a.domain(e.map(b)),d):a.domain().map(c)},d.nice=function(){return a.domain(bK(a.domain(),bL)),d},d.ticks=function(){var d=bJ(a.domain()),e=[];if(d.every(isFinite)){var f=Math.floor(d[0]),g=Math.ceil(d[1]),h=Math.round(c(d[0])),i=Math.round(c(d[1]));if(b===bX){e.push(c(f));for(;f++<g;)for(var j=9;j>0;j--)e.push(c(f)*j)}else{for(;f<g;f++)for(var j=1;j<10;j++)e.push(c(f)*j);e.push(c(f))}for(f=0;e[f]<h;f++);for(g=e.length;e[g-1]>i;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=bV);if(arguments.length<1)return e;var f=a/d.ticks().length,g=b===bX?(h=-1e-15,Math.floor):(h=1e-15,Math.ceil),h;return function(a){return a/c(g(b(a)+h))<f?e(a):""}},d.copy=function(){return bU(a.copy(),b)},bN(d,a)}function bW(a){return Math.log(a)/Math.LN10}function bX(a){return-Math.log(-a)/Math.LN10}function bY(a,b){function e(b){return a(c(b))}var c=bZ(b),d=bZ(1/b);return e.invert=function(b){return d(a.invert(b))},e.domain=function(b){return arguments.length?(a.domain(b.map(c)),e):a.domain().map(d)},e.ticks=function(a){return bQ(e.domain(),a)},e.tickFormat=function(a){return bR(e.domain(),a)},e.nice=function(){return e.domain(bK(e.domain(),bO))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=bZ(b=a),d=bZ(1/b),e.domain(f)},e.copy=function(){return bY(a.copy(),b)},bN(e,a)}function bZ(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function b$(a,b){function f(b){return d[((c[b]||(c[b]=a.push(b)))-1)%d.length]}function g(b,c){return d3.range(a.length).map(function(a){return b+c*a})}var c,d,e;return f.domain=function(d){if(!arguments.length)return a;a=[],c={};var e=-1,g=d.length,h;while(++e<g)c[h=d[e]]||(c[h]=a.push(h));return f[b.t](b.x,b.p)},f.range=function(a){return arguments.length?(d=a,e=0,b={t:"range",x:a},f):d},f.rangePoints=function(c,h){arguments.length<2&&(h=0);var i=c[0],j=c[1],k=(j-i)/(a.length-1+h);return d=g(a.length<2?(i+j)/2:i+k*h/2,k),e=0,b={t:"rangePoints",x:c,p:h},f},f.rangeBands=function(c,h){arguments.length<2&&(h=0);var i=c[0],j=c[1],k=(j-i)/(a.length+h);return d=g(i+k*h,k),e=k*(1-h),b={t:"rangeBands",x:c,p:h},f},f.rangeRoundBands=function(c,h){arguments.length<2&&(h=0);var i=c[0],j=c[1],k=Math.floor((j-i)/(a.length+h));return d=g(i+Math.round((j-i-(a.length-h)*k)/2),k),e=Math.round(k*(1-h)),b={t:"rangeRoundBands",x:c,p:h},f},f.rangeBand=function(){return e},f.copy=function(){return b$(a,b)},f.domain(a)}function cd(a,b){function d(){var d=0,f=a.length,g=b.length;c=[];while(++d<g)c[d-1]=d3.quantile(a,d/g);return e}function e(a){return isNaN(a=+a)?NaN:b[d3.bisect(c,a)]}var c;return e.domain=function(b){return arguments.length?(a=b.filter(function(a){return!isNaN(a)}).sort(d3.ascending),d()):a},e.range=function(a){return arguments.length?(b=a,d()):b},e.quantiles=function(){return c},e.copy=function(){return cd(a,b)},d()}function ce(a,b,c){function f(b){return c[Math.max(0,Math.min(e,Math.floor(d*(b-a))))]}function g(){return d=c.length/(b-a),e=c.length-1,f}var d,e;return f.domain=function(c){return arguments.length?(a=+c[0],b=+c[c.length-1],g()):[a,b]},f.range=function(a){return arguments.length?(c=a,g()):c},f.copy=function(){return ce(a,b,c)},g()}function ch(a){return a.innerRadius}function ci(a){return a.outerRadius}function cj(a){return a.startAngle}function ck(a){return a.endAngle}function cl(a){function g(d){return d.length<1?null:"M"+e(a(cm(this,d,b,c)),f)}var b=cn,c=co,d="linear",e=cp[d],f=.7;return g.x=function(a){return arguments.length?(b=a,g):b},g.y=function(a){return arguments.length?(c=a,g):c},g.interpolate=function(a){return arguments.length?(e=cp[d=a],g):d},g.tension=function(a){return arguments.length?(f=a,g):f},g}function cm(a,b,c,d){var e=[],f=-1,g=b.length,h=typeof c=="function",i=typeof d=="function",j;if(h&&i)while(++f<g)e.push([c.call(a,j=b[f],f),d.call(a,j,f)]);else if(h)while(++f<g)e.push([c.call(a,b[f],f),d]);else if(i)while(++f<g)e.push([c,d.call(a,b[f],f)]);else while(++f<g)e.push([c,d]);return e}function cn(a){return a[0]}function co(a){return a[1]}function cq(a){var b=0,c=a.length,d=a[0],e=[d[0],",",d[1]];while(++b<c)e.push("L",(d=a[b])[0],",",d[1]);return e.join("")}function cr(a){var b=0,c=a.length,d=a[0],e=[d[0],",",d[1]];while(++b<c)e.push("V",(d=a[b])[1],"H",d[0]);return e.join("")}function cs(a){var b=0,c=a.length,d=a[0],e=[d[0],",",d[1]];while(++b<c)e.push("H",(d=a[b])[0],"V",d[1]);return e.join("")}function ct(a,b){return a.length<4?cq(a):a[1]+cw(a.slice(1,a.length-1),cx(a,b))}function cu(a,b){return a.length<3?cq(a):a[0]+cw((a.push(a[0]),a),cx([a[a.length-2]].concat(a,[a[1]]),b))}function cv(a,b,c){return a.length<3?cq(a):a[0]+cw(a,cx(a,b))}function cw(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return cq(a);var c=a.length!=b.length,d="",e=a[0],f=a[1],g=b[0],h=g,i=1;c&&(d+="Q"+(f[0]-g[0]*2/3)+","+(f[1]-g[1]*2/3)+","+f[0]+","+f[1],e=a[1],i=2);if(b.length>1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j<b.length;j++,i++)f=a[i],h=b[j],d+="S"+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1]}if(c){var k=a[i];d+="Q"+(f[0]+h[0]*2/3)+","+(f[1]+h[1]*2/3)+","+k[0]+","+k[1]}return d}function cx(a,b){var c=[],d=(1-b)/2,e,f=a[0],g=a[1],h=1,i=a.length;while(++h<i)e=f,f=g,g=a[h],c.push([d*(g[0]-e[0]),d*(g[1]-e[1])]);return c}function cy(a){if(a.length<3)return cq(a);var b=1,c=a.length,d=a[0],e=d[0],f=d[1],g=[e,e,e,(d=a[1])[0]],h=[f,f,f,d[1]],i=[e,",",f];cG(i,g,h);while(++b<c)d=a[b],g.shift(),g.push(d[0]),h.shift(),h.push(d[1]),cG(i,g,h);b=-1;while(++b<2)g.shift(),g.push(d[0]),h.shift(),h.push(d[1]),cG(i,g,h);return i.join("")}function cz(a){if(a.length<4)return cq(a);var b=[],c=-1,d=a.length,e,f=[0],g=[0];while(++c<3)e=a[c],f.push(e[0]),g.push(e[1]);b.push(cC(cF,f)+","+cC(cF,g)),--c;while(++c<d)e=a[c],f.shift(),f.push(e[0]),g.shift(),g.push(e[1]),cG(b,f,g);return b.join("")}function cA(a){var b,c=-1,d=a.length,e=d+4,f,g=[],h=[];while(++c<4)f=a[c%d],g.push(f[0]),h.push(f[1]);b=[cC(cF,g),",",cC(cF,h)],--c;while(++c<e)f=a[c%d],g.shift(),g.push(f[0]),h.shift(),h.push(f[1]),cG(b,g,h);return b.join("")}function cB(a,b){var c=a.length-1,d=a[0][0],e=a[0][1],f=a[c][0]-d,g=a[c][1]-e,h=-1,i,j;while(++h<=c)i=a[h],j=h/c,i[0]=b*i[0]+(1-b)*(d+j*f),i[1]=b*i[1]+(1-b)*(e+j*g);return cy(a)}function cC(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function cG(a,b,c){a.push("C",cC(cD,b),",",cC(cD,c),",",cC(cE,b),",",cC(cE,c),",",cC(cF,b),",",cC(cF,c))}function cH(a,b){return(b[1]-a[1])/(b[0]-a[0])}function cI(a){var b=0,c=a.length-1,d=[],e=a[0],f=a[1],g=d[0]=cH(e,f);while(++b<c)d[b]=g+(g=cH(e=f,f=a[b+1]));return d[b]=g,d}function cJ(a){var b=[],c,d,e,f,g=cI(a),h=-1,i=a.length-1;while(++h<i)c=cH(a[h],a[h+1]),Math.abs(c)<1e-6?g[h]=g[h+1]=0:(d=g[h]/c,e=g[h+1]/c,f=d*d+e*e,f>9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function cK(a){return a.length<3?cq(a):a[0]+cw(a,cJ(a))}function cL(a){var b,c=-1,d=a.length,e,f;while(++c<d)b=a[c],e=b[0],f=b[1]+cf,b[0]=e*Math.cos(f),b[1]=e*Math.sin(f);return a}function cM(a){function j(f){if(f.length<1)return null;var j=cm(this,f,b,d),k=cm(this,f,b===c?cN(j):c,d===e?cO(j):e);return"M"+g(a(k),i)+"L"+h(a(j.reverse()),i)+"Z"}var b=cn,c=cn,d=0,e=co,f,g,h,i=.7;return j.x=function(a){return arguments.length?(b=c=a,j):c},j.x0=function(a){return arguments.length?(b=a,j):b},j.x1=function(a){return arguments.length?(c=a,j):c},j.y=function(a){return arguments.length?(d=e=a,j):e},j.y0=function(a){return arguments.length?(d=a,j):d},j.y1=function(a){return arguments.length?(e=a,j):e},j.interpolate=function(a){return arguments.length?(g=cp[f=a],h=g.reverse||g,j):f},j.tension=function(a){return arguments.length?(i=a,j):i},j.interpolate("linear")}function cN(a){return function(b,c){return a[c][0]}}function cO(a){return function(b,c){return a[c][1]}}function cP(a){return a.source}function cQ(a){return a.target}function cR(a){return a.radius}function cS(a){return a.startAngle}function cT(a){return a.endAngle}function cU(a){return[a.x,a.y]}function cV(a){return function(){var b=a.apply(this,arguments),c=b[0],d=b[1]+cf;return[c*Math.cos(d),c*Math.sin(d)]}}function cX(a,b){var c=(a.ownerSVGElement||a).createSVGPoint();if(cW<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),e=d[0][0].getScreenCTM();cW=!e.f&&!e.e,d.remove()}return cW?(c.x=b.pageX,c.y=b.pageY):(c.x=b.clientX,c.y=b.clientY),c=c.matrixTransform(a.getScreenCTM().inverse()),[c.x,c.y]}function cY(){return 64}function cZ(){return"circle"}function db(a,b){a.attr("transform",function(a){return"translate("+b(a)+",0)"})}function dc(a,b){a.attr("transform",function(a){return"translate(0,"+b(a)+")"})}function dd(a,b,c){e=[];if(c&&b.length>1){var d=bJ(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f<g)for(i=c;--i>0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++i<c&&(j=+b[f]+i*h)<d[1];)e.push(j)}return e}function dp(a,b){a.select(".extent").attr("x",b[0][0]),a.selectAll(".n,.s,.w,.nw,.sw").attr("x",b[0][0]-2),a.selectAll(".e,.ne,.se").attr("x",b[1][0]-3),a.selectAll(".extent,.n,.s").attr("width",b[1][0]-b[0][0])}function dq(a,b){a.select(".extent").attr("y",b[0][1]),a.selectAll(".n,.e,.w,.nw,.ne").attr("y",b[0][1]-3),a.selectAll(".s,.se,.sw").attr("y",b[1][1]-4),a.selectAll(".extent,.e,.w").attr("height",b[1][1]-b[0][1])}function dr(){d3.event.keyCode==32&&dg&&!dk&&(dm=null,dn[0]-=dj[1][0],dn[1]-=dj[1][1],dk=2,M())}function ds(){d3.event.keyCode==32&&dk==2&&(dn[0]+=dj[1][0],dn[1]+=dj[1][1],dk=0,M())}function dt(){if(dn){var a=d3.svg.mouse(dg),b=d3.select(dg);dk||(d3.event.altKey?(dm||(dm=[(dj[0][0]+dj[1][0])/2,(dj[0][1]+dj[1][1])/2]),dn[0]=dj[+(a[0]<dm[0])][0],dn[1]=dj[+(a[1]<dm[1])][1]):dm=null),dh&&(du(a,dh,0),dp(b,dj)),di&&(du(a,di,1),dq(b,dj)),df("brush")}}function du(a,b,c){var d=bJ(b.range()),e=dn[c],f=dj[1][c]-dj[0][c],g,h;dk&&(d[0]-=e,d[1]-=f+e),g=Math.max(d[0],Math.min(d[1],a[c])),dk?h=(g+=e)+f:(dm&&(e=Math.max(d[0],Math.min(d[1],2*dm[c]-g))),e<g?(h=g,g=e):h=e),dj[0][c]=g,dj[1][c]=h}function dv(){dn&&(dt(),d3.select(dg).selectAll(".resize").style("pointer-events",de.empty()?"none":"all"),df("brushend"),de=df=dg=dh=di=dj=dk=dl=dm=dn=null,M())}function dE(a){var b=d3.event,c=dz.parentNode,d=0,e=0;c&&(c=dF(c),d=c[0]-dB[0],e=c[1]-dB[1],dB=c,dC|=d|e);try{d3.event={dx:d,dy:e},dx[a].apply(dz,dA)}finally{d3.event=b}b.preventDefault()}function dF(a,b){var c=d3.event.changedTouches;return c?d3.svg.touches(a,c)[0]:d3.svg.mouse(a)}function dG(){if(!dz)return;var a=dz.parentNode;if(!a)return dH();dE("drag"),M()}function dH(){if(!dz)return;dE("dragend"),dz=null,dC&&dy===d3.event.target&&(dD=!0,M())}function dI(){dD&&dy===d3.event.target&&(M(),dD=!1,dy=null)}function dW(a){return[a[0]-dO[0],a[1]-dO[1],dO[2]]}function dX(){dJ||(dJ=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var a=d3.event,b;try{dJ.scrollTop=1e3,dJ.dispatchEvent(a),b=1e3-dJ.scrollTop}catch(c){b=a.wheelDelta||-a.detail*5}return b*.005}function dY(){var a=d3.svg.touches(dS),b=-1,c=a.length,d;while(++b<c)dM[(d=a[b]).identifier]=dW(d);return a}function dZ(){var a=d3.svg.touches(dS);switch(a.length){case 1:var b=a[0];eb(dO[2],b,dM[b.identifier]);break;case 2:var c=a[0],d=a[1],e=[(c[0]+d[0])/2,(c[1]+d[1])/2],f=dM[c.identifier],g=dM[d.identifier],h=[(f[0]+g[0])/2,(f[1]+g[1])/2,f[2]];eb(Math.log(d3.event.scale)/Math.LN2+f[2],e,h)}}function d$(){dL=null,dK&&(dU=!0,eb(dO[2],d3.svg.mouse(dS),dK))}function d_(){dK&&(dU&&dR===d3.event.target&&(dV=!0),d$(),dK=null)}function ea(){dV&&dR===d3.event.target&&(d3.event.stopPropagation(),d3.event.preventDefault(),dV=!1,dR=null)}function eb(a,b,c){function l(a,b,c){a.domain(a.range().map(function(f){return a.invert((f-c)*d/e+b)}))}a=ed(a,2);var d=Math.pow(2,dO[2]),e=Math.pow(2,a),f=Math.pow(2,(dO[2]=a)-c[2]),g=dO[0],h=dO[1],i=dO[0]=ed(b[0]-c[0]*f,0,e),j=dO[1]=ed(b[1]-c[1]*f,1,e),k=d3.event;d3.event={scale:e,translate:[i,j],transform:function(a,b){a&&l(a,g,i),b&&l(b,h,j)}};try{dQ.apply(dS,dT)}finally{d3.event=k}k.preventDefault()}function ed(a,b,c){var d=dP[b],e=d[0],f=d[1];return arguments.length===3?Math.max(f*(f===Infinity?-Infinity:1/c-1),Math.min(e===-Infinity?Infinity:e,a/c))*c:Math.max(e,Math.min(f,a))}Date.now||(Date.now=function(){return+(new Date)});try{document.createElement("div").style.setProperty("opacity",0,"")}catch(a){var b=CSSStyleDeclaration.prototype,c=b.setProperty;b.setProperty=function(a,b,d){c.call(this,a,b+"",d)}}d3={version:"2.5.0"};var d=f;try{d(document.documentElement.childNodes)[0].nodeType}catch(g){d=e}var h=[].__proto__?function(a,b){a.__proto__=b}:function(a,b){for(var c in b)a[c]=b[c]};d3.functor=function(a){return typeof a=="function"?a:function(){return a}},d3.rebind=function(a,b){return function(){var c=b.apply(a,arguments);return arguments.length?a:c}},d3.ascending=function(a,b){return a<b?-1:a>b?1:a>=b?0:NaN},d3.descending=function(a,b){return b<a?-1:b>a?1:b>=a?0:NaN},d3.mean=function(a,b){var c=a.length,d,e=0,f=-1,g=0;if(arguments.length===1)while(++f<c)j(d=a[f])&&(e+=(d-e)/++g);else while(++f<c)j(d=b.call(a,a[f],f))&&(e+=(d-e)/++g);return g?e:undefined},d3.median=function(a,b){return arguments.length>1&&(a=a.map(b)),a=a.filter(j),a.length?d3.quantile(a.sort(d3.ascending),.5):undefined},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++c<d&&((e=a[c])==null||e!=e))e=undefined;while(++c<d)(f=a[c])!=null&&e>f&&(e=f)}else{while(++c<d&&((e=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&e>f&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++c<d&&((e=a[c])==null||e!=e))e=undefined;while(++c<d)(f=a[c])!=null&&f>e&&(e=f)}else{while(++c<d&&((e=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&f>e&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++c<d&&((e=g=a[c])==null||e!=e))e=g=undefined;while(++c<d)(f=a[c])!=null&&(e>f&&(e=f),g<f&&(g=f))}else{while(++c<d&&((e=g=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&(e>f&&(e=f),g<f&&(g=f))}return[e,g]},d3.random={normal:function(a,b){return arguments.length<2&&(b=1),arguments.length<1&&(a=0),function(){var c,d,e;do c=Math.random()*2-1,d=Math.random()*2-1,e=c*c+d*d;while(!e||e>1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}}},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f<d)isNaN(e=+a[f])||(c+=e);else while(++f<d)isNaN(e=+b.call(a,a[f],f))||(c+=e);return c},d3.quantile=function(a,b){var c=(a.length-1)*b+1,d=Math.floor(c),e=a[d-1],f=c-d;return f?e+f*(a[d]-e):e},d3.zip=function(){if(!(e=arguments.length))return[];for(var a=-1,b=d3.min(arguments,k),c=new Array(b);++a<b;)for(var d=-1,e,f=c[a]=new Array(e);++d<e;)f[d]=arguments[d][a];return c},d3.bisectLeft=function(a,b,c,d){arguments.length<3&&(c=0),arguments.length<4&&(d=a.length);while(c<d){var e=c+d>>1;a[e]<b?c=e+1:d=e}return c},d3.bisect=d3.bisectRight=function(a,b,c,d){arguments.length<3&&(c=0),arguments.length<4&&(d=a.length);while(c<d){var e=c+d>>1;b<a[e]?d=e:c=e+1}return c},d3.first=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c<d)b.call(a,e,f=a[c])>0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c<d)b.call(a,e,f=a[c])<=0&&(e=f);return e},d3.nest=function(){function f(c,g){if(g>=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,j=b[g++],k,l,m={};while(++h<i)(k=j(l=c[h]))in m?m[k].push(l):m[k]=[l];for(k in m)m[k]=f(m[k],g);return m}function g(a,d){if(d>=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});return f&&e.sort(function(a,b){return f(a.key,b.key)}),e}var a={},b=[],c=[],d,e;return a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){return b.push(c),a},a.sortKeys=function(d){return c[b.length-1]=d,a},a.sortValues=function(b){return d=b,a},a.rollup=function(b){return e=b,a},a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++d<e)c[d]=a[b[d]];return c},d3.merge=function(a){return Array.prototype.concat.apply([],a)},d3.split=function(a,b){var c=[],d=[],e,f=-1,g=a.length;arguments.length<2&&(b=l);while(++f<g)b.call(d,e=a[f],f)?d=[]:(d.length||c.push(d),d.push(e));return c},d3.range=function(a,b,c){arguments.length<3&&(c=1,arguments.length<2&&(b=a,a=0));if((b-a)/c==Infinity)throw new Error("infinite range");var d=[],e=-1,f;if(c<0)while((f=a+c*++e)>b)d.push(f);else while((f=a+c*++e)<b)d.push(f);return d},d3.requote=function(a){return a.replace(n,"\\$&")};var n=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;d3.round=function(a,b){return b?Math.round(a*Math.pow(10,b))*Math.pow(10,-b):Math.round(a)},d3.xhr=function(a,b,c){var d=new XMLHttpRequest;arguments.length<3?c=b:b&&d.overrideMimeType&&d.overrideMimeType(b),d.open("GET",a,!0),d.onreadystatechange=function(){d.readyState===4&&c(d.status<300?d:null)},d.send(null)},d3.text=function(a,b,c){function d(a){c(a&&a.responseText)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.json=function(a,b){d3.text(a,"application/json",function(a){b(a?JSON.parse(a):null)})},d3.html=function(a,b){d3.text(a,"text/html",function(a){if(a!=null){var c=document.createRange();c.selectNode(document.body),a=c.createContextualFragment(a)}b(a)})},d3.xml=function(a,b,c){function d(a){c(a&&a.responseXML)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}},d3.dispatch=function(){var a=new o,b=-1,c=arguments.length;while(++b<c)a[arguments[b]]=p();return a},o.prototype.on=function(a,b){var c=a.indexOf("."),d="";c>0&&(d=a.substring(c+1),a=a.substring(0,c)),this[a].on(d,b)},d3.format=function(a){var b=q.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=1,k="",l=!1;h&&(h=+h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=100,k="%",i="f";break;case"p":j=100,k="%",i="r";break;case"d":l=!0,h=0;break;case"s":j=-1,i="r"}return i=="r"&&!h&&(i="g"),i=r[i]||t,function(a){if(l&&a%1)return"";var b=a<0&&(a=-a)?"":d;if(j<0){var m=d3.formatPrefix(a,h);a*=m.scale,k=m.symbol}else a*=j;a=i(a,h);if(e){var n=a.length+b.length;n<f&&(a=(new Array(f-n+1)).join(c)+a),g&&(a=u(a)),a=b+a}else{g&&(a=u(a)),a=b+a;var n=a.length;n<f&&(a=(new Array(f-n+1)).join(c)+a)}return a+k}};var q=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,r={g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){return d3.round(a,b=s(a,b)).toFixed(Math.max(0,Math.min(20,b)))}},v=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(w);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,s(a,b))),c=1+Math.floor(1e-12+Math.log(a)/Math.LN10),c=Math.max(-24,Math.min(24,Math.floor((c<=0?c+1:c-1)/3)*3))),v[8+c/3]};var x=F(2),y=F(3),z={linear:function(){return E},poly:F,quad:function(){return x},cubic:function(){return y},sin:function(){return G},exp:function(){return H},circle:function(){return I},elastic:J,back:K,bounce:function(){return L}},A={"in":function(a){return a},out:C,"in-out":D,"out-in":function(a){return D(C(a))}};d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return B(A[d](z[c].apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){return b-=a,function(c){return a+b*c}},d3.interpolateRound=function(a,b){return b-=a,function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;N.lastIndex=0;for(d=0;c=N.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=N.lastIndex;f<b.length&&h.push(b.substring(f));for(d=0,j=i.length;(c=N.exec(a))&&d<j;++d){k=i[d];if(k.x==c[0]){if(k.i)if(h[k.i+1]==null){h[k.i-1]+=k.x,h.splice(k.i,1);for(e=d+1;e<j;++e)i[e].i--}else{h[k.i-1]+=k.x+h[k.i+1],h.splice(k.i,2);for(e=d+1;e<j;++e)i[e].i-=2}else if(h[k.i+1]==null)h[k.i]=k.x;else{h[k.i]=k.x+h[k.i+1],h.splice(k.i+1,1);for(e=d+1;e<j;++e)i[e].i--}i.splice(d,1),j--,d--}else k.x=d3.interpolateNumber(parseFloat(c[0]),parseFloat(k.x))}while(d<j)k=i.pop(),h[k.i+1]==null?h[k.i]=k.x:(h[k.i]=k.x+h[k.i+1],h.splice(k.i+1,1)),j--;return h.length===1?h[0]==null?i[0].x:function(){return b}:function(a){for(d=0;d<j;++d)h[(k=i[d]).i]=k.x(a);return h.join("")}},d3.interpolateTransform=function(a,b){return d3.interpolateString(d3.transform(a)+"",d3.transform(b)+"")},d3.interpolateRgb=function(a,b){a=d3.rgb(a),b=d3.rgb(b);var c=a.r,d=a.g,e=a.b,f=b.r-c,g=b.g-d,h=b.b-e;return function(a){return"#"+T(Math.round(c+f*a))+T(Math.round(d+g*a))+T(Math.round(e+h*a))}},d3.interpolateHsl=function(a,b){a=d3.hsl(a),b=d3.hsl(b);var c=a.h,d=a.s,e=a.l,f=b.h-c,g=b.s-d,h=b.l-e;return function(a){return _(c+f*a,d+g*a,e+h*a).toString()}},d3.interpolateArray=function(a,b){var c=[],d=[],e=a.length,f=b.length,g=Math.min(a.length,b.length),h;for(h=0;h<g;++h)c.push(d3.interpolate(a[h],b[h]));for(;h<e;++h)d[h]=a[h];for(;h<f;++h)d[h]=b[h];return function(a){for(h=0;h<g;++h)d[h]=c[h](a);return d}},d3.interpolateObject=function(a,b){var c={},d={},e;for(e in a)e in b?c[e]=O(e)(a[e],b[e]):d[e]=a[e];for(e in b)e in a||(d[e]=b[e]);return function(a){for(e in c)d[e]=c[e](a);return d}};var N=/[-+]?(?:\d*\.?\d+)(?:[eE][-+]?\d+)?/g;d3.interpolators=[d3.interpolateObject,function(a,b){return b instanceof Array&&d3.interpolateArray(a,b)},function(a,b){return typeof b=="string"&&d3.interpolateString(a+"",b)},function(a,b){return(typeof b=="string"?b in X||/^(#|rgb\(|hsl\()/.test(b):b instanceof S||b instanceof $)&&d3.interpolateRgb(a+"",b)},function(a,b){return typeof b=="number"&&d3.interpolateNumber(+a,b)}],d3.rgb=function(a,b,c){return arguments.length===1?a instanceof S?R(a.r,a.g,a.b):U(""+a,R,_):R(~~a,~~b,~~c)},S.prototype.brighter=function(a){a=Math.pow(.7,arguments.length?a:1);var b=this.r,c=this.g,d=this.b,e=30;return!b&&!c&&!d?R(e,e,e):(b&&b<e&&(b=e),c&&c<e&&(c=e),d&&d<e&&(d=e),R(Math.min(255,Math.floor(b/a)),Math.min(255,Math.floor(c/a)),Math.min(255,Math.floor(d/a))))},S.prototype.darker=function(a){return a=Math.pow(.7,arguments.length?a:1),R(Math.floor(a*this.r),Math.floor(a*this.g),Math.floor(a*this.b))},S.prototype.hsl=function(){return V(this.r,this.g,this.b)},S.prototype.toString=function(){return"#"+T(this.r)+T(this.g)+T(this.b)};var X={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080"
,green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};for(var Y in X)X[Y]=U(X[Y],R,_);d3.hsl=function(a,b,c){return arguments.length===1?a instanceof $?Z(a.h,a.s,a.l):U(""+a,V,Z):Z(+a,+b,+c)},$.prototype.brighter=function(a){return a=Math.pow(.7,arguments.length?a:1),Z(this.h,this.s,this.l/a)},$.prototype.darker=function(a){return a=Math.pow(.7,arguments.length?a:1),Z(this.h,this.s,a*this.l)},$.prototype.rgb=function(){return _(this.h,this.s,this.l)},$.prototype.toString=function(){return this.rgb().toString()};var bb=function(a,b){return b.querySelector(a)},bc=function(a,b){return b.querySelectorAll(a)};typeof Sizzle=="function"&&(bb=function(a,b){return Sizzle(a,b)[0]},bc=function(a,b){return Sizzle.uniqueSort(Sizzle(a,b))});var bd=[];d3.selection=function(){return bk},d3.selection.prototype=bd,bd.select=function(a){var b=[],c,d,e,f;typeof a!="function"&&(a=be(a));for(var g=-1,h=this.length;++g<h;){b.push(c=[]),c.parentNode=(e=this[g]).parentNode;for(var i=-1,j=e.length;++i<j;)(f=e[i])?(c.push(d=a.call(f,f.__data__,i)),d&&"__data__"in f&&(d.__data__=f.__data__)):c.push(null)}return ba(b)},bd.selectAll=function(a){var b=[],c,e;typeof a!="function"&&(a=bf(a));for(var f=-1,g=this.length;++f<g;)for(var h=this[f],i=-1,j=h.length;++i<j;)if(e=h[i])b.push(c=d(a.call(e,e.__data__,i))),c.parentNode=e;return ba(b)},bd.attr=function(a,b){function d(){this.removeAttribute(a)}function e(){this.removeAttributeNS(a.space,a.local)}function f(){this.setAttribute(a,b)}function g(){this.setAttributeNS(a.space,a.local,b)}function h(){var c=b.apply(this,arguments);c==null?this.removeAttribute(a):this.setAttribute(a,c)}function i(){var c=b.apply(this,arguments);c==null?this.removeAttributeNS(a.space,a.local):this.setAttributeNS(a.space,a.local,c)}a=d3.ns.qualify(a);if(arguments.length<2){var c=this.node();return a.local?c.getAttributeNS(a.space,a.local):c.getAttribute(a)}return this.each(b==null?a.local?e:d:typeof b=="function"?a.local?i:h:a.local?g:f)},bd.classed=function(a,b){var c=a.split(bg),d=c.length,e=-1;if(arguments.length>1){while(++e<d)bh.call(this,c[e],b);return this}while(++e<d)if(!bh.call(this,c[e]))return!1;return!0};var bg=/\s+/g;bd.style=function(a,b,c){function d(){this.style.removeProperty(a)}function e(){this.style.setProperty(a,b,c)}function f(){var d=b.apply(this,arguments);d==null?this.style.removeProperty(a):this.style.setProperty(a,d,c)}return arguments.length<3&&(c=""),arguments.length<2?window.getComputedStyle(this.node(),null).getPropertyValue(a):this.each(b==null?d:typeof b=="function"?f:e)},bd.property=function(a,b){function c(){delete this[a]}function d(){this[a]=b}function e(){var c=b.apply(this,arguments);c==null?delete this[a]:this[a]=c}return arguments.length<2?this.node()[a]:this.each(b==null?c:typeof b=="function"?e:d)},bd.text=function(a){return arguments.length<1?this.node().textContent:this.each(typeof a=="function"?function(){this.textContent=a.apply(this,arguments)}:function(){this.textContent=a})},bd.html=function(a){return arguments.length<1?this.node().innerHTML:this.each(typeof a=="function"?function(){this.innerHTML=a.apply(this,arguments)}:function(){this.innerHTML=a})},bd.append=function(a){function b(){return this.appendChild(document.createElement(a))}function c(){return this.appendChild(document.createElementNS(a.space,a.local))}return a=d3.ns.qualify(a),this.select(a.local?c:b)},bd.insert=function(a,b){function c(){return this.insertBefore(document.createElement(a),bb(b,this))}function d(){return this.insertBefore(document.createElementNS(a.space,a.local),bb(b,this))}return a=d3.ns.qualify(a),this.select(a.local?d:c)},bd.remove=function(){return this.each(function(){var a=this.parentNode;a&&a.removeChild(this)})},bd.data=function(a,b){function f(a,f){var g,h=a.length,i=f.length,j=Math.min(h,i),k=Math.max(h,i),l=[],m=[],n=[],o,p;if(b){var q={},r=[],s,t=f.length;for(g=-1;++g<h;)s=b.call(o=a[g],o.__data__,g),s in q?n[t++]=o:q[s]=o,r.push(s);for(g=-1;++g<i;)o=q[s=b.call(f,p=f[g],g)],o?(o.__data__=p,l[g]=o,m[g]=n[g]=null):(m[g]=bi(p),l[g]=n[g]=null),delete q[s];for(g=-1;++g<h;)r[g]in q&&(n[g]=a[g])}else{for(g=-1;++g<j;)o=a[g],p=f[g],o?(o.__data__=p,l[g]=o,m[g]=n[g]=null):(m[g]=bi(p),l[g]=n[g]=null);for(;g<i;++g)m[g]=bi(f[g]),l[g]=n[g]=null;for(;g<k;++g)n[g]=a[g],m[g]=l[g]=null}m.update=l,m.parentNode=l.parentNode=n.parentNode=a.parentNode,c.push(m),d.push(l),e.push(n)}var c=[],d=[],e=[],g=-1,h=this.length,i;if(typeof a=="function")while(++g<h)f(i=this[g],a.call(i,i.parentNode.__data__,g));else while(++g<h)f(i=this[g],a);var j=ba(d);return j.enter=function(){return bl(c)},j.exit=function(){return ba(e)},j},bd.filter=function(a){var b=[],c,d,e;for(var f=0,g=this.length;f<g;f++){b.push(c=[]),c.parentNode=(d=this[f]).parentNode;for(var h=0,i=d.length;h<i;h++)(e=d[h])&&a.call(e,e.__data__,h)&&c.push(e)}return ba(b)},bd.map=function(a){return this.each(function(){this.__data__=a.apply(this,arguments)})},bd.sort=function(a){a=bj.apply(this,arguments);for(var b=0,c=this.length;b<c;b++)for(var d=this[b].sort(a),e=1,f=d.length,g=d[0];e<f;e++){var h=d[e];h&&(g&&g.parentNode.insertBefore(h,g.nextSibling),g=h)}return this},bd.on=function(a,b,c){arguments.length<3&&(c=!1);var d="__on"+a,e=a.indexOf(".");return e>0&&(a=a.substring(0,e)),arguments.length<2?(e=this.node()[d])&&e._:this.each(function(e,f){function h(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this;g[d]&&g.removeEventListener(a,g[d],c),b&&g.addEventListener(a,g[d]=h,c),h._=b})},bd.each=function(a){for(var b=-1,c=this.length;++b<c;)for(var d=this[b],e=-1,f=d.length;++e<f;){var g=d[e];g&&a.call(g,g.__data__,e,b)}return this},bd.call=function(a){return a.apply(this,(arguments[0]=this,arguments)),this},bd.empty=function(){return!this.node()},bd.node=function(a){for(var b=0,c=this.length;b<c;b++)for(var d=this[b],e=0,f=d.length;e<f;e++){var g=d[e];if(g)return g}return null},bd.transition=function(){var a=[],b,c;for(var d=-1,e=this.length;++d<e;){a.push(b=[]);for(var f=this[d],g=-1,h=f.length;++g<h;)b.push((c=f[g])?{node:c,delay:0,duration:250}:null)}return bn(a,bt||++bs,Date.now())};var bk=ba([[document]]);bk[0].parentNode=document.documentElement,d3.select=function(a){return typeof a=="string"?bk.select(a):ba([[a]])},d3.selectAll=function(a){return typeof a=="string"?bk.selectAll(a):ba([d(a)])};var bm=[];bm.append=bd.append,bm.insert=bd.insert,bm.empty=bd.empty,bm.node=bd.node,bm.select=function(a){var b=[],c,d,e,f,g;for(var h=-1,i=this.length;++h<i;){e=(f=this[h]).update,b.push(c=[]),c.parentNode=f.parentNode;for(var j=-1,k=f.length;++j<k;)(g=f[j])?(c.push(e[j]=d=a.call(f.parentNode,g.__data__,j)),d.__data__=g.__data__):c.push(null)}return ba(b)};var bo={},br=[],bs=0,bt=0,bu=d3.ease("cubic-in-out");br.call=bd.call,d3.transition=function(){return bk.transition()},d3.transition.prototype=br,br.select=function(a){var b=[],c,d,e;typeof a!="function"&&(a=be(a));for(var f=-1,g=this.length;++f<g;){b.push(c=[]);for(var h=this[f],i=-1,j=h.length;++i<j;)(e=h[i])&&(d=a.call(e.node,e.node.__data__,i))?("__data__"in e.node&&(d.__data__=e.node.__data__),c.push({node:d,delay:e.delay,duration:e.duration})):c.push(null)}return bn(b,this.id,this.time).ease(this.ease())},br.selectAll=function(a){var b=[],c,d,e;typeof a!="function"&&(a=bf(a));for(var f=-1,g=this.length;++f<g;)for(var h=this[f],i=-1,j=h.length;++i<j;)if(e=h[i]){d=a.call(e.node,e.node.__data__,i),b.push(c=[]);for(var k=-1,l=d.length;++k<l;)c.push({node:d[k],delay:e.delay,duration:e.duration})}return bn(b,this.id,this.time).ease(this.ease())},br.attr=function(a,b){return this.attrTween(a,bq(a,b))},br.attrTween=function(a,b){function d(a,d){var e=b.call(this,a,d,this.getAttribute(c));return e===bo?(this.removeAttribute(c),null):e&&function(a){this.setAttribute(c,e(a))}}function e(a,d){var e=b.call(this,a,d,this.getAttributeNS(c.space,c.local));return e===bo?(this.removeAttributeNS(c.space,c.local),null):e&&function(a){this.setAttributeNS(c.space,c.local,e(a))}}var c=d3.ns.qualify(a);return this.tween("attr."+a,c.local?e:d)},br.style=function(a,b,c){return arguments.length<3&&(c=""),this.styleTween(a,bq(a,b),c)},br.styleTween=function(a,b,c){return arguments.length<3&&(c=""),this.tween("style."+a,function(d,e){var f=b.call(this,d,e,window.getComputedStyle(this,null).getPropertyValue(a));return f===bo?(this.style.removeProperty(a),null):f&&function(b){this.style.setProperty(a,f(b),c)}})},br.text=function(a){return this.tween("text",function(b,c){this.textContent=typeof a=="function"?a.call(this,b,c):a})},br.remove=function(){return this.each("end",function(){var a;!this.__transition__&&(a=this.parentNode)&&a.removeChild(this)})},br.delay=function(a){var b=this;return b.each(typeof a=="function"?function(c,d,e){b[e][d].delay=+a.apply(this,arguments)}:(a=+a,function(c,d,e){b[e][d].delay=a}))},br.duration=function(a){var b=this;return b.each(typeof a=="function"?function(c,d,e){b[e][d].duration=+a.apply(this,arguments)}:(a=+a,function(c,d,e){b[e][d].duration=a}))},br.transition=function(){return this.select(i)};var bw=null,bx,by;d3.timer=function(a,b,c){var d=!1,e,f=bw;if(arguments.length<3){if(arguments.length<2)b=0;else if(!isFinite(b))return;c=Date.now()}while(f){if(f.callback===a){f.then=c,f.delay=b,d=!0;break}e=f,f=f.next}d||(bw={callback:a,then:c,delay:b,next:bw}),bx||(by=clearTimeout(by),bx=1,bB(bz))},d3.timer.flush=function(){var a,b=Date.now(),c=bw;while(c)a=b-c.then,c.delay||(c.flush=c.callback(a)),c=c.next;bA()};var bB=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,17)};d3.transform=function(a){return bG.setAttribute("transform",a),new bC(bG.transform.baseVal.consolidate().matrix)},bC.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var bG=document.createElementNS(d3.ns.prefix.svg,"g"),bH=180/Math.PI;d3.scale={},d3.scale.linear=function(){return bM([0,1],[0,1],d3.interpolate,!1)},d3.scale.log=function(){return bU(d3.scale.linear(),bW)};var bV=d3.format("e");bW.pow=function(a){return Math.pow(10,a)},bX.pow=function(a){return-Math.pow(10,-a)},d3.scale.pow=function(){return bY(d3.scale.linear(),1)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){return b$([],{t:"range",x:[]})},d3.scale.category10=function(){return d3.scale.ordinal().range(b_)},d3.scale.category20=function(){return d3.scale.ordinal().range(ca)},d3.scale.category20b=function(){return d3.scale.ordinal().range(cb)},d3.scale.category20c=function(){return d3.scale.ordinal().range(cc)};var b_=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],ca=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],cb=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],cc=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){return cd([],[])},d3.scale.quantize=function(){return ce(0,1,[0,1])},d3.svg={},d3.svg.arc=function(){function e(){var e=a.apply(this,arguments),f=b.apply(this,arguments),g=c.apply(this,arguments)+cf,h=d.apply(this,arguments)+cf,i=(h<g&&(i=g,g=h,h=i),h-g),j=i<Math.PI?"0":"1",k=Math.cos(g),l=Math.sin(g),m=Math.cos(h),n=Math.sin(h);return i>=cg?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=ch,b=ci,c=cj,d=ck;return e.innerRadius=function(b){return arguments.length?(a=d3.functor(b),e):a},e.outerRadius=function(a){return arguments.length?(b=d3.functor(a),e):b},e.startAngle=function(a){return arguments.length?(c=d3.functor(a),e):c},e.endAngle=function(a){return arguments.length?(d=d3.functor(a),e):d},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+cf;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cf=-Math.PI/2,cg=2*Math.PI-1e-6;d3.svg.line=function(){return cl(Object)};var cp={linear:cq,"step-before":cr,"step-after":cs,basis:cy,"basis-open":cz,"basis-closed":cA,bundle:cB,cardinal:cv,"cardinal-open":ct,"cardinal-closed":cu,monotone:cK},cD=[0,2/3,1/3,0],cE=[0,1/3,2/3,0],cF=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cl(cL);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cr.reverse=cs,cs.reverse=cr,d3.svg.area=function(){return cM(Object)},d3.svg.area.radial=function(){var a=cM(cL);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1,a},d3.svg.chord=function(){function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1)+j(f.r,f.p1,e.r,e.p0))+"Z"}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+cf,k=e.call(a,h,g)+cf;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function i(a,b){return"A"+a+","+a+" 0 0,1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=cP,b=cQ,c=cR,d=cj,e=ck;return f.radius=function(a){return arguments.length?(c=d3.functor(a),f):c},f.source=function(b){return arguments.length?(a=d3.functor(b),f):a},f.target=function(a){return arguments.length?(b=d3.functor(a),f):b},f.startAngle=function(a){return arguments.length?(d=d3.functor(a),f):d},f.endAngle=function(a){return arguments.length?(e=d3.functor(a),f):e},f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(c),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=cP,b=cQ,c=cU;return d.source=function(b){return arguments.length?(a=d3.functor(b),d):a},d.target=function(a){return arguments.length?(b=d3.functor(a),d):b},d.projection=function(a){return arguments.length?(c=a,d):c},d},d3.svg.diagonal.radial=function(){var a=d3.svg.diagonal(),b=cU,c=a.projection;return a.projection=function(a){return arguments.length?c(cV(b=a)):b},a},d3.svg.mouse=function(a){return cX(a,d3.event)};var cW=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.touches=function(a,b){return arguments.length<2&&(b=d3.event.touches),b?d(b).map(function(b){var c=cX(a,b);return c.identifier=b.identifier,c}):[]},d3.svg.symbol=function(){function c(c,d){return(c$[a.call(this,c,d)]||c$.circle)(b.call(this,c,d))}var a=cZ,b=cY;return c.type=function(b){return arguments.length?(a=d3.functor(b),c):a},c.size=function(a){return arguments.length?(b=d3.functor(a),c):b},c};var c$={circle:function(a){var b=Math.sqrt(a/Math.PI);return"M0,"+b+"A"+b+","+b+" 0 1,1 0,"+ -b+"A"+b+","+b+" 0 1,1 0,"+b+"Z"},cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*da)),c=b*da;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/c_),c=b*c_/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/c_),c=b*c_/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}};d3.svg.symbolTypes=d3.keys(c$);var c_=Math.sqrt(3),da=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function j(j){j.each(function(k,l,m){var n=d3.select(this),o=j.delay?function(a){var b=bt;try{return bt=j.id,a.transition().delay(j[m][l].delay).duration(j[m][l].duration).ease(j.ease())}finally{bt=b}}:Object,p=a.ticks.apply(a,g),q=h==null?a.tickFormat.apply(a,g):h,r=dd(a,p,i),s=n.selectAll(".minor").data(r,String),t=s.enter().insert("svg:line","g").attr("class","tick minor").style("opacity",1e-6),u=o(s.exit()).style("opacity",1e-6).remove(),v=o(s).style("opacity",1),w=n.selectAll("g").data(p,String),x=w.enter().insert("svg:g","path").style("opacity",1e-6),y=o(w.exit()).style("opacity",1e-6).remove(),z=o(w).style("opacity",1),A,B=bJ(a.range()),C=n.selectAll(".domain").data([0]),D=C.enter().append("svg:path").attr("class","domain"),E=o(C),F=this.__chart__||a;this.__chart__=a.copy(),x.append("svg:line").attr("class","tick"),x.append("svg:text"),z.select("text").text(q);switch(b){case"bottom":A=db,v.attr("x2",0).attr("y2",d),z.select("line").attr("x2",0).attr("y2",c),z.select("text").attr("x",0).attr("y",Math.max(c,0)+f).attr("dy",".71em").attr("text-anchor","middle"),E.attr("d","M"+B[0]+","+e+"V0H"+B[1]+"V"+e);break;case"top":A=db,v.attr("x2",0).attr("y2",-d),z.select("line").attr("x2",0).attr("y2",-c),z.select("text").attr("x",0).attr("y",-(Math.max(c,0)+f)).attr("dy","0em").attr("text-anchor","middle"),E.attr("d","M"+B[0]+","+ -e+"V0H"+B[1]+"V"+ -e);break;case"left":A=dc,v.attr("x2",-d).attr("y2",0),z.select("line").attr("x2",-c).attr("y2",0),z.select("text").attr("x",-(Math.max(c,0)+f)).attr("y",0).attr("dy",".32em").attr("text-anchor","end"),E.attr("d","M"+ -e+","+B[0]+"H0V"+B[1]+"H"+ -e);break;case"right":A=dc,v.attr("x2",d).attr("y2",0),z.select("line").attr("x2",c).attr("y2",0),z.select("text").attr("x",Math.max(c,0)+f).attr("y",0).attr("dy",".32em").attr("text-anchor","start"),E.attr("d","M"+e+","+B[0]+"H0V"+B[1]+"H"+e)}x.call(A,F),z.call(A,a),y.call(A,a),t.call(A,F),v.call(A,a),u.call(A,a)})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h,i=0;return j.scale=function(b){return arguments.length?(a=b,j):a},j.orient=function(a){return arguments.length?(b=a,j):b},j.ticks=function(){return arguments.length?(g=arguments,j):g},j.tickFormat=function(a){return arguments.length?(h=a,j):h},j.tickSize=function(a,b,f){if(!arguments.length)return c;var g=arguments.length-1;return c=+a,d=g>1?+b:c,e=g>0?+arguments[g]:c,j},j.tickPadding=function(a){return arguments.length?(f=+a,j):f},j.tickSubdivide=function(a){return arguments.length?(i=+a,j):i},j},d3.svg.brush=function(){function e(a){var g=b&&c?["n","e","s","w","nw","ne","se","sw"]:b?["e","w"]:c?["n","s"]:[];a.each(function(){var a=d3.select(this).on("mousedown.brush",f),h=a.selectAll(".background").data([,]),i=a.selectAll(".extent").data([,]),j=a.selectAll(".resize").data(g,String),k;h.enter().append("svg:rect").attr("class","background").style("visibility","hidden").style("pointer-events","all").style("cursor","crosshair"),i.enter().append("svg:rect").attr("class","extent").style("cursor","move"),j.enter().append("svg:rect").attr("class",function(a){return"resize "+a}).attr("width",6).attr("height",6).style("visibility","hidden").style("pointer-events",e.empty()?"none":"all").style("cursor",function(a){return dw[a]}),j.exit().remove(),b&&(k=bJ(b.range()),h.attr("x",k[0]).attr("width",k[1]-k[0]),dp(a,d)),c&&(k=bJ(c.range()),h.attr("y",k[0]).attr("height",k[1]-k[0]),dq(a,d))})}function f(){var a=d3.select(d3.event.target);de=e,dg=this,dj=d,dn=d3.svg.mouse(dg),(dk=a.classed("extent"))?(dn[0]=d[0][0]-dn[0],dn[1]=d[0][1]-dn[1]):a.classed("resize")?(dl=d3.event.target.__data__,dn[0]=d[+/w$/.test(dl)][0],dn[1]=d[+/^n/.test(dl)][1]):d3.event.altKey&&(dm=dn.slice()),dh=!/^(n|s)$/.test(dl)&&b,di=!/^(e|w)$/.test(dl)&&c,df=g(this,arguments),df("brushstart"),dt(),M()}function g(b,c){return function(d){var f=d3.event;try{d3.event={type:d,target:e},a[d].apply(b,c)}finally{d3.event=f}}}var a=d3.dispatch("brushstart","brush","brushend"),b,c,d=[[0,0],[0,0]];return e.x=function(a){return arguments.length?(b=a,e):b},e.y=function(a){return arguments.length?(c=a,e):c},e.extent=function(a){var f,g,h,i,j;return arguments.length?(b&&(f=a[0],g=a[1],c&&(f=f[0],g=g[0]),f=b(f),g=b(g),g<f&&(j=f,f=g,g=j),d[0][0]=f,d[1][0]=g),c&&(h=a[0],i=a[1],b&&(h=h[1],i=i[1]),h=c(h),i=c(i),i<h&&(j=h,h=i,i=j),d[0][1]=h,d[1][1]=i),e):(b&&(f=b.invert(d[0][0]),g=b.invert(d[1][0]),g<f&&(j=f,f=g,g=j)),c&&(h=c.invert(d[0][1]),i=c.invert(d[1][1]),i<h&&(j=h,h=i,i=j)),b&&c?[[f,h],[g,i]]:b?[f,g]:c&&[h,i])},e.clear=function(){return d[0][0]=d[0][1]=d[1][0]=d[1][1]=0,e},e.empty=function(){return b&&d[0][0]===d[1][0]||c&&d[0][1]===d[1][1]},e.on=function(b,c){return a.on(b,c),e},d3.select(window).on("mousemove.brush",dt).on("mouseup.brush",dv).on("keydown.brush",dr).on("keyup.brush",ds),e};var de,df,dg,dh,di,dj,dk,dl,dm,dn,dw={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"};d3.behavior={},d3.behavior.drag=function(){function b(){this.on("mousedown.drag",d).on("touchstart.drag",d),d3.select(window).on("mousemove.drag",dG).on("touchmove.drag",dG).on("mouseup.drag",dH,!0).on("touchend.drag",dH,!0).on("click.drag",dI,!0)}function c(){dx=a,dy=d3.event.target,dB=dF((dz=this).parentNode),dC=0,dA=arguments}function d(){c.apply(this,arguments),dE("dragstart")}var a=d3.dispatch("drag","dragstart","dragend");return b.on=function(c,d){return a.on(c,d),b},b};var dx,dy,dz,dA,dB,dC,dD;d3.behavior.zoom=function(){function d(){this.on("mousedown.zoom",f).on("mousewheel.zoom",g).on("DOMMouseScroll.zoom",g).on("dblclick.zoom",h).on("touchstart.zoom",i),d3.select(window).on("mousemove.zoom",d$).on("mouseup.zoom",d_).on("touchmove.zoom",dZ).on("touchend.zoom",dY).on("click.zoom",ea,!0)}function e(){dO=a,dP=c,dQ=b.zoom,dR=d3.event.target,dS=this,dT=arguments}function f(){e.apply(this,arguments),dK=dW(d3.svg.mouse(dS)),dU=!1,d3.event.preventDefault(),window.focus()}function g(){e.apply(this,arguments),dL||(dL=dW(d3.svg.mouse(dS))),eb(dX()+a[2],d3.svg.mouse(dS),dL)}function h(){e.apply(this,arguments);var b=d3.svg.mouse(dS);eb(d3.event.shiftKey?Math.ceil(a[2]-1):Math.floor(a[2]+1),b,dW(b))}function i(){e.apply(this,arguments);var b=dY(),c,d=Date.now();b.length===1&&d-dN<300&&eb(1+Math.floor(a[2]),c=b[0],dM[c.identifier]),dN=d}var a=[0,0,0],b=d3.dispatch("zoom"),c=ec;return d.extent=function(a){return arguments.length?(c=a==null?ec:a,d):c},d.on=function(a,c){return b.on(a,c),d},d};var dJ,dK,dL,dM={},dN=0,dO,dP,dQ,dR,dS,dT,dU,dV,ec=[[-Infinity,Infinity],[-Infinity,Infinity],[-Infinity,Infinity]]})();
\ No newline at end of file
(function (hangfire) {
hangfire.config = {
pollInterval: $("#hangfireConfig").data("pollinterval"),
pollUrl: $("#hangfireConfig").data("pollurl"),
locale: document.documentElement.lang
};
hangfire.Metrics = (function() {
function Metrics() {
this._metrics = {};
}
Metrics.prototype.addElement = function(name, element) {
if (!(name in this._metrics)) {
this._metrics[name] = [];
}
this._metrics[name].push(element);
};
Metrics.prototype.getElements = function(name) {
if (!(name in this._metrics)) {
return [];
}
return this._metrics[name];
};
Metrics.prototype.getNames = function() {
var result = [];
var metrics = this._metrics;
for (var name in metrics) {
if (metrics.hasOwnProperty(name)) {
result.push(name);
}
}
return result;
};
return Metrics;
})();
var BaseGraph = function () {
this.height = 200;
};
BaseGraph.prototype.update = function () {
var graph = this._graph;
var width = $(graph.element).innerWidth();
if (width !== graph.width) {
graph.configure({
width: width,
height: this.height
});
}
graph.update();
};
BaseGraph.prototype._initGraph = function (element, settings, xSettings, ySettings) {
var graph = this._graph = new Rickshaw.Graph($.extend({
element: element,
width: $(element).innerWidth(),
height: this.height,
interpolation: 'linear',
stroke: true
}, settings));
this._hoverDetail = new Rickshaw.Graph.HoverDetail({
graph: graph,
yFormatter: function (y) { return Math.floor(y); },
xFormatter: function (x) { return moment(new Date(x * 1000)).format("LLLL"); }
});
if (xSettings) {
this._xAxis = new Rickshaw.Graph.Axis.Time($.extend({
graph: graph,
timeFixture: new Rickshaw.Fixtures.Time.Local()
}, xSettings));
}
if (ySettings) {
this._yAxis = new Rickshaw.Graph.Axis.Y($.extend({
graph: graph,
tickFormat: Rickshaw.Fixtures.Number.formatKMBT
}, ySettings));
}
graph.render();
}
hangfire.RealtimeGraph = (function() {
function RealtimeGraph(element, succeeded, failed, succeededStr, failedStr) {
this._succeeded = succeeded;
this._failed = failed;
this._initGraph(element, {
renderer: 'bar',
series: new Rickshaw.Series.FixedDuration([
{ name: failedStr, color: '#d9534f' },
{ name: succeededStr, color: '#5cb85c' }
],
undefined,
{ timeInterval: 2000, maxDataPoints: 100 }
)
}, null, {});
}
RealtimeGraph.prototype = Object.create(BaseGraph.prototype);
RealtimeGraph.prototype.appendHistory = function (statistics) {
var newSucceeded = parseInt(statistics["succeeded:count"].intValue);
var newFailed = parseInt(statistics["failed:count"].intValue);
if (this._succeeded !== null && this._failed !== null) {
var succeeded = newSucceeded - this._succeeded;
var failed = newFailed - this._failed;
this._graph.series.addData({ failed: failed, succeeded: succeeded });
this._graph.render();
}
this._succeeded = newSucceeded;
this._failed = newFailed;
};
return RealtimeGraph;
})();
hangfire.HistoryGraph = (function() {
function HistoryGraph(element, succeeded, failed, succeededStr, failedStr) {
this._initGraph(element, {
renderer: 'area',
series: [
{
color: '#d9534f',
data: failed,
name: failedStr
}, {
color: '#6ACD65',
data: succeeded,
name: succeededStr
}
]
}, {}, { ticksTreatment: 'glow' });
}
HistoryGraph.prototype = Object.create(BaseGraph.prototype);
return HistoryGraph;
})();
hangfire.StatisticsPoller = (function() {
function StatisticsPoller(metricsCallback, statisticsUrl, pollInterval) {
this._metricsCallback = metricsCallback;
this._listeners = [];
this._statisticsUrl = statisticsUrl;
this._pollInterval = pollInterval;
this._intervalId = null;
}
StatisticsPoller.prototype.start = function () {
var self = this;
var intervalFunc = function() {
try {
$.post(self._statisticsUrl, { metrics: self._metricsCallback() }, function(data) {
self._notifyListeners(data);
});
} catch (e) {
console.log(e);
}
};
this._intervalId = setInterval(intervalFunc, this._pollInterval);
};
StatisticsPoller.prototype.stop = function() {
if (this._intervalId !== null) {
clearInterval(this._intervalId);
this._intervalId = null;
}
};
StatisticsPoller.prototype.addListener = function(listener) {
this._listeners.push(listener);
};
StatisticsPoller.prototype._notifyListeners = function(statistics) {
var length = this._listeners.length;
var i;
for (i = 0; i < length; i++) {
this._listeners[i](statistics);
}
};
return StatisticsPoller;
})();
hangfire.Page = (function() {
function Page(config) {
this._metrics = new Hangfire.Metrics();
var self = this;
this._poller = new Hangfire.StatisticsPoller(
function () { return self._metrics.getNames(); },
config.pollUrl,
config.pollInterval);
this._initialize(config.locale);
this.realtimeGraph = this._createRealtimeGraph('realtimeGraph');
this.historyGraph = this._createHistoryGraph('historyGraph');
this._poller.start();
};
Page.prototype._createRealtimeGraph = function(elementId) {
var realtimeElement = document.getElementById(elementId);
if (realtimeElement) {
var succeeded = parseInt($(realtimeElement).data('succeeded'));
var failed = parseInt($(realtimeElement).data('failed'));
var succeededStr = $(realtimeElement).data('succeeded-string');
var failedStr = $(realtimeElement).data('failed-string');
var realtimeGraph = new Hangfire.RealtimeGraph(realtimeElement, succeeded, failed, succeededStr, failedStr);
this._poller.addListener(function (data) {
realtimeGraph.appendHistory(data);
});
$(window).resize(function() {
realtimeGraph.update();
});
return realtimeGraph;
}
return null;
};
Page.prototype._createHistoryGraph = function(elementId) {
var historyElement = document.getElementById(elementId);
if (historyElement) {
var createSeries = function (obj) {
var series = [];
for (var date in obj) {
if (obj.hasOwnProperty(date)) {
var value = obj[date];
var point = { x: Date.parse(date) / 1000, y: value };
series.unshift(point);
}
}
return series;
};
var succeeded = createSeries($(historyElement).data("succeeded"));
var failed = createSeries($(historyElement).data("failed"));
var succeededStr = $(historyElement).data('succeeded-string');
var failedStr = $(historyElement).data('failed-string');
var historyGraph = new Hangfire.HistoryGraph(historyElement, succeeded, failed, succeededStr, failedStr);
$(window).resize(function () {
historyGraph.update();
});
return historyGraph;
}
return null;
};
Page.prototype._initialize = function (locale) {
moment.locale(locale);
var updateRelativeDates = function () {
$('*[data-moment]').each(function () {
var $this = $(this);
var timestamp = $this.data('moment');
if (timestamp) {
var time = moment(timestamp, 'X');
$this.html(time.fromNow())
.attr('title', time.format('llll'))
.attr('data-container', 'body');
}
});
$('*[data-moment-title]').each(function () {
var $this = $(this);
var timestamp = $this.data('moment-title');
if (timestamp) {
var time = moment(timestamp, 'X');
$this.prop('title', time.format('llll'))
.attr('data-container', 'body');
}
});
$('*[data-moment-local]').each(function () {
var $this = $(this);
var timestamp = $this.data('moment-local');
if (timestamp) {
var time = moment(timestamp, 'X');
$this.html(time.format('l LTS'));
}
});
};
updateRelativeDates();
setInterval(updateRelativeDates, 30 * 1000);
$('*[title]').tooltip();
var self = this;
$('*[data-metric]').each(function () {
var name = $(this).data('metric');
self._metrics.addElement(name, this);
});
this._poller.addListener(function (metrics) {
for (var name in metrics) {
var elements = self._metrics.getElements(name);
for (var i = 0; i < elements.length; i++) {
var metric = metrics[name];
var metricClass = metric ? "metric-" + metric.style : "metric-null";
var highlighted = metric && metric.highlighted ? "highlighted" : null;
var value = metric ? metric.value : null;
$(elements[i])
.text(value)
.closest('.metric')
.removeClass()
.addClass(["metric", metricClass, highlighted].join(' '));
}
}
});
$(document).on('click', '*[data-ajax]', function (e) {
var $this = $(this);
var confirmText = $this.data('confirm');
if (!confirmText || confirm(confirmText)) {
$this.prop('disabled');
var loadingDelay = setTimeout(function() {
$this.button('loading');
}, 100);
$.post($this.data('ajax'), function() {
clearTimeout(loadingDelay);
window.location.reload();
});
}
e.preventDefault();
});
$(document).on('click', '.expander', function (e) {
var $expander = $(this),
$expandable = $expander.closest('tr').next().find('.expandable');
if (!$expandable.is(':visible')) {
$expander.text('Less details...');
}
$expandable.slideToggle(
150,
function() {
if (!$expandable.is(':visible')) {
$expander.text('More details...');
}
});
e.preventDefault();
});
$('.js-jobs-list').each(function () {
var container = this;
var selectRow = function(row, isSelected) {
var $checkbox = $('.js-jobs-list-checkbox', row);
if ($checkbox.length > 0) {
$checkbox.prop('checked', isSelected);
$(row).toggleClass('highlight', isSelected);
}
};
var toggleRowSelection = function(row) {
var $checkbox = $('.js-jobs-list-checkbox', row);
if ($checkbox.length > 0) {
var isSelected = $checkbox.is(':checked');
selectRow(row, !isSelected);
}
};
var setListState = function (state) {
$('.js-jobs-list-select-all', container)
.prop('checked', state === 'all-selected')
.prop('indeterminate', state === 'some-selected');
$('.js-jobs-list-command', container)
.prop('disabled', state === 'none-selected');
};
var updateListState = function() {
var selectedRows = $('.js-jobs-list-checkbox', container).map(function() {
return $(this).prop('checked');
}).get();
var state = 'none-selected';
if (selectedRows.length > 0) {
state = 'some-selected';
if ($.inArray(false, selectedRows) === -1) {
state = 'all-selected';
} else if ($.inArray(true, selectedRows) === -1) {
state = 'none-selected';
}
}
setListState(state);
};
$(this).on('click', '.js-jobs-list-checkbox', function(e) {
selectRow(
$(this).closest('.js-jobs-list-row').first(),
$(this).is(':checked'));
updateListState();
e.stopPropagation();
});
$(this).on('click', '.js-jobs-list-row', function (e) {
if ($(e.target).is('a')) return;
toggleRowSelection(this);
updateListState();
});
$(this).on('click', '.js-jobs-list-select-all', function() {
var selectRows = $(this).is(':checked');
$('.js-jobs-list-row', container).each(function() {
selectRow(this, selectRows);
});
updateListState();
});
$(this).on('click', '.js-jobs-list-command', function(e) {
var $this = $(this);
var confirmText = $this.data('confirm');
var jobs = $("input[name='jobs[]']:checked", container).map(function() {
return $(this).val();
}).get();
if (!confirmText || confirm(confirmText)) {
$this.prop('disabled');
var loadingDelay = setTimeout(function () {
$this.button('loading');
}, 100);
$.post($this.data('url'), { 'jobs[]': jobs }, function () {
clearTimeout(loadingDelay);
window.location.reload();
});
}
e.preventDefault();
});
updateListState();
});
};
return Page;
})();
})(window.Hangfire = window.Hangfire || {});
$(function () {
Hangfire.page = new Hangfire.Page(Hangfire.config);
});
/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){
return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Ya,Za,$a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)),
void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jb(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n});
This source diff could not be displayed because it is too large. You can view the blob instead.
//! moment.js
//! version : 2.2.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com
(function(a){function b(a,b){return function(c){return i(a.call(this,c),b)}}function c(a,b){return function(c){return this.lang().ordinal(a.call(this,c),b)}}function d(){}function e(a){g(this,a)}function f(a){var b=a.years||a.year||a.y||0,c=a.months||a.month||a.M||0,d=a.weeks||a.week||a.w||0,e=a.days||a.day||a.d||0,f=a.hours||a.hour||a.h||0,g=a.minutes||a.minute||a.m||0,h=a.seconds||a.second||a.s||0,i=a.milliseconds||a.millisecond||a.ms||0;this._input=a,this._milliseconds=+i+1e3*h+6e4*g+36e5*f,this._days=+e+7*d,this._months=+c+12*b,this._data={},this._bubble()}function g(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function h(a){return 0>a?Math.ceil(a):Math.floor(a)}function i(a,b){for(var c=a+"";c.length<b;)c="0"+c;return c}function j(a,b,c,d){var e,f,g=b._milliseconds,h=b._days,i=b._months;g&&a._d.setTime(+a._d+g*c),(h||i)&&(e=a.minute(),f=a.hour()),h&&a.date(a.date()+h*c),i&&a.month(a.month()+i*c),g&&!d&&L.updateOffset(a),(h||i)&&(a.minute(e),a.hour(f))}function k(a){return"[object Array]"===Object.prototype.toString.call(a)}function l(a,b){var c,d=Math.min(a.length,b.length),e=Math.abs(a.length-b.length),f=0;for(c=0;d>c;c++)~~a[c]!==~~b[c]&&f++;return f+e}function m(a){return a?ib[a]||a.toLowerCase().replace(/(.)s$/,"$1"):a}function n(a,b){return b.abbr=a,P[a]||(P[a]=new d),P[a].set(b),P[a]}function o(a){delete P[a]}function p(a){if(!a)return L.fn._lang;if(!P[a]&&Q)try{require("./lang/"+a)}catch(b){return L.fn._lang}return P[a]||L.fn._lang}function q(a){return a.match(/\[.*\]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function r(a){var b,c,d=a.match(T);for(b=0,c=d.length;c>b;b++)d[b]=mb[d[b]]?mb[d[b]]:q(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function s(a,b){return b=t(b,a.lang()),jb[b]||(jb[b]=r(b)),jb[b](a)}function t(a,b){function c(a){return b.longDateFormat(a)||a}for(var d=5;d--&&(U.lastIndex=0,U.test(a));)a=a.replace(U,c);return a}function u(a,b){switch(a){case"DDDD":return X;case"YYYY":return Y;case"YYYYY":return Z;case"S":case"SS":case"SSS":case"DDD":return W;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return $;case"a":case"A":return p(b._l)._meridiemParse;case"X":return bb;case"Z":case"ZZ":return _;case"T":return ab;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return V;default:return new RegExp(a.replace("\\",""))}}function v(a){var b=(_.exec(a)||[])[0],c=(b+"").match(fb)||["-",0,0],d=+(60*c[1])+~~c[2];return"+"===c[0]?-d:d}function w(a,b,c){var d,e=c._a;switch(a){case"M":case"MM":null!=b&&(e[1]=~~b-1);break;case"MMM":case"MMMM":d=p(c._l).monthsParse(b),null!=d?e[1]=d:c._isValid=!1;break;case"D":case"DD":null!=b&&(e[2]=~~b);break;case"DDD":case"DDDD":null!=b&&(e[1]=0,e[2]=~~b);break;case"YY":e[0]=~~b+(~~b>68?1900:2e3);break;case"YYYY":case"YYYYY":e[0]=~~b;break;case"a":case"A":c._isPm=p(c._l).isPM(b);break;case"H":case"HH":case"h":case"hh":e[3]=~~b;break;case"m":case"mm":e[4]=~~b;break;case"s":case"ss":e[5]=~~b;break;case"S":case"SS":case"SSS":e[6]=~~(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=v(b)}null==b&&(c._isValid=!1)}function x(a){var b,c,d,e=[];if(!a._d){for(d=z(a),b=0;3>b&&null==a._a[b];++b)a._a[b]=e[b]=d[b];for(;7>b;b++)a._a[b]=e[b]=null==a._a[b]?2===b?1:0:a._a[b];e[3]+=~~((a._tzm||0)/60),e[4]+=~~((a._tzm||0)%60),c=new Date(0),a._useUTC?(c.setUTCFullYear(e[0],e[1],e[2]),c.setUTCHours(e[3],e[4],e[5],e[6])):(c.setFullYear(e[0],e[1],e[2]),c.setHours(e[3],e[4],e[5],e[6])),a._d=c}}function y(a){var b=a._i;a._d||(a._a=[b.years||b.year||b.y,b.months||b.month||b.M,b.days||b.day||b.d,b.hours||b.hour||b.h,b.minutes||b.minute||b.m,b.seconds||b.second||b.s,b.milliseconds||b.millisecond||b.ms],x(a))}function z(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function A(a){var b,c,d,e=p(a._l),f=""+a._i;for(d=t(a._f,e).match(T),a._a=[],b=0;b<d.length;b++)c=(u(d[b],a).exec(f)||[])[0],c&&(f=f.slice(f.indexOf(c)+c.length)),mb[d[b]]&&w(d[b],c,a);f&&(a._il=f),a._isPm&&a._a[3]<12&&(a._a[3]+=12),a._isPm===!1&&12===a._a[3]&&(a._a[3]=0),x(a)}function B(a){var b,c,d,f,h,i=99;for(f=0;f<a._f.length;f++)b=g({},a),b._f=a._f[f],A(b),c=new e(b),h=l(b._a,c.toArray()),c._il&&(h+=c._il.length),i>h&&(i=h,d=c);g(a,d)}function C(a){var b,c=a._i,d=cb.exec(c);if(d){for(a._f="YYYY-MM-DD"+(d[2]||" "),b=0;4>b;b++)if(eb[b][1].exec(c)){a._f+=eb[b][0];break}_.exec(c)&&(a._f+=" Z"),A(a)}else a._d=new Date(c)}function D(b){var c=b._i,d=R.exec(c);c===a?b._d=new Date:d?b._d=new Date(+d[1]):"string"==typeof c?C(b):k(c)?(b._a=c.slice(0),x(b)):c instanceof Date?b._d=new Date(+c):"object"==typeof c?y(b):b._d=new Date(c)}function E(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function F(a,b,c){var d=O(Math.abs(a)/1e3),e=O(d/60),f=O(e/60),g=O(f/24),h=O(g/365),i=45>d&&["s",d]||1===e&&["m"]||45>e&&["mm",e]||1===f&&["h"]||22>f&&["hh",f]||1===g&&["d"]||25>=g&&["dd",g]||45>=g&&["M"]||345>g&&["MM",O(g/30)]||1===h&&["y"]||["yy",h];return i[2]=b,i[3]=a>0,i[4]=c,E.apply({},i)}function G(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=L(a).add("d",f),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function H(a){var b=a._i,c=a._f;return null===b||""===b?null:("string"==typeof b&&(a._i=b=p().preparse(b)),L.isMoment(b)?(a=g({},b),a._d=new Date(+b._d)):c?k(c)?B(a):A(a):D(a),new e(a))}function I(a,b){L.fn[a]=L.fn[a+"s"]=function(a){var c=this._isUTC?"UTC":"";return null!=a?(this._d["set"+c+b](a),L.updateOffset(this),this):this._d["get"+c+b]()}}function J(a){L.duration.fn[a]=function(){return this._data[a]}}function K(a,b){L.duration.fn["as"+a]=function(){return+this/b}}for(var L,M,N="2.2.1",O=Math.round,P={},Q="undefined"!=typeof module&&module.exports,R=/^\/?Date\((\-?\d+)/i,S=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,T=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,U=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,V=/\d\d?/,W=/\d{1,3}/,X=/\d{3}/,Y=/\d{1,4}/,Z=/[+\-]?\d{1,6}/,$=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,_=/Z|[\+\-]\d\d:?\d\d/i,ab=/T/i,bb=/[\+\-]?\d+(\.\d{1,3})?/,cb=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,db="YYYY-MM-DDTHH:mm:ssZ",eb=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],fb=/([\+\-]|\d\d)/gi,gb="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),hb={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ib={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",W:"isoweek",M:"month",y:"year"},jb={},kb="DDD w W M D d".split(" "),lb="M D H h m s w W".split(" "),mb={M:function(){return this.month()+1},MMM:function(a){return this.lang().monthsShort(this,a)},MMMM:function(a){return this.lang().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.lang().weekdaysMin(this,a)},ddd:function(a){return this.lang().weekdaysShort(this,a)},dddd:function(a){return this.lang().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return i(this.year()%100,2)},YYYY:function(){return i(this.year(),4)},YYYYY:function(){return i(this.year(),5)},gg:function(){return i(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return i(this.weekYear(),5)},GG:function(){return i(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return i(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return i(~~(this.milliseconds()/10),2)},SSS:function(){return i(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+i(~~(a/60),2)+":"+i(~~a%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+i(~~(10*a/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};kb.length;)M=kb.pop(),mb[M+"o"]=c(mb[M],M);for(;lb.length;)M=lb.pop(),mb[M+M]=b(mb[M],2);for(mb.DDDD=b(mb.DDD,3),g(d.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=L.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=L([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return G(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}}),L=function(a,b,c){return H({_i:a,_f:b,_l:c,_isUTC:!1})},L.utc=function(a,b,c){return H({_useUTC:!0,_isUTC:!0,_l:c,_i:a,_f:b}).utc()},L.unix=function(a){return L(1e3*a)},L.duration=function(a,b){var c,d,e=L.isDuration(a),g="number"==typeof a,h=e?a._input:g?{}:a,i=S.exec(a);return g?b?h[b]=a:h.milliseconds=a:i&&(c="-"===i[1]?-1:1,h={y:0,d:~~i[2]*c,h:~~i[3]*c,m:~~i[4]*c,s:~~i[5]*c,ms:~~i[6]*c}),d=new f(h),e&&a.hasOwnProperty("_lang")&&(d._lang=a._lang),d},L.version=N,L.defaultFormat=db,L.updateOffset=function(){},L.lang=function(a,b){return a?(a=a.toLowerCase(),a=a.replace("_","-"),b?n(a,b):null===b?(o(a),a="en"):P[a]||p(a),L.duration.fn._lang=L.fn._lang=p(a),void 0):L.fn._lang._abbr},L.langData=function(a){return a&&a._lang&&a._lang._abbr&&(a=a._lang._abbr),p(a)},L.isMoment=function(a){return a instanceof e},L.isDuration=function(a){return a instanceof f},g(L.fn=e.prototype,{clone:function(){return L(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return s(L(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!l(this._a,(this._isUTC?L.utc(this._a):L(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},invalidAt:function(){var a,b=this._a,c=(this._isUTC?L.utc(this._a):L(this._a)).toArray();for(a=6;a>=0&&b[a]===c[a];--a);return a},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(a){var b=s(this,a||L.defaultFormat);return this.lang().postformat(b)},add:function(a,b){var c;return c="string"==typeof a?L.duration(+b,a):L.duration(a,b),j(this,c,1),this},subtract:function(a,b){var c;return c="string"==typeof a?L.duration(+b,a):L.duration(a,b),j(this,c,-1),this},diff:function(a,b,c){var d,e,f=this._isUTC?L(a).zone(this._offset||0):L(a).local(),g=6e4*(this.zone()-f.zone());return b=m(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-L(this).startOf("month")-(f-L(f).startOf("month")))/d,e-=6e4*(this.zone()-L(this).startOf("month").zone()-(f.zone()-L(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:h(e)},from:function(a,b){return L.duration(this.diff(a)).lang(this.lang()._abbr).humanize(!b)},fromNow:function(a){return this.from(L(),a)},calendar:function(){var a=this.diff(L().zone(this.zone()).startOf("day"),"days",!0),b=-6>a?"sameElse":-1>a?"lastWeek":0>a?"lastDay":1>a?"sameDay":2>a?"nextDay":7>a?"nextWeek":"sameElse";return this.format(this.lang().calendar(b,this))},isLeapYear:function(){var a=this.year();return 0===a%4&&0!==a%100||0===a%400},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?"string"==typeof a&&(a=this.lang().weekdaysParse(a),"number"!=typeof a)?this:this.add({d:a-b}):b},month:function(a){var b,c=this._isUTC?"UTC":"";return null!=a?"string"==typeof a&&(a=this.lang().monthsParse(a),"number"!=typeof a)?this:(b=this.date(),this.date(1),this._d["set"+c+"Month"](a),this.date(Math.min(b,this.daysInMonth())),L.updateOffset(this),this):this._d["get"+c+"Month"]()},startOf:function(a){switch(a=m(a)){case"year":this.month(0);case"month":this.date(1);case"week":case"isoweek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a?this.weekday(0):"isoweek"===a&&this.isoWeekday(1),this},endOf:function(a){return a=m(a),this.startOf(a).add("isoweek"===a?"week":a,1).subtract("ms",1)},isAfter:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)>+L(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+L(a).startOf(b)},isSame:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)===+L(a).startOf(b)},min:function(a){return a=L.apply(null,arguments),this>a?this:a},max:function(a){return a=L.apply(null,arguments),a>this?this:a},zone:function(a){var b=this._offset||0;return null==a?this._isUTC?b:this._d.getTimezoneOffset():("string"==typeof a&&(a=v(a)),Math.abs(a)<16&&(a=60*a),this._offset=a,this._isUTC=!0,b!==a&&j(this,L.duration(b-a,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},hasAlignedHourOffset:function(a){return a=a?L(a).zone():0,0===(this.zone()-a)%60},daysInMonth:function(){return L.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(a){var b=O((L(this).startOf("day")-L(this).startOf("year"))/864e5)+1;return null==a?b:this.add("d",a-b)},weekYear:function(a){var b=G(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==a?b:this.add("y",a-b)},isoWeekYear:function(a){var b=G(this,1,4).year;return null==a?b:this.add("y",a-b)},week:function(a){var b=this.lang().week(this);return null==a?b:this.add("d",7*(a-b))},isoWeek:function(a){var b=G(this,1,4).week;return null==a?b:this.add("d",7*(a-b))},weekday:function(a){var b=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==a?b:this.add("d",a-b)},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},get:function(a){return a=m(a),this[a.toLowerCase()]()},set:function(a,b){a=m(a),this[a.toLowerCase()](b)},lang:function(b){return b===a?this._lang:(this._lang=p(b),this)}}),M=0;M<gb.length;M++)I(gb[M].toLowerCase().replace(/s$/,""),gb[M]);I("year","FullYear"),L.fn.days=L.fn.day,L.fn.months=L.fn.month,L.fn.weeks=L.fn.week,L.fn.isoWeeks=L.fn.isoWeek,L.fn.toJSON=L.fn.toISOString,g(L.duration.fn=f.prototype,{_bubble:function(){var a,b,c,d,e=this._milliseconds,f=this._days,g=this._months,i=this._data;i.milliseconds=e%1e3,a=h(e/1e3),i.seconds=a%60,b=h(a/60),i.minutes=b%60,c=h(b/60),i.hours=c%24,f+=h(c/24),i.days=f%30,g+=h(f/30),i.months=g%12,d=h(g/12),i.years=d},weeks:function(){return h(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+2592e6*(this._months%12)+31536e6*~~(this._months/12)},humanize:function(a){var b=+this,c=F(b,!a,this.lang());return a&&(c=this.lang().pastFuture(b,c)),this.lang().postformat(c)},add:function(a,b){var c=L.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=L.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=m(a),this[a.toLowerCase()+"s"]()},as:function(a){return a=m(a),this["as"+a.charAt(0).toUpperCase()+a.slice(1)+"s"]()},lang:L.fn.lang});for(M in hb)hb.hasOwnProperty(M)&&(K(M,hb[M]),J(M.toLowerCase()));K("Weeks",6048e5),L.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},L.lang("en",{ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Q&&(module.exports=L),"undefined"==typeof ender&&(this.moment=L),"function"==typeof define&&define.amd&&define("moment",[],function(){return L})}).call(this);
\ No newline at end of file
(function(root,factory){if(typeof define==="function"&&define.amd){define(["d3"],function(d3){return root.Rickshaw=factory(d3)})}else if(typeof exports==="object"){module.exports=factory(require("d3"))}else{root.Rickshaw=factory(d3)}})(this,function(d3){var Rickshaw={namespace:function(namespace,obj){var parts=namespace.split(".");var parent=Rickshaw;for(var i=1,length=parts.length;i<length;i++){var currentPart=parts[i];parent[currentPart]=parent[currentPart]||{};parent=parent[currentPart]}return parent},keys:function(obj){var keys=[];for(var key in obj)keys.push(key);return keys},extend:function(destination,source){for(var property in source){destination[property]=source[property]}return destination},clone:function(obj){return JSON.parse(JSON.stringify(obj))}};(function(globalContext){var _toString=Object.prototype.toString,NULL_TYPE="Null",UNDEFINED_TYPE="Undefined",BOOLEAN_TYPE="Boolean",NUMBER_TYPE="Number",STRING_TYPE="String",OBJECT_TYPE="Object",FUNCTION_CLASS="[object Function]";function isFunction(object){return _toString.call(object)===FUNCTION_CLASS}function extend(destination,source){for(var property in source)if(source.hasOwnProperty(property))destination[property]=source[property];return destination}function keys(object){if(Type(object)!==OBJECT_TYPE){throw new TypeError}var results=[];for(var property in object){if(object.hasOwnProperty(property)){results.push(property)}}return results}function Type(o){switch(o){case null:return NULL_TYPE;case void 0:return UNDEFINED_TYPE}var type=typeof o;switch(type){case"boolean":return BOOLEAN_TYPE;case"number":return NUMBER_TYPE;case"string":return STRING_TYPE}return OBJECT_TYPE}function isUndefined(object){return typeof object==="undefined"}var slice=Array.prototype.slice;function argumentNames(fn){var names=fn.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,"").replace(/\s+/g,"").split(",");return names.length==1&&!names[0]?[]:names}function wrap(fn,wrapper){var __method=fn;return function(){var a=update([bind(__method,this)],arguments);return wrapper.apply(this,a)}}function update(array,args){var arrayLength=array.length,length=args.length;while(length--)array[arrayLength+length]=args[length];return array}function merge(array,args){array=slice.call(array,0);return update(array,args)}function bind(fn,context){if(arguments.length<2&&isUndefined(arguments[0]))return this;var __method=fn,args=slice.call(arguments,2);return function(){var a=merge(args,arguments);return __method.apply(context,a)}}var emptyFunction=function(){};var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=[].slice.apply(arguments);if(isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;try{parent.subclasses.push(klass)}catch(e){}}for(var i=0,length=properties.length;i<length;i++)klass.addMethods(properties[i]);if(!klass.prototype.initialize)klass.prototype.initialize=emptyFunction;klass.prototype.constructor=klass;return klass}function addMethods(source){var ancestor=this.superclass&&this.superclass.prototype,properties=keys(source);if(IS_DONTENUM_BUGGY){if(source.toString!=Object.prototype.toString)properties.push("toString");if(source.valueOf!=Object.prototype.valueOf)properties.push("valueOf")}for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&isFunction(value)&&argumentNames(value)[0]=="$super"){var method=value;value=wrap(function(m){return function(){return ancestor[m].apply(this,arguments)}}(property),method);value.valueOf=bind(method.valueOf,method);value.toString=bind(method.toString,method)}this.prototype[property]=value}return this}return{create:create,Methods:{addMethods:addMethods}}}();if(globalContext.exports){globalContext.exports.Class=Class}else{globalContext.Class=Class}})(Rickshaw);Rickshaw.namespace("Rickshaw.Compat.ClassList");Rickshaw.Compat.ClassList=function(){if(typeof document!=="undefined"&&!("classList"in document.createElement("a"))){(function(view){"use strict";var classListProp="classList",protoProp="prototype",elemCtrProto=(view.HTMLElement||view.Element)[protoProp],objCtr=Object,strTrim=String[protoProp].trim||function(){return this.replace(/^\s+|\s+$/g,"")},arrIndexOf=Array[protoProp].indexOf||function(item){var i=0,len=this.length;for(;i<len;i++){if(i in this&&this[i]===item){return i}}return-1},DOMEx=function(type,message){this.name=type;this.code=DOMException[type];this.message=message},checkTokenAndGetIndex=function(classList,token){if(token===""){throw new DOMEx("SYNTAX_ERR","An invalid or illegal string was specified")}if(/\s/.test(token)){throw new DOMEx("INVALID_CHARACTER_ERR","String contains an invalid character")}return arrIndexOf.call(classList,token)},ClassList=function(elem){var trimmedClasses=strTrim.call(elem.className),classes=trimmedClasses?trimmedClasses.split(/\s+/):[],i=0,len=classes.length;for(;i<len;i++){this.push(classes[i])}this._updateClassName=function(){elem.className=this.toString()}},classListProto=ClassList[protoProp]=[],classListGetter=function(){return new ClassList(this)};DOMEx[protoProp]=Error[protoProp];classListProto.item=function(i){return this[i]||null};classListProto.contains=function(token){token+="";return checkTokenAndGetIndex(this,token)!==-1};classListProto.add=function(token){token+="";if(checkTokenAndGetIndex(this,token)===-1){this.push(token);this._updateClassName()}};classListProto.remove=function(token){token+="";var index=checkTokenAndGetIndex(this,token);if(index!==-1){this.splice(index,1);this._updateClassName()}};classListProto.toggle=function(token){token+="";if(checkTokenAndGetIndex(this,token)===-1){this.add(token)}else{this.remove(token)}};classListProto.toString=function(){return this.join(" ")};if(objCtr.defineProperty){var classListPropDesc={get:classListGetter,enumerable:true,configurable:true};try{objCtr.defineProperty(elemCtrProto,classListProp,classListPropDesc)}catch(ex){if(ex.number===-2146823252){classListPropDesc.enumerable=false;objCtr.defineProperty(elemCtrProto,classListProp,classListPropDesc)}}}else if(objCtr[protoProp].__defineGetter__){elemCtrProto.__defineGetter__(classListProp,classListGetter)}})(window)}};if(typeof RICKSHAW_NO_COMPAT!=="undefined"&&!RICKSHAW_NO_COMPAT||typeof RICKSHAW_NO_COMPAT==="undefined"){new Rickshaw.Compat.ClassList}Rickshaw.namespace("Rickshaw.Graph");Rickshaw.Graph=function(args){var self=this;this.initialize=function(args){if(!args.element)throw"Rickshaw.Graph needs a reference to an element";if(args.element.nodeType!==1)throw"Rickshaw.Graph element was defined but not an HTML element";this.element=args.element;this.series=args.series;this.window={};this.updateCallbacks=[];this.configureCallbacks=[];this.defaults={interpolation:"cardinal",offset:"zero",min:undefined,max:undefined,preserve:false,xScale:undefined,yScale:undefined,stack:true};this._loadRenderers();this.configure(args);this.validateSeries(args.series);this.series.active=function(){return self.series.filter(function(s){return!s.disabled})};this.setSize({width:args.width,height:args.height});this.element.classList.add("rickshaw_graph");this.vis=d3.select(this.element).append("svg:svg").attr("width",this.width).attr("height",this.height);this.discoverRange()};this._loadRenderers=function(){for(var name in Rickshaw.Graph.Renderer){if(!name||!Rickshaw.Graph.Renderer.hasOwnProperty(name))continue;var r=Rickshaw.Graph.Renderer[name];if(!r||!r.prototype||!r.prototype.render)continue;self.registerRenderer(new r({graph:self}))}};this.validateSeries=function(series){if(!Array.isArray(series)&&!(series instanceof Rickshaw.Series)){var seriesSignature=Object.prototype.toString.apply(series);throw"series is not an array: "+seriesSignature}var pointsCount;series.forEach(function(s){if(!(s instanceof Object)){throw"series element is not an object: "+s}if(!s.data){throw"series has no data: "+JSON.stringify(s)}if(!Array.isArray(s.data)){throw"series data is not an array: "+JSON.stringify(s.data)}if(s.data.length>0){var x=s.data[0].x;var y=s.data[0].y;if(typeof x!="number"||typeof y!="number"&&y!==null){throw"x and y properties of points should be numbers instead of "+typeof x+" and "+typeof y}}if(s.data.length>=3){if(s.data[2].x<s.data[1].x||s.data[1].x<s.data[0].x||s.data[s.data.length-1].x<s.data[0].x){throw"series data needs to be sorted on x values for series name: "+s.name}}},this)};this.dataDomain=function(){var data=this.series.map(function(s){return s.data});var min=d3.min(data.map(function(d){return d[0].x}));var max=d3.max(data.map(function(d){return d[d.length-1].x}));return[min,max]};this.discoverRange=function(){var domain=this.renderer.domain();this.x=(this.xScale||d3.scale.linear()).copy().domain(domain.x).range([0,this.width]);this.y=(this.yScale||d3.scale.linear()).copy().domain(domain.y).range([this.height,0]);this.x.magnitude=d3.scale.linear().domain([domain.x[0]-domain.x[0],domain.x[1]-domain.x[0]]).range([0,this.width]);this.y.magnitude=d3.scale.linear().domain([domain.y[0]-domain.y[0],domain.y[1]-domain.y[0]]).range([0,this.height])};this.render=function(){var stackedData=this.stackData();this.discoverRange();this.renderer.render();this.updateCallbacks.forEach(function(callback){callback()})};this.update=this.render;this.stackData=function(){var data=this.series.active().map(function(d){return d.data}).map(function(d){return d.filter(function(d){return this._slice(d)},this)},this);var preserve=this.preserve;if(!preserve){this.series.forEach(function(series){if(series.scale){preserve=true}})}data=preserve?Rickshaw.clone(data):data;this.series.active().forEach(function(series,index){if(series.scale){var seriesData=data[index];if(seriesData){seriesData.forEach(function(d){d.y=series.scale(d.y)})}}});this.stackData.hooks.data.forEach(function(entry){data=entry.f.apply(self,[data])});var stackedData;if(!this.renderer.unstack){this._validateStackable();var layout=d3.layout.stack();layout.offset(self.offset);stackedData=layout(data)}stackedData=stackedData||data;if(this.renderer.unstack){stackedData.forEach(function(seriesData){seriesData.forEach(function(d){d.y0=d.y0===undefined?0:d.y0})})}this.stackData.hooks.after.forEach(function(entry){stackedData=entry.f.apply(self,[data])});var i=0;this.series.forEach(function(series){if(series.disabled)return;series.stack=stackedData[i++]});this.stackedData=stackedData;return stackedData};this._validateStackable=function(){var series=this.series;var pointsCount;series.forEach(function(s){pointsCount=pointsCount||s.data.length;if(pointsCount&&s.data.length!=pointsCount){throw"stacked series cannot have differing numbers of points: "+pointsCount+" vs "+s.data.length+"; see Rickshaw.Series.fill()"}},this)};this.stackData.hooks={data:[],after:[]};this._slice=function(d){if(this.window.xMin||this.window.xMax){var isInRange=true;if(this.window.xMin&&d.x<this.window.xMin)isInRange=false;if(this.window.xMax&&d.x>this.window.xMax)isInRange=false;return isInRange}return true};this.onUpdate=function(callback){this.updateCallbacks.push(callback)};this.onConfigure=function(callback){this.configureCallbacks.push(callback)};this.registerRenderer=function(renderer){this._renderers=this._renderers||{};this._renderers[renderer.name]=renderer};this.configure=function(args){this.config=this.config||{};if(args.width||args.height){this.setSize(args)}Rickshaw.keys(this.defaults).forEach(function(k){this.config[k]=k in args?args[k]:k in this?this[k]:this.defaults[k]},this);Rickshaw.keys(this.config).forEach(function(k){this[k]=this.config[k]},this);if("stack"in args)args.unstack=!args.stack;var renderer=args.renderer||this.renderer&&this.renderer.name||"stack";this.setRenderer(renderer,args);this.configureCallbacks.forEach(function(callback){callback(args)})};this.setRenderer=function(r,args){if(typeof r=="function"){this.renderer=new r({graph:self});this.registerRenderer(this.renderer)}else{if(!this._renderers[r]){throw"couldn't find renderer "+r}this.renderer=this._renderers[r]}if(typeof args=="object"){this.renderer.configure(args)}};this.setSize=function(args){args=args||{};if(typeof window!==undefined){var style=window.getComputedStyle(this.element,null);var elementWidth=parseInt(style.getPropertyValue("width"),10);var elementHeight=parseInt(style.getPropertyValue("height"),10)}this.width=args.width||elementWidth||400;this.height=args.height||elementHeight||250;this.vis&&this.vis.attr("width",this.width).attr("height",this.height)};this.initialize(args)};Rickshaw.namespace("Rickshaw.Fixtures.Color");Rickshaw.Fixtures.Color=function(){this.schemes={};this.schemes.spectrum14=["#ecb796","#dc8f70","#b2a470","#92875a","#716c49","#d2ed82","#bbe468","#a1d05d","#e7cbe6","#d8aad6","#a888c2","#9dc2d3","#649eb9","#387aa3"].reverse();this.schemes.spectrum2000=["#57306f","#514c76","#646583","#738394","#6b9c7d","#84b665","#a7ca50","#bfe746","#e2f528","#fff726","#ecdd00","#d4b11d","#de8800","#de4800","#c91515","#9a0000","#7b0429","#580839","#31082b"];this.schemes.spectrum2001=["#2f243f","#3c2c55","#4a3768","#565270","#6b6b7c","#72957f","#86ad6e","#a1bc5e","#b8d954","#d3e04e","#ccad2a","#cc8412","#c1521d","#ad3821","#8a1010","#681717","#531e1e","#3d1818","#320a1b"];this.schemes.classic9=["#423d4f","#4a6860","#848f39","#a2b73c","#ddcb53","#c5a32f","#7d5836","#963b20","#7c2626","#491d37","#2f254a"].reverse();this.schemes.httpStatus={503:"#ea5029",502:"#d23f14",500:"#bf3613",410:"#efacea",409:"#e291dc",403:"#f457e8",408:"#e121d2",401:"#b92dae",405:"#f47ceb",404:"#a82a9f",400:"#b263c6",301:"#6fa024",302:"#87c32b",307:"#a0d84c",304:"#28b55c",200:"#1a4f74",206:"#27839f",201:"#52adc9",202:"#7c979f",203:"#a5b8bd",204:"#c1cdd1"};this.schemes.colorwheel=["#b5b6a9","#858772","#785f43","#96557e","#4682b4","#65b9ac","#73c03a","#cb513a"].reverse();this.schemes.cool=["#5e9d2f","#73c03a","#4682b4","#7bc3b8","#a9884e","#c1b266","#a47493","#c09fb5"];this.schemes.munin=["#00cc00","#0066b3","#ff8000","#ffcc00","#330099","#990099","#ccff00","#ff0000","#808080","#008f00","#00487d","#b35a00","#b38f00","#6b006b","#8fb300","#b30000","#bebebe","#80ff80","#80c9ff","#ffc080","#ffe680","#aa80ff","#ee00cc","#ff8080","#666600","#ffbfff","#00ffcc","#cc6699","#999900"]};Rickshaw.namespace("Rickshaw.Fixtures.RandomData");Rickshaw.Fixtures.RandomData=function(timeInterval){var addData;timeInterval=timeInterval||1;var lastRandomValue=200;var timeBase=Math.floor((new Date).getTime()/1e3);this.addData=function(data){var randomValue=Math.random()*100+15+lastRandomValue;var index=data[0].length;var counter=1;data.forEach(function(series){var randomVariance=Math.random()*20;var v=randomValue/25+counter++ +(Math.cos(index*counter*11/960)+2)*15+(Math.cos(index/7)+2)*7+(Math.cos(index/17)+2)*1;series.push({x:index*timeInterval+timeBase,y:v+randomVariance})});lastRandomValue=randomValue*.85};this.removeData=function(data){data.forEach(function(series){series.shift()});timeBase+=timeInterval}};Rickshaw.namespace("Rickshaw.Fixtures.Time");Rickshaw.Fixtures.Time=function(){var self=this;this.months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];this.units=[{name:"decade",seconds:86400*365.25*10,formatter:function(d){return parseInt(d.getUTCFullYear()/10,10)*10}},{name:"year",seconds:86400*365.25,formatter:function(d){return d.getUTCFullYear()}},{name:"month",seconds:86400*30.5,formatter:function(d){return self.months[d.getUTCMonth()]}},{name:"week",seconds:86400*7,formatter:function(d){return self.formatDate(d)}},{name:"day",seconds:86400,formatter:function(d){return d.getUTCDate()}},{name:"6 hour",seconds:3600*6,formatter:function(d){return self.formatTime(d)}},{name:"hour",seconds:3600,formatter:function(d){return self.formatTime(d)}},{name:"15 minute",seconds:60*15,formatter:function(d){return self.formatTime(d)}},{name:"minute",seconds:60,formatter:function(d){return d.getUTCMinutes()}},{name:"15 second",seconds:15,formatter:function(d){return d.getUTCSeconds()+"s"}},{name:"second",seconds:1,formatter:function(d){return d.getUTCSeconds()+"s"}},{name:"decisecond",seconds:1/10,formatter:function(d){return d.getUTCMilliseconds()+"ms"}},{name:"centisecond",seconds:1/100,formatter:function(d){return d.getUTCMilliseconds()+"ms"}}];this.unit=function(unitName){return this.units.filter(function(unit){return unitName==unit.name}).shift()};this.formatDate=function(d){return d3.time.format("%b %e")(d)};this.formatTime=function(d){return d.toUTCString().match(/(\d+:\d+):/)[1]};this.ceil=function(time,unit){var date,floor,year;if(unit.name=="month"){date=new Date(time*1e3);floor=Date.UTC(date.getUTCFullYear(),date.getUTCMonth())/1e3;if(floor==time)return time;year=date.getUTCFullYear();var month=date.getUTCMonth();if(month==11){month=0;year=year+1}else{month+=1}return Date.UTC(year,month)/1e3}if(unit.name=="year"){date=new Date(time*1e3);floor=Date.UTC(date.getUTCFullYear(),0)/1e3;if(floor==time)return time;year=date.getUTCFullYear()+1;return Date.UTC(year,0)/1e3}return Math.ceil(time/unit.seconds)*unit.seconds}};Rickshaw.namespace("Rickshaw.Fixtures.Time.Local");Rickshaw.Fixtures.Time.Local=function(){var self=this;this.months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];this.units=[{name:"decade",seconds:86400*365.25*10,formatter:function(d){return parseInt(d.getFullYear()/10,10)*10}},{name:"year",seconds:86400*365.25,formatter:function(d){return d.getFullYear()}},{name:"month",seconds:86400*30.5,formatter:function(d){return self.months[d.getMonth()]}},{name:"week",seconds:86400*7,formatter:function(d){return self.formatDate(d)}},{name:"day",seconds:86400,formatter:function(d){return d.getDate()}},{name:"6 hour",seconds:3600*6,formatter:function(d){return self.formatTime(d)}},{name:"hour",seconds:3600,formatter:function(d){return self.formatTime(d)}},{name:"15 minute",seconds:60*15,formatter:function(d){return self.formatTime(d)}},{name:"minute",seconds:60,formatter:function(d){return d.getMinutes()}},{name:"15 second",seconds:15,formatter:function(d){return d.getSeconds()+"s"}},{name:"second",seconds:1,formatter:function(d){return d.getSeconds()+"s"}},{name:"decisecond",seconds:1/10,formatter:function(d){return d.getMilliseconds()+"ms"}},{name:"centisecond",seconds:1/100,formatter:function(d){return d.getMilliseconds()+"ms"}}];this.unit=function(unitName){return this.units.filter(function(unit){return unitName==unit.name}).shift()};this.formatDate=function(d){return d3.time.format("%b %e")(d)};this.formatTime=function(d){return d.toString().match(/(\d+:\d+):/)[1]};this.ceil=function(time,unit){var date,floor,year;if(unit.name=="day"){var nearFuture=new Date((time+unit.seconds-1)*1e3);var rounded=new Date(0);rounded.setMilliseconds(0);rounded.setSeconds(0);rounded.setMinutes(0);rounded.setHours(0);rounded.setDate(nearFuture.getDate());rounded.setMonth(nearFuture.getMonth());rounded.setFullYear(nearFuture.getFullYear());return rounded.getTime()/1e3}if(unit.name=="month"){date=new Date(time*1e3);floor=new Date(date.getFullYear(),date.getMonth()).getTime()/1e3;if(floor==time)return time;year=date.getFullYear();var month=date.getMonth();if(month==11){month=0;year=year+1}else{month+=1}return new Date(year,month).getTime()/1e3}if(unit.name=="year"){date=new Date(time*1e3);floor=new Date(date.getUTCFullYear(),0).getTime()/1e3;if(floor==time)return time;year=date.getFullYear()+1;return new Date(year,0).getTime()/1e3}return Math.ceil(time/unit.seconds)*unit.seconds}};Rickshaw.namespace("Rickshaw.Fixtures.Number");Rickshaw.Fixtures.Number.formatKMBT=function(y){var abs_y=Math.abs(y);if(abs_y>=1e12){return y/1e12+"T"}else if(abs_y>=1e9){return y/1e9+"B"}else if(abs_y>=1e6){return y/1e6+"M"}else if(abs_y>=1e3){return y/1e3+"K"}else if(abs_y<1&&y>0){return y.toFixed(2)}else if(abs_y===0){return""}else{return y}};Rickshaw.Fixtures.Number.formatBase1024KMGTP=function(y){var abs_y=Math.abs(y);if(abs_y>=0x4000000000000){return y/0x4000000000000+"P"}else if(abs_y>=1099511627776){return y/1099511627776+"T"}else if(abs_y>=1073741824){return y/1073741824+"G"}else if(abs_y>=1048576){return y/1048576+"M"}else if(abs_y>=1024){return y/1024+"K"}else if(abs_y<1&&y>0){return y.toFixed(2)}else if(abs_y===0){return""}else{return y}};Rickshaw.namespace("Rickshaw.Color.Palette");Rickshaw.Color.Palette=function(args){var color=new Rickshaw.Fixtures.Color;args=args||{};this.schemes={};this.scheme=color.schemes[args.scheme]||args.scheme||color.schemes.colorwheel;this.runningIndex=0;this.generatorIndex=0;if(args.interpolatedStopCount){var schemeCount=this.scheme.length-1;var i,j,scheme=[];for(i=0;i<schemeCount;i++){scheme.push(this.scheme[i]);var generator=d3.interpolateHsl(this.scheme[i],this.scheme[i+1]);for(j=1;j<args.interpolatedStopCount;j++){scheme.push(generator(1/args.interpolatedStopCount*j))}}scheme.push(this.scheme[this.scheme.length-1]);this.scheme=scheme}this.rotateCount=this.scheme.length;this.color=function(key){return this.scheme[key]||this.scheme[this.runningIndex++]||this.interpolateColor()||"#808080"};this.interpolateColor=function(){if(!Array.isArray(this.scheme))return;var color;if(this.generatorIndex==this.rotateCount*2-1){color=d3.interpolateHsl(this.scheme[this.generatorIndex],this.scheme[0])(.5);this.generatorIndex=0;this.rotateCount*=2}else{color=d3.interpolateHsl(this.scheme[this.generatorIndex],this.scheme[this.generatorIndex+1])(.5);this.generatorIndex++}this.scheme.push(color);return color}};Rickshaw.namespace("Rickshaw.Graph.Ajax");Rickshaw.Graph.Ajax=Rickshaw.Class.create({initialize:function(args){this.dataURL=args.dataURL;this.onData=args.onData||function(d){return d};this.onComplete=args.onComplete||function(){};this.onError=args.onError||function(){};this.args=args;this.request()},request:function(){jQuery.ajax({url:this.dataURL,dataType:"json",success:this.success.bind(this),error:this.error.bind(this)})},error:function(){console.log("error loading dataURL: "+this.dataURL);this.onError(this)},success:function(data,status){data=this.onData(data);this.args.series=this._splice({data:data,series:this.args.series});this.graph=this.graph||new Rickshaw.Graph(this.args);this.graph.render();this.onComplete(this)},_splice:function(args){var data=args.data;var series=args.series;if(!args.series)return data;series.forEach(function(s){var seriesKey=s.key||s.name;if(!seriesKey)throw"series needs a key or a name";data.forEach(function(d){var dataKey=d.key||d.name;if(!dataKey)throw"data needs a key or a name";if(seriesKey==dataKey){var properties=["color","name","data"];properties.forEach(function(p){if(d[p])s[p]=d[p]})}})});return series}});Rickshaw.namespace("Rickshaw.Graph.Annotate");Rickshaw.Graph.Annotate=function(args){var graph=this.graph=args.graph;this.elements={timeline:args.element};var self=this;this.data={};this.elements.timeline.classList.add("rickshaw_annotation_timeline");this.add=function(time,content,end_time){self.data[time]=self.data[time]||{boxes:[]};self.data[time].boxes.push({content:content,end:end_time})};this.update=function(){Rickshaw.keys(self.data).forEach(function(time){var annotation=self.data[time];var left=self.graph.x(time);if(left<0||left>self.graph.x.range()[1]){if(annotation.element){annotation.line.classList.add("offscreen");annotation.element.style.display="none"}annotation.boxes.forEach(function(box){if(box.rangeElement)box.rangeElement.classList.add("offscreen")});return}if(!annotation.element){var element=annotation.element=document.createElement("div");element.classList.add("annotation");this.elements.timeline.appendChild(element);element.addEventListener("click",function(e){element.classList.toggle("active");annotation.line.classList.toggle("active");annotation.boxes.forEach(function(box){if(box.rangeElement)box.rangeElement.classList.toggle("active")})},false)}annotation.element.style.left=left+"px";annotation.element.style.display="block";annotation.boxes.forEach(function(box){var element=box.element;if(!element){element=box.element=document.createElement("div");element.classList.add("content");element.innerHTML=box.content;annotation.element.appendChild(element);annotation.line=document.createElement("div");annotation.line.classList.add("annotation_line");self.graph.element.appendChild(annotation.line);if(box.end){box.rangeElement=document.createElement("div");box.rangeElement.classList.add("annotation_range");self.graph.element.appendChild(box.rangeElement)}}if(box.end){var annotationRangeStart=left;var annotationRangeEnd=Math.min(self.graph.x(box.end),self.graph.x.range()[1]);if(annotationRangeStart>annotationRangeEnd){annotationRangeEnd=left;annotationRangeStart=Math.max(self.graph.x(box.end),self.graph.x.range()[0])}var annotationRangeWidth=annotationRangeEnd-annotationRangeStart;box.rangeElement.style.left=annotationRangeStart+"px";box.rangeElement.style.width=annotationRangeWidth+"px";box.rangeElement.classList.remove("offscreen")}annotation.line.classList.remove("offscreen");annotation.line.style.left=left+"px"})},this)};this.graph.onUpdate(function(){self.update()})};Rickshaw.namespace("Rickshaw.Graph.Axis.Time");Rickshaw.Graph.Axis.Time=function(args){var self=this;this.graph=args.graph;this.elements=[];this.ticksTreatment=args.ticksTreatment||"plain";this.fixedTimeUnit=args.timeUnit;var time=args.timeFixture||new Rickshaw.Fixtures.Time;this.appropriateTimeUnit=function(){var unit;var units=time.units;var domain=this.graph.x.domain();var rangeSeconds=domain[1]-domain[0];units.forEach(function(u){if(Math.floor(rangeSeconds/u.seconds)>=2){unit=unit||u}});return unit||time.units[time.units.length-1]};this.tickOffsets=function(){var domain=this.graph.x.domain();var unit=this.fixedTimeUnit||this.appropriateTimeUnit();var count=Math.ceil((domain[1]-domain[0])/unit.seconds);var runningTick=domain[0];var offsets=[];for(var i=0;i<count;i++){var tickValue=time.ceil(runningTick,unit);runningTick=tickValue+unit.seconds/2;offsets.push({value:tickValue,unit:unit})}return offsets};this.render=function(){this.elements.forEach(function(e){e.parentNode.removeChild(e)});this.elements=[];var offsets=this.tickOffsets();offsets.forEach(function(o){if(self.graph.x(o.value)>self.graph.x.range()[1])return;var element=document.createElement("div");element.style.left=self.graph.x(o.value)+"px";element.classList.add("x_tick");element.classList.add(self.ticksTreatment);var title=document.createElement("div");title.classList.add("title");title.innerHTML=o.unit.formatter(new Date(o.value*1e3));element.appendChild(title);self.graph.element.appendChild(element);self.elements.push(element)})};this.graph.onUpdate(function(){self.render()})};Rickshaw.namespace("Rickshaw.Graph.Axis.X");Rickshaw.Graph.Axis.X=function(args){var self=this;var berthRate=.1;this.initialize=function(args){this.graph=args.graph;this.orientation=args.orientation||"top";this.pixelsPerTick=args.pixelsPerTick||75;if(args.ticks)this.staticTicks=args.ticks;if(args.tickValues)this.tickValues=args.tickValues;this.tickSize=args.tickSize||4;this.ticksTreatment=args.ticksTreatment||"plain";if(args.element){this.element=args.element;this._discoverSize(args.element,args);this.vis=d3.select(args.element).append("svg:svg").attr("height",this.height).attr("width",this.width).attr("class","rickshaw_graph x_axis_d3");this.element=this.vis[0][0];this.element.style.position="relative";this.setSize({width:args.width,height:args.height})}else{this.vis=this.graph.vis}this.graph.onUpdate(function(){self.render()})};this.setSize=function(args){args=args||{};if(!this.element)return;this._discoverSize(this.element.parentNode,args);this.vis.attr("height",this.height).attr("width",this.width*(1+berthRate));var berth=Math.floor(this.width*berthRate/2);this.element.style.left=-1*berth+"px"};this.render=function(){if(this._renderWidth!==undefined&&this.graph.width!==this._renderWidth)this.setSize({auto:true});var axis=d3.svg.axis().scale(this.graph.x).orient(this.orientation);axis.tickFormat(args.tickFormat||function(x){return x});if(this.tickValues)axis.tickValues(this.tickValues);this.ticks=this.staticTicks||Math.floor(this.graph.width/this.pixelsPerTick);var berth=Math.floor(this.width*berthRate/2)||0;var transform;if(this.orientation=="top"){var yOffset=this.height||this.graph.height;transform="translate("+berth+","+yOffset+")"}else{transform="translate("+berth+", 0)"}if(this.element){this.vis.selectAll("*").remove()}this.vis.append("svg:g").attr("class",["x_ticks_d3",this.ticksTreatment].join(" ")).attr("transform",transform).call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(this.tickSize));var gridSize=(this.orientation=="bottom"?1:-1)*this.graph.height;this.graph.vis.append("svg:g").attr("class","x_grid_d3").call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(gridSize)).selectAll("text").each(function(){this.parentNode.setAttribute("data-x-value",this.textContent)});this._renderHeight=this.graph.height};this._discoverSize=function(element,args){if(typeof window!=="undefined"){var style=window.getComputedStyle(element,null);var elementHeight=parseInt(style.getPropertyValue("height"),10);if(!args.auto){var elementWidth=parseInt(style.getPropertyValue("width"),10)}}this.width=(args.width||elementWidth||this.graph.width)*(1+berthRate);this.height=args.height||elementHeight||40};this.initialize(args)};Rickshaw.namespace("Rickshaw.Graph.Axis.Y");Rickshaw.Graph.Axis.Y=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.orientation=args.orientation||"right";this.pixelsPerTick=args.pixelsPerTick||75;if(args.ticks)this.staticTicks=args.ticks;if(args.tickValues)this.tickValues=args.tickValues;this.tickSize=args.tickSize||4;this.ticksTreatment=args.ticksTreatment||"plain";this.tickFormat=args.tickFormat||function(y){return y};this.berthRate=.1;if(args.element){this.element=args.element;this.vis=d3.select(args.element).append("svg:svg").attr("class","rickshaw_graph y_axis");this.element=this.vis[0][0];this.element.style.position="relative";this.setSize({width:args.width,height:args.height})}else{this.vis=this.graph.vis}var self=this;this.graph.onUpdate(function(){self.render()})},setSize:function(args){args=args||{};if(!this.element)return;if(typeof window!=="undefined"){var style=window.getComputedStyle(this.element.parentNode,null);var elementWidth=parseInt(style.getPropertyValue("width"),10);if(!args.auto){var elementHeight=parseInt(style.getPropertyValue("height"),10)}}this.width=args.width||elementWidth||this.graph.width*this.berthRate;this.height=args.height||elementHeight||this.graph.height;this.vis.attr("width",this.width).attr("height",this.height*(1+this.berthRate));var berth=this.height*this.berthRate;if(this.orientation=="left"){this.element.style.top=-1*berth+"px"}},render:function(){if(this._renderHeight!==undefined&&this.graph.height!==this._renderHeight)this.setSize({auto:true});this.ticks=this.staticTicks||Math.floor(this.graph.height/this.pixelsPerTick);var axis=this._drawAxis(this.graph.y);this._drawGrid(axis);this._renderHeight=this.graph.height},_drawAxis:function(scale){var axis=d3.svg.axis().scale(scale).orient(this.orientation);axis.tickFormat(this.tickFormat);if(this.tickValues)axis.tickValues(this.tickValues);if(this.orientation=="left"){var berth=this.height*this.berthRate;var transform="translate("+this.width+", "+berth+")"}if(this.element){this.vis.selectAll("*").remove()}this.vis.append("svg:g").attr("class",["y_ticks",this.ticksTreatment].join(" ")).attr("transform",transform).call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(this.tickSize));return axis},_drawGrid:function(axis){var gridSize=(this.orientation=="right"?1:-1)*this.graph.width;this.graph.vis.append("svg:g").attr("class","y_grid").call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(gridSize)).selectAll("text").each(function(){this.parentNode.setAttribute("data-y-value",this.textContent)
})}});Rickshaw.namespace("Rickshaw.Graph.Axis.Y.Scaled");Rickshaw.Graph.Axis.Y.Scaled=Rickshaw.Class.create(Rickshaw.Graph.Axis.Y,{initialize:function($super,args){if(typeof args.scale==="undefined"){throw new Error("Scaled requires scale")}this.scale=args.scale;if(typeof args.grid==="undefined"){this.grid=true}else{this.grid=args.grid}$super(args)},_drawAxis:function($super,scale){var domain=this.scale.domain();var renderDomain=this.graph.renderer.domain().y;var extents=[Math.min.apply(Math,domain),Math.max.apply(Math,domain)];var extentMap=d3.scale.linear().domain([0,1]).range(extents);var adjExtents=[extentMap(renderDomain[0]),extentMap(renderDomain[1])];var adjustment=d3.scale.linear().domain(extents).range(adjExtents);var adjustedScale=this.scale.copy().domain(domain.map(adjustment)).range(scale.range());return $super(adjustedScale)},_drawGrid:function($super,axis){if(this.grid){$super(axis)}}});Rickshaw.namespace("Rickshaw.Graph.Behavior.Series.Highlight");Rickshaw.Graph.Behavior.Series.Highlight=function(args){this.graph=args.graph;this.legend=args.legend;var self=this;var colorSafe={};var activeLine=null;var disabledColor=args.disabledColor||function(seriesColor){return d3.interpolateRgb(seriesColor,d3.rgb("#d8d8d8"))(.8).toString()};this.addHighlightEvents=function(l){l.element.addEventListener("mouseover",function(e){if(activeLine)return;else activeLine=l;self.legend.lines.forEach(function(line){if(l===line){if(self.graph.renderer.unstack&&(line.series.renderer?line.series.renderer.unstack:true)){var seriesIndex=self.graph.series.indexOf(line.series);line.originalIndex=seriesIndex;var series=self.graph.series.splice(seriesIndex,1)[0];self.graph.series.push(series)}return}colorSafe[line.series.name]=colorSafe[line.series.name]||line.series.color;line.series.color=disabledColor(line.series.color)});self.graph.update()},false);l.element.addEventListener("mouseout",function(e){if(!activeLine)return;else activeLine=null;self.legend.lines.forEach(function(line){if(l===line&&line.hasOwnProperty("originalIndex")){var series=self.graph.series.pop();self.graph.series.splice(line.originalIndex,0,series);delete line.originalIndex}if(colorSafe[line.series.name]){line.series.color=colorSafe[line.series.name]}});self.graph.update()},false)};if(this.legend){this.legend.lines.forEach(function(l){self.addHighlightEvents(l)})}};Rickshaw.namespace("Rickshaw.Graph.Behavior.Series.Order");Rickshaw.Graph.Behavior.Series.Order=function(args){this.graph=args.graph;this.legend=args.legend;var self=this;if(typeof window.jQuery=="undefined"){throw"couldn't find jQuery at window.jQuery"}if(typeof window.jQuery.ui=="undefined"){throw"couldn't find jQuery UI at window.jQuery.ui"}jQuery(function(){jQuery(self.legend.list).sortable({containment:"parent",tolerance:"pointer",update:function(event,ui){var series=[];jQuery(self.legend.list).find("li").each(function(index,item){if(!item.series)return;series.push(item.series)});for(var i=self.graph.series.length-1;i>=0;i--){self.graph.series[i]=series.shift()}self.graph.update()}});jQuery(self.legend.list).disableSelection()});this.graph.onUpdate(function(){var h=window.getComputedStyle(self.legend.element).height;self.legend.element.style.height=h})};Rickshaw.namespace("Rickshaw.Graph.Behavior.Series.Toggle");Rickshaw.Graph.Behavior.Series.Toggle=function(args){this.graph=args.graph;this.legend=args.legend;var self=this;this.addAnchor=function(line){var anchor=document.createElement("a");anchor.innerHTML="&#10004;";anchor.classList.add("action");line.element.insertBefore(anchor,line.element.firstChild);anchor.onclick=function(e){if(line.series.disabled){line.series.enable();line.element.classList.remove("disabled")}else{if(this.graph.series.filter(function(s){return!s.disabled}).length<=1)return;line.series.disable();line.element.classList.add("disabled")}self.graph.update()}.bind(this);var label=line.element.getElementsByTagName("span")[0];label.onclick=function(e){var disableAllOtherLines=line.series.disabled;if(!disableAllOtherLines){for(var i=0;i<self.legend.lines.length;i++){var l=self.legend.lines[i];if(line.series===l.series){}else if(l.series.disabled){}else{disableAllOtherLines=true;break}}}if(disableAllOtherLines){line.series.enable();line.element.classList.remove("disabled");self.legend.lines.forEach(function(l){if(line.series===l.series){}else{l.series.disable();l.element.classList.add("disabled")}})}else{self.legend.lines.forEach(function(l){l.series.enable();l.element.classList.remove("disabled")})}self.graph.update()}};if(this.legend){var $=jQuery;if(typeof $!="undefined"&&$(this.legend.list).sortable){$(this.legend.list).sortable({start:function(event,ui){ui.item.bind("no.onclick",function(event){event.preventDefault()})},stop:function(event,ui){setTimeout(function(){ui.item.unbind("no.onclick")},250)}})}this.legend.lines.forEach(function(l){self.addAnchor(l)})}this._addBehavior=function(){this.graph.series.forEach(function(s){s.disable=function(){if(self.graph.series.length<=1){throw"only one series left"}s.disabled=true};s.enable=function(){s.disabled=false}})};this._addBehavior();this.updateBehaviour=function(){this._addBehavior()}};Rickshaw.namespace("Rickshaw.Graph.HoverDetail");Rickshaw.Graph.HoverDetail=Rickshaw.Class.create({initialize:function(args){var graph=this.graph=args.graph;this.xFormatter=args.xFormatter||function(x){return new Date(x*1e3).toUTCString()};this.yFormatter=args.yFormatter||function(y){return y===null?y:y.toFixed(2)};var element=this.element=document.createElement("div");element.className="detail";this.visible=true;graph.element.appendChild(element);this.lastEvent=null;this._addListeners();this.onShow=args.onShow;this.onHide=args.onHide;this.onRender=args.onRender;this.formatter=args.formatter||this.formatter},formatter:function(series,x,y,formattedX,formattedY,d){return series.name+":&nbsp;"+formattedY},update:function(e){e=e||this.lastEvent;if(!e)return;this.lastEvent=e;if(!e.target.nodeName.match(/^(path|svg|rect|circle)$/))return;var graph=this.graph;var eventX=e.offsetX||e.layerX;var eventY=e.offsetY||e.layerY;var j=0;var points=[];var nearestPoint;this.graph.series.active().forEach(function(series){var data=this.graph.stackedData[j++];if(!data.length)return;var domainX=graph.x.invert(eventX);var domainIndexScale=d3.scale.linear().domain([data[0].x,data.slice(-1)[0].x]).range([0,data.length-1]);var approximateIndex=Math.round(domainIndexScale(domainX));if(approximateIndex==data.length-1)approximateIndex--;var dataIndex=Math.min(approximateIndex||0,data.length-1);for(var i=approximateIndex;i<data.length-1;){if(!data[i]||!data[i+1])break;if(data[i].x<=domainX&&data[i+1].x>domainX){dataIndex=Math.abs(domainX-data[i].x)<Math.abs(domainX-data[i+1].x)?i:i+1;break}if(data[i+1].x<=domainX){i++}else{i--}}if(dataIndex<0)dataIndex=0;var value=data[dataIndex];var distance=Math.sqrt(Math.pow(Math.abs(graph.x(value.x)-eventX),2)+Math.pow(Math.abs(graph.y(value.y+value.y0)-eventY),2));var xFormatter=series.xFormatter||this.xFormatter;var yFormatter=series.yFormatter||this.yFormatter;var point={formattedXValue:xFormatter(value.x),formattedYValue:yFormatter(series.scale?series.scale.invert(value.y):value.y),series:series,value:value,distance:distance,order:j,name:series.name};if(!nearestPoint||distance<nearestPoint.distance){nearestPoint=point}points.push(point)},this);if(!nearestPoint)return;nearestPoint.active=true;var domainX=nearestPoint.value.x;var formattedXValue=nearestPoint.formattedXValue;this.element.innerHTML="";this.element.style.left=graph.x(domainX)+"px";this.visible&&this.render({points:points,detail:points,mouseX:eventX,mouseY:eventY,formattedXValue:formattedXValue,domainX:domainX})},hide:function(){this.visible=false;this.element.classList.add("inactive");if(typeof this.onHide=="function"){this.onHide()}},show:function(){this.visible=true;this.element.classList.remove("inactive");if(typeof this.onShow=="function"){this.onShow()}},render:function(args){var graph=this.graph;var points=args.points;var point=points.filter(function(p){return p.active}).shift();if(point.value.y===null)return;var formattedXValue=point.formattedXValue;var formattedYValue=point.formattedYValue;this.element.innerHTML="";this.element.style.left=graph.x(point.value.x)+"px";var xLabel=document.createElement("div");xLabel.className="x_label";xLabel.innerHTML=formattedXValue;this.element.appendChild(xLabel);var item=document.createElement("div");item.className="item";var series=point.series;var actualY=series.scale?series.scale.invert(point.value.y):point.value.y;item.innerHTML=this.formatter(series,point.value.x,actualY,formattedXValue,formattedYValue,point);item.style.top=this.graph.y(point.value.y0+point.value.y)+"px";this.element.appendChild(item);var dot=document.createElement("div");dot.className="dot";dot.style.top=item.style.top;dot.style.borderColor=series.color;this.element.appendChild(dot);if(point.active){item.classList.add("active");dot.classList.add("active")}var alignables=[xLabel,item];alignables.forEach(function(el){el.classList.add("left")});this.show();var leftAlignError=this._calcLayoutError(alignables);if(leftAlignError>0){alignables.forEach(function(el){el.classList.remove("left");el.classList.add("right")});var rightAlignError=this._calcLayoutError(alignables);if(rightAlignError>leftAlignError){alignables.forEach(function(el){el.classList.remove("right");el.classList.add("left")})}}if(typeof this.onRender=="function"){this.onRender(args)}},_calcLayoutError:function(alignables){var parentRect=this.element.parentNode.getBoundingClientRect();var error=0;var alignRight=alignables.forEach(function(el){var rect=el.getBoundingClientRect();if(!rect.width){return}if(rect.right>parentRect.right){error+=rect.right-parentRect.right}if(rect.left<parentRect.left){error+=parentRect.left-rect.left}});return error},_addListeners:function(){this.graph.element.addEventListener("mousemove",function(e){this.visible=true;this.update(e)}.bind(this),false);this.graph.onUpdate(function(){this.update()}.bind(this));this.graph.element.addEventListener("mouseout",function(e){if(e.relatedTarget&&!(e.relatedTarget.compareDocumentPosition(this.graph.element)&Node.DOCUMENT_POSITION_CONTAINS)){this.hide()}}.bind(this),false)}});Rickshaw.namespace("Rickshaw.Graph.JSONP");Rickshaw.Graph.JSONP=Rickshaw.Class.create(Rickshaw.Graph.Ajax,{request:function(){jQuery.ajax({url:this.dataURL,dataType:"jsonp",success:this.success.bind(this),error:this.error.bind(this)})}});Rickshaw.namespace("Rickshaw.Graph.Legend");Rickshaw.Graph.Legend=Rickshaw.Class.create({className:"rickshaw_legend",initialize:function(args){this.element=args.element;this.graph=args.graph;this.naturalOrder=args.naturalOrder;this.element.classList.add(this.className);this.list=document.createElement("ul");this.element.appendChild(this.list);this.render();this.graph.onUpdate(function(){})},render:function(){var self=this;while(this.list.firstChild){this.list.removeChild(this.list.firstChild)}this.lines=[];var series=this.graph.series.map(function(s){return s});if(!this.naturalOrder){series=series.reverse()}series.forEach(function(s){self.addLine(s)})},addLine:function(series){var line=document.createElement("li");line.className="line";if(series.disabled){line.className+=" disabled"}if(series.className){d3.select(line).classed(series.className,true)}var swatch=document.createElement("div");swatch.className="swatch";swatch.style.backgroundColor=series.color;line.appendChild(swatch);var label=document.createElement("span");label.className="label";label.innerHTML=series.name;line.appendChild(label);this.list.appendChild(line);line.series=series;if(series.noLegend){line.style.display="none"}var _line={element:line,series:series};if(this.shelving){this.shelving.addAnchor(_line);this.shelving.updateBehaviour()}if(this.highlighter){this.highlighter.addHighlightEvents(_line)}this.lines.push(_line);return line}});Rickshaw.namespace("Rickshaw.Graph.RangeSlider");Rickshaw.Graph.RangeSlider=Rickshaw.Class.create({initialize:function(args){var element=this.element=args.element;var graph=this.graph=args.graph;this.slideCallbacks=[];this.build();graph.onUpdate(function(){this.update()}.bind(this))},build:function(){var element=this.element;var graph=this.graph;var $=jQuery;var domain=graph.dataDomain();var self=this;$(function(){$(element).slider({range:true,min:domain[0],max:domain[1],values:[domain[0],domain[1]],slide:function(event,ui){if(ui.values[1]<=ui.values[0])return;graph.window.xMin=ui.values[0];graph.window.xMax=ui.values[1];graph.update();var domain=graph.dataDomain();if(domain[0]==ui.values[0]){graph.window.xMin=undefined}if(domain[1]==ui.values[1]){graph.window.xMax=undefined}self.slideCallbacks.forEach(function(callback){callback(graph,graph.window.xMin,graph.window.xMax)})}})});$(element)[0].style.width=graph.width+"px"},update:function(){var element=this.element;var graph=this.graph;var $=jQuery;var values=$(element).slider("option","values");var domain=graph.dataDomain();$(element).slider("option","min",domain[0]);$(element).slider("option","max",domain[1]);if(graph.window.xMin==null){values[0]=domain[0]}if(graph.window.xMax==null){values[1]=domain[1]}$(element).slider("option","values",values)},onSlide:function(callback){this.slideCallbacks.push(callback)}});Rickshaw.namespace("Rickshaw.Graph.RangeSlider.Preview");Rickshaw.Graph.RangeSlider.Preview=Rickshaw.Class.create({initialize:function(args){if(!args.element)throw"Rickshaw.Graph.RangeSlider.Preview needs a reference to an element";if(!args.graph&&!args.graphs)throw"Rickshaw.Graph.RangeSlider.Preview needs a reference to an graph or an array of graphs";this.element=args.element;this.element.style.position="relative";this.graphs=args.graph?[args.graph]:args.graphs;this.defaults={height:75,width:400,gripperColor:undefined,frameTopThickness:3,frameHandleThickness:10,frameColor:"#d4d4d4",frameOpacity:1,minimumFrameWidth:0,heightRatio:.2};this.heightRatio=args.heightRatio||this.defaults.heightRatio;this.defaults.gripperColor=d3.rgb(this.defaults.frameColor).darker().toString();this.configureCallbacks=[];this.slideCallbacks=[];this.previews=[];if(!args.width)this.widthFromGraph=true;if(!args.height)this.heightFromGraph=true;if(this.widthFromGraph||this.heightFromGraph){this.graphs[0].onConfigure(function(){this.configure(args);this.render()}.bind(this))}args.width=args.width||this.graphs[0].width||this.defaults.width;args.height=args.height||this.graphs[0].height*this.heightRatio||this.defaults.height;this.configure(args);this.render()},onSlide:function(callback){this.slideCallbacks.push(callback)},onConfigure:function(callback){this.configureCallbacks.push(callback)},configure:function(args){this.config=this.config||{};this.configureCallbacks.forEach(function(callback){callback(args)});Rickshaw.keys(this.defaults).forEach(function(k){this.config[k]=k in args?args[k]:k in this.config?this.config[k]:this.defaults[k]},this);if("width"in args||"height"in args){if(this.widthFromGraph){this.config.width=this.graphs[0].width}if(this.heightFromGraph){this.config.height=this.graphs[0].height*this.heightRatio;this.previewHeight=this.config.height}this.previews.forEach(function(preview){var height=this.previewHeight/this.graphs.length-this.config.frameTopThickness*2;var width=this.config.width-this.config.frameHandleThickness*2;preview.setSize({width:width,height:height});if(this.svg){var svgHeight=height+this.config.frameHandleThickness*2;var svgWidth=width+this.config.frameHandleThickness*2;this.svg.style("width",svgWidth+"px");this.svg.style("height",svgHeight+"px")}},this)}},render:function(){var self=this;this.svg=d3.select(this.element).selectAll("svg.rickshaw_range_slider_preview").data([null]);this.previewHeight=this.config.height-this.config.frameTopThickness*2;this.previewWidth=this.config.width-this.config.frameHandleThickness*2;this.currentFrame=[0,this.previewWidth];var buildGraph=function(parent,index){var graphArgs=Rickshaw.extend({},parent.config);var height=self.previewHeight/self.graphs.length;var renderer=parent.renderer.name;Rickshaw.extend(graphArgs,{element:this.appendChild(document.createElement("div")),height:height,width:self.previewWidth,series:parent.series,renderer:renderer});var graph=new Rickshaw.Graph(graphArgs);self.previews.push(graph);parent.onUpdate(function(){graph.render();self.render()});parent.onConfigure(function(args){delete args.height;args.width=args.width-self.config.frameHandleThickness*2;graph.configure(args);graph.render()});graph.render()};var graphContainer=d3.select(this.element).selectAll("div.rickshaw_range_slider_preview_container").data(this.graphs);var translateCommand="translate("+this.config.frameHandleThickness+"px, "+this.config.frameTopThickness+"px)";graphContainer.enter().append("div").classed("rickshaw_range_slider_preview_container",true).style("-webkit-transform",translateCommand).style("-moz-transform",translateCommand).style("-ms-transform",translateCommand).style("transform",translateCommand).each(buildGraph);graphContainer.exit().remove();var masterGraph=this.graphs[0];var domainScale=d3.scale.linear().domain([0,this.previewWidth]).range(masterGraph.dataDomain());var currentWindow=[masterGraph.window.xMin,masterGraph.window.xMax];this.currentFrame[0]=currentWindow[0]===undefined?0:Math.round(domainScale.invert(currentWindow[0]));if(this.currentFrame[0]<0)this.currentFrame[0]=0;this.currentFrame[1]=currentWindow[1]===undefined?this.previewWidth:domainScale.invert(currentWindow[1]);if(this.currentFrame[1]-this.currentFrame[0]<self.config.minimumFrameWidth){this.currentFrame[1]=(this.currentFrame[0]||0)+self.config.minimumFrameWidth}this.svg.enter().append("svg").classed("rickshaw_range_slider_preview",true).style("height",this.config.height+"px").style("width",this.config.width+"px").style("position","absolute").style("top",0);this._renderDimming();this._renderFrame();this._renderGrippers();this._renderHandles();this._renderMiddle();this._registerMouseEvents()},_renderDimming:function(){var element=this.svg.selectAll("path.dimming").data([null]);element.enter().append("path").attr("fill","white").attr("fill-opacity","0.7").attr("fill-rule","evenodd").classed("dimming",true);var path="";path+=" M "+this.config.frameHandleThickness+" "+this.config.frameTopThickness;path+=" h "+this.previewWidth;path+=" v "+this.previewHeight;path+=" h "+-this.previewWidth;path+=" z ";path+=" M "+Math.max(this.currentFrame[0],this.config.frameHandleThickness)+" "+this.config.frameTopThickness;path+=" H "+Math.min(this.currentFrame[1]+this.config.frameHandleThickness*2,this.previewWidth+this.config.frameHandleThickness);path+=" v "+this.previewHeight;path+=" H "+Math.max(this.currentFrame[0],this.config.frameHandleThickness);path+=" z";element.attr("d",path)},_renderFrame:function(){var element=this.svg.selectAll("path.frame").data([null]);element.enter().append("path").attr("stroke","white").attr("stroke-width","1px").attr("stroke-linejoin","round").attr("fill",this.config.frameColor).attr("fill-opacity",this.config.frameOpacity).attr("fill-rule","evenodd").classed("frame",true);var path="";path+=" M "+this.currentFrame[0]+" 0";path+=" H "+(this.currentFrame[1]+this.config.frameHandleThickness*2);path+=" V "+this.config.height;path+=" H "+this.currentFrame[0];path+=" z";path+=" M "+(this.currentFrame[0]+this.config.frameHandleThickness)+" "+this.config.frameTopThickness;path+=" H "+(this.currentFrame[1]+this.config.frameHandleThickness);path+=" v "+this.previewHeight;path+=" H "+(this.currentFrame[0]+this.config.frameHandleThickness);path+=" z";element.attr("d",path)},_renderGrippers:function(){var gripper=this.svg.selectAll("path.gripper").data([null]);gripper.enter().append("path").attr("stroke",this.config.gripperColor).classed("gripper",true);var path="";[.4,.6].forEach(function(spacing){path+=" M "+Math.round(this.currentFrame[0]+this.config.frameHandleThickness*spacing)+" "+Math.round(this.config.height*.3);path+=" V "+Math.round(this.config.height*.7);path+=" M "+Math.round(this.currentFrame[1]+this.config.frameHandleThickness*(1+spacing))+" "+Math.round(this.config.height*.3);path+=" V "+Math.round(this.config.height*.7)}.bind(this));gripper.attr("d",path)},_renderHandles:function(){var leftHandle=this.svg.selectAll("rect.left_handle").data([null]);leftHandle.enter().append("rect").attr("width",this.config.frameHandleThickness).style("cursor","ew-resize").style("fill-opacity","0").classed("left_handle",true);leftHandle.attr("x",this.currentFrame[0]).attr("height",this.config.height);var rightHandle=this.svg.selectAll("rect.right_handle").data([null]);rightHandle.enter().append("rect").attr("width",this.config.frameHandleThickness).style("cursor","ew-resize").style("fill-opacity","0").classed("right_handle",true);rightHandle.attr("x",this.currentFrame[1]+this.config.frameHandleThickness).attr("height",this.config.height)},_renderMiddle:function(){var middleHandle=this.svg.selectAll("rect.middle_handle").data([null]);middleHandle.enter().append("rect").style("cursor","move").style("fill-opacity","0").classed("middle_handle",true);middleHandle.attr("width",Math.max(0,this.currentFrame[1]-this.currentFrame[0])).attr("x",this.currentFrame[0]+this.config.frameHandleThickness).attr("height",this.config.height)},_registerMouseEvents:function(){var element=d3.select(this.element);var drag={target:null,start:null,stop:null,left:false,right:false,rigid:false};var self=this;function onMousemove(datum,index){drag.stop=self._getClientXFromEvent(d3.event,drag);var distanceTraveled=drag.stop-drag.start;var frameAfterDrag=self.frameBeforeDrag.slice(0);var minimumFrameWidth=self.config.minimumFrameWidth;if(drag.rigid){minimumFrameWidth=self.frameBeforeDrag[1]-self.frameBeforeDrag[0]}if(drag.left){frameAfterDrag[0]=Math.max(frameAfterDrag[0]+distanceTraveled,0)}if(drag.right){frameAfterDrag[1]=Math.min(frameAfterDrag[1]+distanceTraveled,self.previewWidth)}var currentFrameWidth=frameAfterDrag[1]-frameAfterDrag[0];if(currentFrameWidth<=minimumFrameWidth){if(drag.left){frameAfterDrag[0]=frameAfterDrag[1]-minimumFrameWidth}if(drag.right){frameAfterDrag[1]=frameAfterDrag[0]+minimumFrameWidth}if(frameAfterDrag[0]<=0){frameAfterDrag[1]-=frameAfterDrag[0];frameAfterDrag[0]=0}if(frameAfterDrag[1]>=self.previewWidth){frameAfterDrag[0]-=frameAfterDrag[1]-self.previewWidth;frameAfterDrag[1]=self.previewWidth}}self.graphs.forEach(function(graph){var domainScale=d3.scale.linear().interpolate(d3.interpolateNumber).domain([0,self.previewWidth]).range(graph.dataDomain());var windowAfterDrag=[domainScale(frameAfterDrag[0]),domainScale(frameAfterDrag[1])];self.slideCallbacks.forEach(function(callback){callback(graph,windowAfterDrag[0],windowAfterDrag[1])});if(frameAfterDrag[0]===0){windowAfterDrag[0]=undefined}if(frameAfterDrag[1]===self.previewWidth){windowAfterDrag[1]=undefined}graph.window.xMin=windowAfterDrag[0];graph.window.xMax=windowAfterDrag[1];graph.update()})}function onMousedown(){drag.target=d3.event.target;drag.start=self._getClientXFromEvent(d3.event,drag);self.frameBeforeDrag=self.currentFrame.slice();d3.event.preventDefault?d3.event.preventDefault():d3.event.returnValue=false;d3.select(document).on("mousemove.rickshaw_range_slider_preview",onMousemove);d3.select(document).on("mouseup.rickshaw_range_slider_preview",onMouseup);d3.select(document).on("touchmove.rickshaw_range_slider_preview",onMousemove);d3.select(document).on("touchend.rickshaw_range_slider_preview",onMouseup);d3.select(document).on("touchcancel.rickshaw_range_slider_preview",onMouseup)}function onMousedownLeftHandle(datum,index){drag.left=true;onMousedown()}function onMousedownRightHandle(datum,index){drag.right=true;onMousedown()}function onMousedownMiddleHandle(datum,index){drag.left=true;drag.right=true;drag.rigid=true;onMousedown()}function onMouseup(datum,index){d3.select(document).on("mousemove.rickshaw_range_slider_preview",null);d3.select(document).on("mouseup.rickshaw_range_slider_preview",null);d3.select(document).on("touchmove.rickshaw_range_slider_preview",null);d3.select(document).on("touchend.rickshaw_range_slider_preview",null);d3.select(document).on("touchcancel.rickshaw_range_slider_preview",null);delete self.frameBeforeDrag;drag.left=false;drag.right=false;drag.rigid=false}element.select("rect.left_handle").on("mousedown",onMousedownLeftHandle);element.select("rect.right_handle").on("mousedown",onMousedownRightHandle);element.select("rect.middle_handle").on("mousedown",onMousedownMiddleHandle);element.select("rect.left_handle").on("touchstart",onMousedownLeftHandle);element.select("rect.right_handle").on("touchstart",onMousedownRightHandle);element.select("rect.middle_handle").on("touchstart",onMousedownMiddleHandle)},_getClientXFromEvent:function(event,drag){switch(event.type){case"touchstart":case"touchmove":var touchList=event.changedTouches;var touch=null;for(var touchIndex=0;touchIndex<touchList.length;touchIndex++){if(touchList[touchIndex].target===drag.target){touch=touchList[touchIndex];break}}return touch!==null?touch.clientX:undefined;default:return event.clientX}}});Rickshaw.namespace("Rickshaw.Graph.Renderer");Rickshaw.Graph.Renderer=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.tension=args.tension||this.tension;this.configure(args)},seriesPathFactory:function(){},seriesStrokeFactory:function(){},defaults:function(){return{tension:.8,strokeWidth:2,unstack:true,padding:{top:.01,right:0,bottom:.01,left:0},stroke:false,fill:false}},domain:function(data){var stackedData=data||this.graph.stackedData||this.graph.stackData();var xMin=+Infinity;var xMax=-Infinity;var yMin=+Infinity;var yMax=-Infinity;stackedData.forEach(function(series){series.forEach(function(d){if(d.y==null)return;var y=d.y+d.y0;if(y<yMin)yMin=y;if(y>yMax)yMax=y});if(!series.length)return;if(series[0].x<xMin)xMin=series[0].x;if(series[series.length-1].x>xMax)xMax=series[series.length-1].x});xMin-=(xMax-xMin)*this.padding.left;xMax+=(xMax-xMin)*this.padding.right;yMin=this.graph.min==="auto"?yMin:this.graph.min||0;yMax=this.graph.max===undefined?yMax:this.graph.max;if(this.graph.min==="auto"||yMin<0){yMin-=(yMax-yMin)*this.padding.bottom}if(this.graph.max===undefined){yMax+=(yMax-yMin)*this.padding.top}return{x:[xMin,xMax],y:[yMin,yMax]}},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;vis.selectAll("*").remove();var data=series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});var pathNodes=vis.selectAll("path.path").data(data).enter().append("svg:path").classed("path",true).attr("d",this.seriesPathFactory());if(this.stroke){var strokeNodes=vis.selectAll("path.stroke").data(data).enter().append("svg:path").classed("stroke",true).attr("d",this.seriesStrokeFactory())}var i=0;series.forEach(function(series){if(series.disabled)return;series.path=pathNodes[0][i];if(this.stroke)series.stroke=strokeNodes[0][i];this._styleSeries(series);i++},this)},_styleSeries:function(series){var fill=this.fill?series.color:"none";var stroke=this.stroke?series.color:"none";series.path.setAttribute("fill",fill);series.path.setAttribute("stroke",stroke);series.path.setAttribute("stroke-width",this.strokeWidth);if(series.className){d3.select(series.path).classed(series.className,true)}if(series.className&&this.stroke){d3.select(series.stroke).classed(series.className,true)}},configure:function(args){args=args||{};Rickshaw.keys(this.defaults()).forEach(function(key){if(!args.hasOwnProperty(key)){this[key]=this[key]||this.graph[key]||this.defaults()[key];return}if(typeof this.defaults()[key]=="object"){Rickshaw.keys(this.defaults()[key]).forEach(function(k){this[key][k]=args[key][k]!==undefined?args[key][k]:this[key][k]!==undefined?this[key][k]:this.defaults()[key][k]},this)}else{this[key]=args[key]!==undefined?args[key]:this[key]!==undefined?this[key]:this.graph[key]!==undefined?this.graph[key]:this.defaults()[key]}},this)},setStrokeWidth:function(strokeWidth){if(strokeWidth!==undefined){this.strokeWidth=strokeWidth}},setTension:function(tension){if(tension!==undefined){this.tension=tension}}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Line");Rickshaw.Graph.Renderer.Line=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"line",defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true})},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Stack");Rickshaw.Graph.Renderer.Stack=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"stack",defaults:function($super){return Rickshaw.extend($super(),{fill:true,stroke:false,unstack:false})},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.area().x(function(d){return graph.x(d.x)}).y0(function(d){return graph.y(d.y0)}).y1(function(d){return graph.y(d.y+d.y0)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Bar");Rickshaw.Graph.Renderer.Bar=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"bar",defaults:function($super){var defaults=Rickshaw.extend($super(),{gapSize:.05,unstack:false});delete defaults.tension;return defaults},initialize:function($super,args){args=args||{};this.gapSize=args.gapSize||this.gapSize;$super(args)},domain:function($super){var domain=$super();var frequentInterval=this._frequentInterval(this.graph.stackedData.slice(-1).shift());domain.x[1]+=Number(frequentInterval.magnitude);return domain},barWidth:function(series){var frequentInterval=this._frequentInterval(series.stack);var barWidth=this.graph.x.magnitude(frequentInterval.magnitude)*(1-this.gapSize);return barWidth},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;vis.selectAll("*").remove();var barWidth=this.barWidth(series.active()[0]);var barXOffset=0;var activeSeriesCount=series.filter(function(s){return!s.disabled}).length;var seriesBarWidth=this.unstack?barWidth/activeSeriesCount:barWidth;var transform=function(d){var matrix=[1,0,0,d.y<0?-1:1,0,d.y<0?graph.y.magnitude(Math.abs(d.y))*2:0];return"matrix("+matrix.join(",")+")"};series.forEach(function(series){if(series.disabled)return;var barWidth=this.barWidth(series);var nodes=vis.selectAll("path").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:rect").attr("x",function(d){return graph.x(d.x)+barXOffset}).attr("y",function(d){return graph.y(d.y0+Math.abs(d.y))*(d.y<0?-1:1)}).attr("width",seriesBarWidth).attr("height",function(d){return graph.y.magnitude(Math.abs(d.y))}).attr("transform",transform);Array.prototype.forEach.call(nodes[0],function(n){n.setAttribute("fill",series.color)});if(this.unstack)barXOffset+=seriesBarWidth},this)},_frequentInterval:function(data){var intervalCounts={};for(var i=0;i<data.length-1;i++){var interval=data[i+1].x-data[i].x;intervalCounts[interval]=intervalCounts[interval]||0;intervalCounts[interval]++}var frequentInterval={count:0,magnitude:1};Rickshaw.keys(intervalCounts).forEach(function(i){if(frequentInterval.count<intervalCounts[i]){frequentInterval={count:intervalCounts[i],magnitude:i}}});return frequentInterval}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Area");Rickshaw.Graph.Renderer.Area=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"area",defaults:function($super){return Rickshaw.extend($super(),{unstack:false,fill:false,stroke:false})},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.area().x(function(d){return graph.x(d.x)}).y0(function(d){return graph.y(d.y0)}).y1(function(d){return graph.y(d.y+d.y0)}).interpolate(graph.interpolation).tension(this.tension);
factory.defined&&factory.defined(function(d){return d.y!==null});return factory},seriesStrokeFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y+d.y0)}).interpolate(graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;vis.selectAll("*").remove();var method=this.unstack?"append":"insert";var data=series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});var nodes=vis.selectAll("path").data(data).enter()[method]("svg:g","g");nodes.append("svg:path").attr("d",this.seriesPathFactory()).attr("class","area");if(this.stroke){nodes.append("svg:path").attr("d",this.seriesStrokeFactory()).attr("class","line")}var i=0;series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series)},this)},_styleSeries:function(series){if(!series.path)return;d3.select(series.path).select(".area").attr("fill",series.color);if(this.stroke){d3.select(series.path).select(".line").attr("fill","none").attr("stroke",series.stroke||d3.interpolateRgb(series.color,"black")(.125)).attr("stroke-width",this.strokeWidth)}if(series.className){series.path.setAttribute("class",series.className)}}});Rickshaw.namespace("Rickshaw.Graph.Renderer.ScatterPlot");Rickshaw.Graph.Renderer.ScatterPlot=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"scatterplot",defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:true,stroke:false,padding:{top:.01,right:.01,bottom:.01,left:.01},dotSize:4})},initialize:function($super,args){$super(args)},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;var dotSize=this.dotSize;vis.selectAll("*").remove();series.forEach(function(series){if(series.disabled)return;var nodes=vis.selectAll("path").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:circle").attr("cx",function(d){return graph.x(d.x)}).attr("cy",function(d){return graph.y(d.y)}).attr("r",function(d){return"r"in d?d.r:dotSize});if(series.className){nodes.classed(series.className,true)}Array.prototype.forEach.call(nodes[0],function(n){n.setAttribute("fill",series.color)})},this)}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Multi");Rickshaw.Graph.Renderer.Multi=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"multi",initialize:function($super,args){$super(args)},defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true})},configure:function($super,args){args=args||{};this.config=args;$super(args)},domain:function($super){this.graph.stackData();var domains=[];var groups=this._groups();this._stack(groups);groups.forEach(function(group){var data=group.series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});if(!data.length)return;var domain=null;if(group.renderer&&group.renderer.domain){domain=group.renderer.domain(data)}else{domain=$super(data)}domains.push(domain)});var xMin=d3.min(domains.map(function(d){return d.x[0]}));var xMax=d3.max(domains.map(function(d){return d.x[1]}));var yMin=d3.min(domains.map(function(d){return d.y[0]}));var yMax=d3.max(domains.map(function(d){return d.y[1]}));return{x:[xMin,xMax],y:[yMin,yMax]}},_groups:function(){var graph=this.graph;var renderGroups={};graph.series.forEach(function(series){if(series.disabled)return;if(!renderGroups[series.renderer]){var ns="http://www.w3.org/2000/svg";var vis=document.createElementNS(ns,"g");graph.vis[0][0].appendChild(vis);var renderer=graph._renderers[series.renderer];var config={};var defaults=[this.defaults(),renderer.defaults(),this.config,this.graph];defaults.forEach(function(d){Rickshaw.extend(config,d)});renderer.configure(config);renderGroups[series.renderer]={renderer:renderer,series:[],vis:d3.select(vis)}}renderGroups[series.renderer].series.push(series)},this);var groups=[];Object.keys(renderGroups).forEach(function(key){var group=renderGroups[key];groups.push(group)});return groups},_stack:function(groups){groups.forEach(function(group){var series=group.series.filter(function(series){return!series.disabled});var data=series.map(function(series){return series.stack});if(!group.renderer.unstack){var layout=d3.layout.stack();var stackedData=Rickshaw.clone(layout(data));series.forEach(function(series,index){series._stack=Rickshaw.clone(stackedData[index])})}},this);return groups},render:function(){this.graph.series.forEach(function(series){if(!series.renderer){throw new Error("Each series needs a renderer for graph 'multi' renderer")}});this.graph.vis.selectAll("*").remove();var groups=this._groups();groups=this._stack(groups);groups.forEach(function(group){var series=group.series.filter(function(series){return!series.disabled});series.active=function(){return series};group.renderer.render({series:series,vis:group.vis});series.forEach(function(s){s.stack=s._stack||s.stack||s.data})})}});Rickshaw.namespace("Rickshaw.Graph.Renderer.LinePlot");Rickshaw.Graph.Renderer.LinePlot=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"lineplot",defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true,padding:{top:.01,right:.01,bottom:.01,left:.01},dotSize:3,strokeWidth:2})},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;var dotSize=this.dotSize;vis.selectAll("*").remove();var data=series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});var nodes=vis.selectAll("path").data(data).enter().append("svg:path").attr("d",this.seriesPathFactory());var i=0;series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series)},this);series.forEach(function(series){if(series.disabled)return;var nodes=vis.selectAll("x").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:circle").attr("cx",function(d){return graph.x(d.x)}).attr("cy",function(d){return graph.y(d.y)}).attr("r",function(d){return"r"in d?d.r:dotSize});Array.prototype.forEach.call(nodes[0],function(n){if(!n)return;n.setAttribute("data-color",series.color);n.setAttribute("fill","white");n.setAttribute("stroke",series.color);n.setAttribute("stroke-width",this.strokeWidth)}.bind(this))},this)}});Rickshaw.namespace("Rickshaw.Graph.Smoother");Rickshaw.Graph.Smoother=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.element=args.element;this.aggregationScale=1;this.build();this.graph.stackData.hooks.data.push({name:"smoother",orderPosition:50,f:this.transformer.bind(this)})},build:function(){var self=this;var $=jQuery;if(this.element){$(function(){$(self.element).slider({min:1,max:100,slide:function(event,ui){self.setScale(ui.value)}})})}},setScale:function(scale){if(scale<1){throw"scale out of range: "+scale}this.aggregationScale=scale;this.graph.update()},transformer:function(data){if(this.aggregationScale==1)return data;var aggregatedData=[];data.forEach(function(seriesData){var aggregatedSeriesData=[];while(seriesData.length){var avgX=0,avgY=0;var slice=seriesData.splice(0,this.aggregationScale);slice.forEach(function(d){avgX+=d.x/slice.length;avgY+=d.y/slice.length});aggregatedSeriesData.push({x:avgX,y:avgY})}aggregatedData.push(aggregatedSeriesData)}.bind(this));return aggregatedData}});Rickshaw.namespace("Rickshaw.Graph.Socketio");Rickshaw.Graph.Socketio=Rickshaw.Class.create(Rickshaw.Graph.Ajax,{request:function(){var socket=io.connect(this.dataURL);var self=this;socket.on("rickshaw",function(data){self.success(data)})}});Rickshaw.namespace("Rickshaw.Series");Rickshaw.Series=Rickshaw.Class.create(Array,{initialize:function(data,palette,options){options=options||{};this.palette=new Rickshaw.Color.Palette(palette);this.timeBase=typeof options.timeBase==="undefined"?Math.floor((new Date).getTime()/1e3):options.timeBase;var timeInterval=typeof options.timeInterval=="undefined"?1e3:options.timeInterval;this.setTimeInterval(timeInterval);if(data&&typeof data=="object"&&Array.isArray(data)){data.forEach(function(item){this.addItem(item)},this)}},addItem:function(item){if(typeof item.name==="undefined"){throw"addItem() needs a name"}item.color=item.color||this.palette.color(item.name);item.data=item.data||[];if(item.data.length===0&&this.length&&this.getIndex()>0){this[0].data.forEach(function(plot){item.data.push({x:plot.x,y:0})})}else if(item.data.length===0){item.data.push({x:this.timeBase-(this.timeInterval||0),y:0})}this.push(item);if(this.legend){this.legend.addLine(this.itemByName(item.name))}},addData:function(data,x){var index=this.getIndex();Rickshaw.keys(data).forEach(function(name){if(!this.itemByName(name)){this.addItem({name:name})}},this);this.forEach(function(item){item.data.push({x:x||(index*this.timeInterval||1)+this.timeBase,y:data[item.name]||0})},this)},getIndex:function(){return this[0]&&this[0].data&&this[0].data.length?this[0].data.length:0},itemByName:function(name){for(var i=0;i<this.length;i++){if(this[i].name==name)return this[i]}},setTimeInterval:function(iv){this.timeInterval=iv/1e3},setTimeBase:function(t){this.timeBase=t},dump:function(){var data={timeBase:this.timeBase,timeInterval:this.timeInterval,items:[]};this.forEach(function(item){var newItem={color:item.color,name:item.name,data:[]};item.data.forEach(function(plot){newItem.data.push({x:plot.x,y:plot.y})});data.items.push(newItem)});return data},load:function(data){if(data.timeInterval){this.timeInterval=data.timeInterval}if(data.timeBase){this.timeBase=data.timeBase}if(data.items){data.items.forEach(function(item){this.push(item);if(this.legend){this.legend.addLine(this.itemByName(item.name))}},this)}}});Rickshaw.Series.zeroFill=function(series){Rickshaw.Series.fill(series,0)};Rickshaw.Series.fill=function(series,fill){var x;var i=0;var data=series.map(function(s){return s.data});while(i<Math.max.apply(null,data.map(function(d){return d.length}))){x=Math.min.apply(null,data.filter(function(d){return d[i]}).map(function(d){return d[i].x}));data.forEach(function(d){if(!d[i]||d[i].x!=x){d.splice(i,0,{x:x,y:fill})}});i++}};Rickshaw.namespace("Rickshaw.Series.FixedDuration");Rickshaw.Series.FixedDuration=Rickshaw.Class.create(Rickshaw.Series,{initialize:function(data,palette,options){options=options||{};if(typeof options.timeInterval==="undefined"){throw new Error("FixedDuration series requires timeInterval")}if(typeof options.maxDataPoints==="undefined"){throw new Error("FixedDuration series requires maxDataPoints")}this.palette=new Rickshaw.Color.Palette(palette);this.timeBase=typeof options.timeBase==="undefined"?Math.floor((new Date).getTime()/1e3):options.timeBase;this.setTimeInterval(options.timeInterval);if(this[0]&&this[0].data&&this[0].data.length){this.currentSize=this[0].data.length;this.currentIndex=this[0].data.length}else{this.currentSize=0;this.currentIndex=0}this.maxDataPoints=options.maxDataPoints;if(data&&typeof data=="object"&&Array.isArray(data)){data.forEach(function(item){this.addItem(item)},this);this.currentSize+=1;this.currentIndex+=1}this.timeBase-=(this.maxDataPoints-this.currentSize)*this.timeInterval;if(typeof this.maxDataPoints!=="undefined"&&this.currentSize<this.maxDataPoints){for(var i=this.maxDataPoints-this.currentSize-1;i>1;i--){this.currentSize+=1;this.currentIndex+=1;this.forEach(function(item){item.data.unshift({x:((i-1)*this.timeInterval||1)+this.timeBase,y:0,i:i})},this)}}},addData:function($super,data,x){$super(data,x);this.currentSize+=1;this.currentIndex+=1;if(this.maxDataPoints!==undefined){while(this.currentSize>this.maxDataPoints){this.dropData()}}},dropData:function(){this.forEach(function(item){item.data.splice(0,1)});this.currentSize-=1},getIndex:function(){return this.currentIndex}});return Rickshaw});
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Reflection;
namespace Hangfire.Dashboard.Resources {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Strings {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Strings() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Hangfire.Dashboard.Content.resx.Strings", typeof(Strings).GetTypeInfo().Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Don&apos;t worry, continuations are working as expected. But your current job storage does not support some queries required to show this page. Please try to update your storage or wait until the full command set is implemented..
/// </summary>
public static string AwaitingJobsPage_ContinuationsWarning_Text {
get {
return ResourceManager.GetString("AwaitingJobsPage_ContinuationsWarning_Text", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Continuations are working, but this page can&apos;t be displayed.
/// </summary>
public static string AwaitingJobsPage_ContinuationsWarning_Title {
get {
return ResourceManager.GetString("AwaitingJobsPage_ContinuationsWarning_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No jobs found in awaiting state..
/// </summary>
public static string AwaitingJobsPage_NoJobs {
get {
return ResourceManager.GetString("AwaitingJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Options.
/// </summary>
public static string AwaitingJobsPage_Table_Options {
get {
return ResourceManager.GetString("AwaitingJobsPage_Table_Options", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Parent.
/// </summary>
public static string AwaitingJobsPage_Table_Parent {
get {
return ResourceManager.GetString("AwaitingJobsPage_Table_Parent", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Awaiting Jobs.
/// </summary>
public static string AwaitingJobsPage_Title {
get {
return ResourceManager.GetString("AwaitingJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Can not find the target method..
/// </summary>
public static string Common_CannotFindTargetMethod {
get {
return ResourceManager.GetString("Common_CannotFindTargetMethod", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Condition.
/// </summary>
public static string Common_Condition {
get {
return ResourceManager.GetString("Common_Condition", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Continuations.
/// </summary>
public static string Common_Continuations {
get {
return ResourceManager.GetString("Common_Continuations", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Created.
/// </summary>
public static string Common_Created {
get {
return ResourceManager.GetString("Common_Created", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delete.
/// </summary>
public static string Common_Delete {
get {
return ResourceManager.GetString("Common_Delete", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Do you really want to DELETE ALL selected jobs?.
/// </summary>
public static string Common_DeleteConfirm {
get {
return ResourceManager.GetString("Common_DeleteConfirm", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delete selected.
/// </summary>
public static string Common_DeleteSelected {
get {
return ResourceManager.GetString("Common_DeleteSelected", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleting....
/// </summary>
public static string Common_Deleting {
get {
return ResourceManager.GetString("Common_Deleting", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueue jobs.
/// </summary>
public static string Common_EnqueueButton_Text {
get {
return ResourceManager.GetString("Common_EnqueueButton_Text", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued.
/// </summary>
public static string Common_Enqueued {
get {
return ResourceManager.GetString("Common_Enqueued", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueueing....
/// </summary>
public static string Common_Enqueueing {
get {
return ResourceManager.GetString("Common_Enqueueing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Fetched.
/// </summary>
public static string Common_Fetched {
get {
return ResourceManager.GetString("Common_Fetched", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Id.
/// </summary>
public static string Common_Id {
get {
return ResourceManager.GetString("Common_Id", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Job.
/// </summary>
public static string Common_Job {
get {
return ResourceManager.GetString("Common_Job", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Job expired..
/// </summary>
public static string Common_JobExpired {
get {
return ResourceManager.GetString("Common_JobExpired", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Job&apos;s state has been changed while fetching data..
/// </summary>
public static string Common_JobStateChanged_Text {
get {
return ResourceManager.GetString("Common_JobStateChanged_Text", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Less details....
/// </summary>
public static string Common_LessDetails {
get {
return ResourceManager.GetString("Common_LessDetails", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to More details....
/// </summary>
public static string Common_MoreDetails {
get {
return ResourceManager.GetString("Common_MoreDetails", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No state.
/// </summary>
public static string Common_NoState {
get {
return ResourceManager.GetString("Common_NoState", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to N/A.
/// </summary>
public static string Common_NotAvailable {
get {
return ResourceManager.GetString("Common_NotAvailable", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Day.
/// </summary>
public static string Common_PeriodDay {
get {
return ResourceManager.GetString("Common_PeriodDay", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Week.
/// </summary>
public static string Common_PeriodWeek {
get {
return ResourceManager.GetString("Common_PeriodWeek", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Reason.
/// </summary>
public static string Common_Reason {
get {
return ResourceManager.GetString("Common_Reason", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Requeue jobs.
/// </summary>
public static string Common_RequeueJobs {
get {
return ResourceManager.GetString("Common_RequeueJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retry.
/// </summary>
public static string Common_Retry {
get {
return ResourceManager.GetString("Common_Retry", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Server.
/// </summary>
public static string Common_Server {
get {
return ResourceManager.GetString("Common_Server", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to State.
/// </summary>
public static string Common_State {
get {
return ResourceManager.GetString("Common_State", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unknown.
/// </summary>
public static string Common_Unknown {
get {
return ResourceManager.GetString("Common_Unknown", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No deleted jobs found..
/// </summary>
public static string DeletedJobsPage_NoJobs {
get {
return ResourceManager.GetString("DeletedJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleted.
/// </summary>
public static string DeletedJobsPage_Table_Deleted {
get {
return ResourceManager.GetString("DeletedJobsPage_Table_Deleted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleted Jobs.
/// </summary>
public static string DeletedJobsPage_Title {
get {
return ResourceManager.GetString("DeletedJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The queue is empty..
/// </summary>
public static string EnqueuedJobsPage_NoJobs {
get {
return ResourceManager.GetString("EnqueuedJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued jobs.
/// </summary>
public static string EnqueuedJobsPage_Title {
get {
return ResourceManager.GetString("EnqueuedJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;strong&gt;Failed jobs do not become expired&lt;/strong&gt; to allow you to re-queue them without any
/// time pressure. You should re-queue or delete them manually, or apply &lt;code&gt;AutomaticRetry(OnAttemptsExceeded = AttemptsExceededAction.Delete)&lt;/code&gt;
/// attribute to delete them automatically..
/// </summary>
public static string FailedJobsPage_FailedJobsNotExpire_Warning_Html {
get {
return ResourceManager.GetString("FailedJobsPage_FailedJobsNotExpire_Warning_Html", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You have no failed jobs at the moment..
/// </summary>
public static string FailedJobsPage_NoJobs {
get {
return ResourceManager.GetString("FailedJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed.
/// </summary>
public static string FailedJobsPage_Table_Failed {
get {
return ResourceManager.GetString("FailedJobsPage_Table_Failed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed Jobs.
/// </summary>
public static string FailedJobsPage_Title {
get {
return ResourceManager.GetString("FailedJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The queue is empty..
/// </summary>
public static string FetchedJobsPage_NoJobs {
get {
return ResourceManager.GetString("FetchedJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Fetched jobs.
/// </summary>
public static string FetchedJobsPage_Title {
get {
return ResourceManager.GetString("FetchedJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed.
/// </summary>
public static string HomePage_GraphHover_Failed {
get {
return ResourceManager.GetString("HomePage_GraphHover_Failed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded.
/// </summary>
public static string HomePage_GraphHover_Succeeded {
get {
return ResourceManager.GetString("HomePage_GraphHover_Succeeded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to History graph.
/// </summary>
public static string HomePage_HistoryGraph {
get {
return ResourceManager.GetString("HomePage_HistoryGraph", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Realtime graph.
/// </summary>
public static string HomePage_RealtimeGraph {
get {
return ResourceManager.GetString("HomePage_RealtimeGraph", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Dashboard.
/// </summary>
public static string HomePage_Title {
get {
return ResourceManager.GetString("HomePage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Created.
/// </summary>
public static string JobDetailsPage_Created {
get {
return ResourceManager.GetString("JobDetailsPage_Created", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Do you really want to delete this job?.
/// </summary>
public static string JobDetailsPage_DeleteConfirm {
get {
return ResourceManager.GetString("JobDetailsPage_DeleteConfirm", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;strong&gt;The job was aborted&lt;/strong&gt; – it is processed by server
/// &lt;code&gt;{0}&lt;/code&gt; which is not in the
/// &lt;a href=&quot;{1}&quot;&gt;active servers&lt;/a&gt; list for now.
/// It will be retried automatically after invisibility timeout, but you can
/// also re-queue or delete it manually..
/// </summary>
public static string JobDetailsPage_JobAbortedNotActive_Warning_Html {
get {
return ResourceManager.GetString("JobDetailsPage_JobAbortedNotActive_Warning_Html", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;strong&gt;Looks like the job was aborted&lt;/strong&gt; – it is processed by server
/// &lt;code&gt;{0}&lt;/code&gt;, which reported its heartbeat more than 1 minute ago.
/// It will be retried automatically after invisibility timeout, but you can
/// also re-queue or delete it manually..
/// </summary>
public static string JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html {
get {
return ResourceManager.GetString("JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Background job &apos;{0}&apos; has expired or could not be found on the server..
/// </summary>
public static string JobDetailsPage_JobExpired {
get {
return ResourceManager.GetString("JobDetailsPage_JobExpired", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;strong&gt;The job is finished&lt;/strong&gt;.
/// It will be removed automatically &lt;em&gt;&lt;abbr data-moment=&quot;{0}&quot;&gt;{1}&lt;/abbr&gt;&lt;/em&gt;..
/// </summary>
public static string JobDetailsPage_JobFinished_Warning_Html {
get {
return ResourceManager.GetString("JobDetailsPage_JobFinished_Warning_Html", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Job ID.
/// </summary>
public static string JobDetailsPage_JobId {
get {
return ResourceManager.GetString("JobDetailsPage_JobId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Requeue.
/// </summary>
public static string JobDetailsPage_Requeue {
get {
return ResourceManager.GetString("JobDetailsPage_Requeue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to State.
/// </summary>
public static string JobDetailsPage_State {
get {
return ResourceManager.GetString("JobDetailsPage_State", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Awaiting.
/// </summary>
public static string JobsSidebarMenu_Awaiting {
get {
return ResourceManager.GetString("JobsSidebarMenu_Awaiting", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleted.
/// </summary>
public static string JobsSidebarMenu_Deleted {
get {
return ResourceManager.GetString("JobsSidebarMenu_Deleted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued.
/// </summary>
public static string JobsSidebarMenu_Enqueued {
get {
return ResourceManager.GetString("JobsSidebarMenu_Enqueued", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed.
/// </summary>
public static string JobsSidebarMenu_Failed {
get {
return ResourceManager.GetString("JobsSidebarMenu_Failed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Processing.
/// </summary>
public static string JobsSidebarMenu_Processing {
get {
return ResourceManager.GetString("JobsSidebarMenu_Processing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Scheduled.
/// </summary>
public static string JobsSidebarMenu_Scheduled {
get {
return ResourceManager.GetString("JobsSidebarMenu_Scheduled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded.
/// </summary>
public static string JobsSidebarMenu_Succeeded {
get {
return ResourceManager.GetString("JobsSidebarMenu_Succeeded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Back to site.
/// </summary>
public static string LayoutPage_Back {
get {
return ResourceManager.GetString("LayoutPage_Back", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Generated: {0}ms.
/// </summary>
public static string LayoutPage_Footer_Generatedms {
get {
return ResourceManager.GetString("LayoutPage_Footer_Generatedms", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time:.
/// </summary>
public static string LayoutPage_Footer_Time {
get {
return ResourceManager.GetString("LayoutPage_Footer_Time", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Active Connections.
/// </summary>
public static string Metrics_ActiveConnections {
get {
return ResourceManager.GetString("Metrics_ActiveConnections", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Awaiting.
/// </summary>
public static string Metrics_AwaitingCount {
get {
return ResourceManager.GetString("Metrics_AwaitingCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleted Jobs.
/// </summary>
public static string Metrics_DeletedJobs {
get {
return ResourceManager.GetString("Metrics_DeletedJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued.
/// </summary>
public static string Metrics_EnqueuedCountOrNull {
get {
return ResourceManager.GetString("Metrics_EnqueuedCountOrNull", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued / Queues.
/// </summary>
public static string Metrics_EnqueuedQueuesCount {
get {
return ResourceManager.GetString("Metrics_EnqueuedQueuesCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} failed job(s) found. Retry or delete them manually..
/// </summary>
public static string Metrics_FailedCountOrNull {
get {
return ResourceManager.GetString("Metrics_FailedCountOrNull", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed Jobs.
/// </summary>
public static string Metrics_FailedJobs {
get {
return ResourceManager.GetString("Metrics_FailedJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Processing Jobs.
/// </summary>
public static string Metrics_ProcessingJobs {
get {
return ResourceManager.GetString("Metrics_ProcessingJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Recurring Jobs.
/// </summary>
public static string Metrics_RecurringJobs {
get {
return ResourceManager.GetString("Metrics_RecurringJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retries.
/// </summary>
public static string Metrics_Retries {
get {
return ResourceManager.GetString("Metrics_Retries", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Scheduled Jobs.
/// </summary>
public static string Metrics_ScheduledJobs {
get {
return ResourceManager.GetString("Metrics_ScheduledJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Servers.
/// </summary>
public static string Metrics_Servers {
get {
return ResourceManager.GetString("Metrics_Servers", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded Jobs.
/// </summary>
public static string Metrics_SucceededJobs {
get {
return ResourceManager.GetString("Metrics_SucceededJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Total Connections.
/// </summary>
public static string Metrics_TotalConnections {
get {
return ResourceManager.GetString("Metrics_TotalConnections", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Jobs.
/// </summary>
public static string NavigationMenu_Jobs {
get {
return ResourceManager.GetString("NavigationMenu_Jobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Recurring Jobs.
/// </summary>
public static string NavigationMenu_RecurringJobs {
get {
return ResourceManager.GetString("NavigationMenu_RecurringJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retries.
/// </summary>
public static string NavigationMenu_Retries {
get {
return ResourceManager.GetString("NavigationMenu_Retries", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Servers.
/// </summary>
public static string NavigationMenu_Servers {
get {
return ResourceManager.GetString("NavigationMenu_Servers", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Next.
/// </summary>
public static string Paginator_Next {
get {
return ResourceManager.GetString("Paginator_Next", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Prev.
/// </summary>
public static string Paginator_Prev {
get {
return ResourceManager.GetString("Paginator_Prev", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Total items.
/// </summary>
public static string Paginator_TotalItems {
get {
return ResourceManager.GetString("Paginator_TotalItems", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Items per page.
/// </summary>
public static string PerPageSelector_ItemsPerPage {
get {
return ResourceManager.GetString("PerPageSelector_ItemsPerPage", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Looks like the job was aborted.
/// </summary>
public static string ProcessingJobsPage_Aborted {
get {
return ResourceManager.GetString("ProcessingJobsPage_Aborted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No jobs are being processed right now..
/// </summary>
public static string ProcessingJobsPage_NoJobs {
get {
return ResourceManager.GetString("ProcessingJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Started.
/// </summary>
public static string ProcessingJobsPage_Table_Started {
get {
return ResourceManager.GetString("ProcessingJobsPage_Table_Started", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Processing Jobs.
/// </summary>
public static string ProcessingJobsPage_Title {
get {
return ResourceManager.GetString("ProcessingJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No jobs queued..
/// </summary>
public static string QueuesPage_NoJobs {
get {
return ResourceManager.GetString("QueuesPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No queued jobs found. Try to enqueue a job..
/// </summary>
public static string QueuesPage_NoQueues {
get {
return ResourceManager.GetString("QueuesPage_NoQueues", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Length.
/// </summary>
public static string QueuesPage_Table_Length {
get {
return ResourceManager.GetString("QueuesPage_Table_Length", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Nexts jobs.
/// </summary>
public static string QueuesPage_Table_NextsJobs {
get {
return ResourceManager.GetString("QueuesPage_Table_NextsJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Queue.
/// </summary>
public static string QueuesPage_Table_Queue {
get {
return ResourceManager.GetString("QueuesPage_Table_Queue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Queues.
/// </summary>
public static string QueuesPage_Title {
get {
return ResourceManager.GetString("QueuesPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Canceled.
/// </summary>
public static string RecurringJobsPage_Canceled {
get {
return ResourceManager.GetString("RecurringJobsPage_Canceled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No recurring jobs found..
/// </summary>
public static string RecurringJobsPage_NoJobs {
get {
return ResourceManager.GetString("RecurringJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cron.
/// </summary>
public static string RecurringJobsPage_Table_Cron {
get {
return ResourceManager.GetString("RecurringJobsPage_Table_Cron", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Last execution.
/// </summary>
public static string RecurringJobsPage_Table_LastExecution {
get {
return ResourceManager.GetString("RecurringJobsPage_Table_LastExecution", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Next execution.
/// </summary>
public static string RecurringJobsPage_Table_NextExecution {
get {
return ResourceManager.GetString("RecurringJobsPage_Table_NextExecution", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time zone.
/// </summary>
public static string RecurringJobsPage_Table_TimeZone {
get {
return ResourceManager.GetString("RecurringJobsPage_Table_TimeZone", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Recurring jobs.
/// </summary>
public static string RecurringJobsPage_Title {
get {
return ResourceManager.GetString("RecurringJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Triggering....
/// </summary>
public static string RecurringJobsPage_Triggering {
get {
return ResourceManager.GetString("RecurringJobsPage_Triggering", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Trigger now.
/// </summary>
public static string RecurringJobsPage_TriggerNow {
get {
return ResourceManager.GetString("RecurringJobsPage_TriggerNow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to All is OK – you have no retries..
/// </summary>
public static string RetriesPage_NoJobs {
get {
return ResourceManager.GetString("RetriesPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retries.
/// </summary>
public static string RetriesPage_Title {
get {
return ResourceManager.GetString("RetriesPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;h4&gt;Retries are working, but this page can&apos;t be displayed&lt;/h4&gt;
/// &lt;p&gt;
/// Don&apos;t worry, retries are working as expected. Your current job storage does not support
/// some queries required to show this page. Please try to update your storage or wait until
/// the full command set is implemented.
/// &lt;/p&gt;
/// &lt;p&gt;
/// Please go to the &lt;a href=&quot;{0}&quot;&gt;Scheduled jobs&lt;/a&gt; page to see all the
/// scheduled jobs including retries.
/// &lt;/p&gt;.
/// </summary>
public static string RetriesPage_Warning_Html {
get {
return ResourceManager.GetString("RetriesPage_Warning_Html", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueue now.
/// </summary>
public static string ScheduledJobsPage_EnqueueNow {
get {
return ResourceManager.GetString("ScheduledJobsPage_EnqueueNow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There are no scheduled jobs..
/// </summary>
public static string ScheduledJobsPage_NoJobs {
get {
return ResourceManager.GetString("ScheduledJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueue.
/// </summary>
public static string ScheduledJobsPage_Table_Enqueue {
get {
return ResourceManager.GetString("ScheduledJobsPage_Table_Enqueue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Scheduled.
/// </summary>
public static string ScheduledJobsPage_Table_Scheduled {
get {
return ResourceManager.GetString("ScheduledJobsPage_Table_Scheduled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Scheduled Jobs.
/// </summary>
public static string ScheduledJobsPage_Title {
get {
return ResourceManager.GetString("ScheduledJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There are no active servers. Background tasks will not be processed..
/// </summary>
public static string ServersPage_NoServers {
get {
return ResourceManager.GetString("ServersPage_NoServers", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Heartbeat.
/// </summary>
public static string ServersPage_Table_Heartbeat {
get {
return ResourceManager.GetString("ServersPage_Table_Heartbeat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Name.
/// </summary>
public static string ServersPage_Table_Name {
get {
return ResourceManager.GetString("ServersPage_Table_Name", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Queues.
/// </summary>
public static string ServersPage_Table_Queues {
get {
return ResourceManager.GetString("ServersPage_Table_Queues", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Started.
/// </summary>
public static string ServersPage_Table_Started {
get {
return ResourceManager.GetString("ServersPage_Table_Started", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Workers.
/// </summary>
public static string ServersPage_Table_Workers {
get {
return ResourceManager.GetString("ServersPage_Table_Workers", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Servers.
/// </summary>
public static string ServersPage_Title {
get {
return ResourceManager.GetString("ServersPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No succeeded jobs found..
/// </summary>
public static string SucceededJobsPage_NoJobs {
get {
return ResourceManager.GetString("SucceededJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded.
/// </summary>
public static string SucceededJobsPage_Table_Succeeded {
get {
return ResourceManager.GetString("SucceededJobsPage_Table_Succeeded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Total Duration.
/// </summary>
public static string SucceededJobsPage_Table_TotalDuration {
get {
return ResourceManager.GetString("SucceededJobsPage_Table_TotalDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded Jobs.
/// </summary>
public static string SucceededJobsPage_Title {
get {
return ResourceManager.GetString("SucceededJobsPage_Title", resourceCulture);
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AwaitingJobsPage_ContinuationsWarning_Text" xml:space="preserve">
<value>Las continuaciones funcionan correctamente, pero tu sistema de almacenamiento de tareas actual no soporta algunas consultas necesarias para mostrar esta página. Actualiza tu sistema de almacenamiento o espera hasta que éste soporte esta funcionalidad</value>
</data>
<data name="AwaitingJobsPage_ContinuationsWarning_Title" xml:space="preserve">
<value>Las continuaciones funcionan, pero esta página no se puede mostrar.</value>
</data>
<data name="AwaitingJobsPage_NoJobs" xml:space="preserve">
<value>No se han encontrado tareas en espera</value>
</data>
<data name="AwaitingJobsPage_Table_Options" xml:space="preserve">
<value>Opciones</value>
</data>
<data name="AwaitingJobsPage_Table_Parent" xml:space="preserve">
<value>Padre</value>
<comment>Fuzzy</comment>
</data>
<data name="AwaitingJobsPage_Title" xml:space="preserve">
<value>Tareas en espera</value>
</data>
<data name="Common_Created" xml:space="preserve">
<value>Creado</value>
</data>
<data name="Common_Delete" xml:space="preserve">
<value>Eliminar</value>
</data>
<data name="Common_DeleteConfirm" xml:space="preserve">
<value>¿Estás seguro que quieres ELIMINAR TODAS las tareas seleccionadas?</value>
</data>
<data name="Common_Deleting" xml:space="preserve">
<value>Eliminando...</value>
</data>
<data name="Common_DeleteSelected" xml:space="preserve">
<value>Eliminar seleccionados</value>
</data>
<data name="Common_EnqueueButton_Text" xml:space="preserve">
<value>Poner tareas en la cola</value>
</data>
<data name="Common_Enqueueing" xml:space="preserve">
<value>Poniendo en la cola...</value>
</data>
<data name="Common_Fetched" xml:space="preserve">
<value>Obtenido</value>
<comment>Fuzzy</comment>
</data>
<data name="Common_Id" xml:space="preserve">
<value>Id</value>
</data>
<data name="Common_Job" xml:space="preserve">
<value>Tarea</value>
</data>
<data name="Common_JobExpired" xml:space="preserve">
<value>Tarea expirada</value>
</data>
<data name="Common_JobStateChanged_Text" xml:space="preserve">
<value>El estado de la tarea ha cambiado misentras se obtenia información.</value>
<comment>Fuzzy</comment>
</data>
<data name="Common_LessDetails" xml:space="preserve">
<value>Menos detalles</value>
</data>
<data name="Common_MoreDetails" xml:space="preserve">
<value>Más detalles</value>
</data>
<data name="Common_NotAvailable" xml:space="preserve">
<value>N/D</value>
</data>
<data name="Common_PeriodDay" xml:space="preserve">
<value>Día</value>
</data>
<data name="Common_PeriodWeek" xml:space="preserve">
<value>Semana</value>
</data>
<data name="Common_Reason" xml:space="preserve">
<value>Razón</value>
</data>
<data name="Common_RequeueJobs" xml:space="preserve">
<value>Volver a poner a la cola las tareas</value>
<comment>Fuzzy</comment>
</data>
<data name="Common_Retry" xml:space="preserve">
<value>Reintentar</value>
</data>
<data name="Common_Server" xml:space="preserve">
<value>Servidor</value>
</data>
<data name="Common_State" xml:space="preserve">
<value>Estado</value>
</data>
<data name="Common_Unknown" xml:space="preserve">
<value>Desconocido</value>
</data>
<data name="DeletedJobsPage_NoJobs" xml:space="preserve">
<value>No se han encontrado tareas eliminadas.</value>
</data>
<data name="DeletedJobsPage_Table_Deleted" xml:space="preserve">
<value>Eliminado</value>
</data>
<data name="DeletedJobsPage_Title" xml:space="preserve">
<value>Tareas eliminadas</value>
</data>
<data name="EnqueuedJobsPage_NoJobs" xml:space="preserve">
<value>La cola esta vacía.</value>
</data>
<data name="EnqueuedJobsPage_Title" xml:space="preserve">
<value>Tareas en la cola</value>
</data>
<data name="FailedJobsPage_FailedJobsNotExpire_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;Las tareas fallidas no expiran&lt;/strong&gt; para permititrte volver a añadirlas a la cola sin ninguna presión. Puedes añadirlas de nuevo a la cola, eliminarlas manualmente o aplicar el atributo &lt;code&gt;AutomaticRetry(OnAttemptsExceeded = AttemptsExceededAction.Delete)&lt;/code&gt; para eliminarlas automáticamente.</value>
</data>
<data name="FailedJobsPage_NoJobs" xml:space="preserve">
<value>No hay tareas con errores.</value>
</data>
<data name="FailedJobsPage_Table_Failed" xml:space="preserve">
<value>Con errores</value>
</data>
<data name="FailedJobsPage_Title" xml:space="preserve">
<value>Tareas con errores</value>
</data>
<data name="FetchedJobsPage_NoJobs" xml:space="preserve">
<value>La cola está vacía</value>
</data>
<data name="FetchedJobsPage_Title" xml:space="preserve">
<value>Tareas obtenidas</value>
<comment>Fuzzy</comment>
</data>
<data name="HomePage_HistoryGraph" xml:space="preserve">
<value>Gráfico histórico</value>
</data>
<data name="HomePage_RealtimeGraph" xml:space="preserve">
<value>Gráfico en tiempo real</value>
</data>
<data name="HomePage_Title" xml:space="preserve">
<value>Panel</value>
<comment>Fuzzy</comment>
</data>
<data name="JobDetailsPage_Created" xml:space="preserve">
<value>Creado</value>
</data>
<data name="JobDetailsPage_DeleteConfirm" xml:space="preserve">
<value>¿Estás seguro que quieres eliminar esta tarea?</value>
</data>
<data name="JobDetailsPage_State" xml:space="preserve">
<value>Estado</value>
</data>
<data name="JobDetailsPage_JobAbortedNotActive_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;La tarea ha sido abortada&lt;/strong&gt; - ha sido procesada por el servidor &lt;code&gt;{0}&lt;/code&gt; que no está en la lista de &lt;a href="{1}"&gt;servidores activos&lt;/a&gt; por ahora. Se recuperará automáticamente despues del periodo de invisibilidad, pero puedes volverla a poner en la cola o eliminarla manualmente.</value>
</data>
<data name="JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;La tarea ha sido abortada&lt;/strong&gt; - ha sido procesada por el servidor &lt;code&gt;{0}&lt;/code&gt; que ha reportado un latido hace más de un minuto. Se recuperará automáticamente despues del periodo de invisibilidad, pero puedes volverla a poner en la cola o eliminarla manualmente.</value>
</data>
<data name="JobDetailsPage_JobExpired" xml:space="preserve">
<value>La tarea con id '{0}' ha expirado o no se ha encontrado en el servidor</value>
</data>
<data name="JobDetailsPage_JobFinished_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;La tarea ha finalizado&lt;/strong&gt;. Se va a eliminar automáticamente en &lt;em&gt;&lt;abbr data-moment="{0}"&gt;{1}&lt;/abbr&gt;&lt;/em&gt;</value>
</data>
<data name="JobDetailsPage_JobId" xml:space="preserve">
<value>ID Tarea</value>
</data>
<data name="JobDetailsPage_Requeue" xml:space="preserve">
<value>Volver a poner en la cola</value>
<comment>Fuzzy</comment>
</data>
<data name="LayoutPage_Back" xml:space="preserve">
<value>Volver</value>
</data>
<data name="LayoutPage_Footer_Generatedms" xml:space="preserve">
<value>Generado: {0}ms</value>
</data>
<data name="LayoutPage_Footer_Time" xml:space="preserve">
<value>Hora:</value>
</data>
<data name="Paginator_Next" xml:space="preserve">
<value>Siguiente</value>
</data>
<data name="Paginator_Prev" xml:space="preserve">
<value>Anterior</value>
</data>
<data name="Paginator_TotalItems" xml:space="preserve">
<value>Total elementos</value>
</data>
<data name="PerPageSelector_ItemsPerPage" xml:space="preserve">
<value>Elementos por página</value>
</data>
<data name="ProcessingJobsPage_Aborted" xml:space="preserve">
<value>Parece que la tarea ha sido cancelada</value>
</data>
<data name="ProcessingJobsPage_NoJobs" xml:space="preserve">
<value>No hay tareas en proceso.</value>
</data>
<data name="ProcessingJobsPage_Table_Started" xml:space="preserve">
<value>Iniciado</value>
</data>
<data name="ProcessingJobsPage_Title" xml:space="preserve">
<value>Tareas en proceso</value>
</data>
<data name="QueuesPage_NoJobs" xml:space="preserve">
<value>No hay tareas en la cola.</value>
</data>
<data name="QueuesPage_NoQueues" xml:space="preserve">
<value>No se han encontrado tareas en la cola. Prueba a poner alguna.</value>
</data>
<data name="QueuesPage_Table_Length" xml:space="preserve">
<value>Longitud</value>
</data>
<data name="QueuesPage_Table_NextsJobs" xml:space="preserve">
<value>Próximas tareas</value>
</data>
<data name="QueuesPage_Table_Queue" xml:space="preserve">
<value>Cola</value>
</data>
<data name="QueuesPage_Title" xml:space="preserve">
<value>Colas</value>
</data>
<data name="RecurringJobsPage_Canceled" xml:space="preserve">
<value>Cancelado</value>
</data>
<data name="RecurringJobsPage_NoJobs" xml:space="preserve">
<value>No se han encontrado tareas recurrentes</value>
</data>
<data name="RecurringJobsPage_Table_Cron" xml:space="preserve">
<value>Cron</value>
</data>
<data name="RecurringJobsPage_Table_LastExecution" xml:space="preserve">
<value>Última ejecución</value>
</data>
<data name="RecurringJobsPage_Table_NextExecution" xml:space="preserve">
<value>Próxima ejecución</value>
</data>
<data name="RecurringJobsPage_Table_TimeZone" xml:space="preserve">
<value>Zona horaria</value>
</data>
<data name="RecurringJobsPage_Title" xml:space="preserve">
<value>Tareas recurrentes</value>
</data>
<data name="RecurringJobsPage_Triggering" xml:space="preserve">
<value>Lanzando...</value>
</data>
<data name="RecurringJobsPage_TriggerNow" xml:space="preserve">
<value>Lanzar ahora</value>
</data>
<data name="RetriesPage_NoJobs" xml:space="preserve">
<value>Todo va bien - no hay ningún reintento.</value>
</data>
<data name="RetriesPage_Title" xml:space="preserve">
<value>Reintentos</value>
</data>
<data name="RetriesPage_Warning_Html" xml:space="preserve">
<value>&lt;h4&gt;Los reintentos están funcionando, pero esta página no se puede mostrar&lt;/h4&gt;
&lt;p&gt;
No te preocupes, los reintentos fucionan como deberian, pero tu sistema de almacenamiento de tareas actual no soporta algunas consultas necesarias para mostrar esta página. Actualiza tu sistema de almacenamiento o espera hasta que éste soporte esta funcionalidad
&lt;/p&gt;
&lt;p&gt;
Visita la página &lt;a href="{0}"&gt;Tareas programadas&lt;/a&gt; para ver todas las tareas programadas, incluidos los reintentos.
&lt;/p&gt; </value>
</data>
<data name="ScheduledJobsPage_EnqueueNow" xml:space="preserve">
<value>Poner en la cola ahora</value>
</data>
<data name="ScheduledJobsPage_NoJobs" xml:space="preserve">
<value>No hay tareas programadas.</value>
</data>
<data name="ScheduledJobsPage_Table_Enqueue" xml:space="preserve">
<value>Poner en la cola</value>
</data>
<data name="ScheduledJobsPage_Table_Scheduled" xml:space="preserve">
<value>Programadas</value>
</data>
<data name="ScheduledJobsPage_Title" xml:space="preserve">
<value>Tareas programadas</value>
</data>
<data name="ServersPage_NoServers" xml:space="preserve">
<value>No hay ningún servidor activo. Las tareas en segundo plano no serán procesadas.</value>
</data>
<data name="ServersPage_Table_Heartbeat" xml:space="preserve">
<value>Latido</value>
<comment>Fuzzy</comment>
</data>
<data name="ServersPage_Table_Name" xml:space="preserve">
<value>Nombre</value>
</data>
<data name="ServersPage_Table_Queues" xml:space="preserve">
<value>Colas</value>
</data>
<data name="ServersPage_Table_Started" xml:space="preserve">
<value>Iniciada</value>
</data>
<data name="ServersPage_Table_Workers" xml:space="preserve">
<value>Trabajadores</value>
<comment>Fuzzy</comment>
</data>
<data name="ServersPage_Title" xml:space="preserve">
<value>Servidores</value>
</data>
<data name="SucceededJobsPage_NoJobs" xml:space="preserve">
<value>No se han encontrado tareas completadas</value>
</data>
<data name="SucceededJobsPage_Table_Succeeded" xml:space="preserve">
<value>Completadas</value>
</data>
<data name="SucceededJobsPage_Table_TotalDuration" xml:space="preserve">
<value>Duración total</value>
</data>
<data name="SucceededJobsPage_Title" xml:space="preserve">
<value>Tareas completadas</value>
</data>
<data name="JobsSidebarMenu_Awaiting" xml:space="preserve">
<value>En espera</value>
</data>
<data name="JobsSidebarMenu_Deleted" xml:space="preserve">
<value>Eliminado</value>
</data>
<data name="JobsSidebarMenu_Failed" xml:space="preserve">
<value>Con errores</value>
</data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve">
<value>Procesando</value>
</data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve">
<value>Programadas</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<value>Completadas</value>
</data>
<data name="NavigationMenu_Jobs" xml:space="preserve">
<value>Tareas</value>
</data>
<data name="NavigationMenu_RecurringJobs" xml:space="preserve">
<value>Tareas recurrentes</value>
</data>
<data name="NavigationMenu_Retries" xml:space="preserve">
<value>Reintentos</value>
</data>
<data name="NavigationMenu_Servers" xml:space="preserve">
<value>Servidores</value>
</data>
<data name="Common_CannotFindTargetMethod" xml:space="preserve">
<value>No se puede encontrar el método destino</value>
<comment>Fuzzy</comment>
</data>
<data name="Common_Enqueued" xml:space="preserve">
<value>En la cola</value>
</data>
<data name="Common_NoState" xml:space="preserve">
<value>Sin estado</value>
</data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>En la cola</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Conexiones activas</value>
</data>
<data name="Metrics_DeletedJobs" xml:space="preserve">
<value>Tareas eliminadas</value>
</data>
<data name="Metrics_FailedJobs" xml:space="preserve">
<value>Tareas fallidas</value>
</data>
<data name="Metrics_ProcessingJobs" xml:space="preserve">
<value>Tareas en proceso</value>
</data>
<data name="Metrics_RecurringJobs" xml:space="preserve">
<value>Tareas recurrentes</value>
</data>
<data name="Metrics_Retries" xml:space="preserve">
<value>Reintentos</value>
</data>
<data name="Metrics_ScheduledJobs" xml:space="preserve">
<value>Tareas programadas</value>
</data>
<data name="Metrics_Servers" xml:space="preserve">
<value>Servidores</value>
</data>
<data name="Metrics_SucceededJobs" xml:space="preserve">
<value>Tareas completadas</value>
</data>
<data name="Metrics_TotalConnections" xml:space="preserve">
<value>Conexiones totales</value>
</data>
<data name="Common_Condition" xml:space="preserve">
<value>Condición</value>
</data>
<data name="Common_Continuations" xml:space="preserve">
<value>Continuaciones</value>
</data>
<data name="Metrics_AwaitingCount" xml:space="preserve">
<value>En espera</value>
</data>
<data name="Metrics_EnqueuedCountOrNull" xml:space="preserve">
<value>En la cola</value>
</data>
<data name="Metrics_EnqueuedQueuesCount" xml:space="preserve">
<value>En la cola / Colas</value>
</data>
<data name="HomePage_GraphHover_Failed" xml:space="preserve">
<value>Con errores</value>
</data>
<data name="HomePage_GraphHover_Succeeded" xml:space="preserve">
<value>Completados</value>
</data>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AwaitingJobsPage_ContinuationsWarning_Text" xml:space="preserve">
<value>Don't worry, continuations are working as expected. But your current job storage does not support some queries required to show this page. Please try to update your storage or wait until the full command set is implemented.</value>
</data>
<data name="AwaitingJobsPage_ContinuationsWarning_Title" xml:space="preserve">
<value>Continuations are working, but this page can't be displayed</value>
</data>
<data name="AwaitingJobsPage_NoJobs" xml:space="preserve">
<value>No jobs found in awaiting state.</value>
</data>
<data name="AwaitingJobsPage_Table_Options" xml:space="preserve">
<value>Options</value>
</data>
<data name="AwaitingJobsPage_Table_Parent" xml:space="preserve">
<value>Parent</value>
</data>
<data name="AwaitingJobsPage_Title" xml:space="preserve">
<value>Awaiting Jobs</value>
</data>
<data name="Common_Created" xml:space="preserve">
<value>Created</value>
</data>
<data name="Common_Delete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="Common_DeleteConfirm" xml:space="preserve">
<value>Do you really want to DELETE ALL selected jobs?</value>
</data>
<data name="Common_Deleting" xml:space="preserve">
<value>Deleting...</value>
</data>
<data name="Common_DeleteSelected" xml:space="preserve">
<value>Delete selected</value>
</data>
<data name="Common_EnqueueButton_Text" xml:space="preserve">
<value>Enqueue jobs</value>
</data>
<data name="Common_Enqueueing" xml:space="preserve">
<value>Enqueueing...</value>
</data>
<data name="Common_Fetched" xml:space="preserve">
<value>Fetched</value>
</data>
<data name="Common_Id" xml:space="preserve">
<value>Id</value>
</data>
<data name="Common_Job" xml:space="preserve">
<value>Job</value>
</data>
<data name="Common_JobExpired" xml:space="preserve">
<value>Job expired.</value>
</data>
<data name="Common_JobStateChanged_Text" xml:space="preserve">
<value>Job's state has been changed while fetching data.</value>
</data>
<data name="Common_LessDetails" xml:space="preserve">
<value>Less details...</value>
</data>
<data name="Common_MoreDetails" xml:space="preserve">
<value>More details...</value>
</data>
<data name="Common_NotAvailable" xml:space="preserve">
<value>N/A</value>
</data>
<data name="Common_PeriodDay" xml:space="preserve">
<value>Day</value>
</data>
<data name="Common_PeriodWeek" xml:space="preserve">
<value>Week</value>
</data>
<data name="Common_Reason" xml:space="preserve">
<value>Reason</value>
</data>
<data name="Common_RequeueJobs" xml:space="preserve">
<value>Requeue jobs</value>
</data>
<data name="Common_Retry" xml:space="preserve">
<value>Retry</value>
</data>
<data name="Common_Server" xml:space="preserve">
<value>Server</value>
</data>
<data name="Common_State" xml:space="preserve">
<value>State</value>
</data>
<data name="Common_Unknown" xml:space="preserve">
<value>Unknown</value>
</data>
<data name="DeletedJobsPage_NoJobs" xml:space="preserve">
<value>No deleted jobs found.</value>
</data>
<data name="DeletedJobsPage_Table_Deleted" xml:space="preserve">
<value>Deleted</value>
</data>
<data name="DeletedJobsPage_Title" xml:space="preserve">
<value>Deleted Jobs</value>
</data>
<data name="EnqueuedJobsPage_NoJobs" xml:space="preserve">
<value>The queue is empty.</value>
</data>
<data name="EnqueuedJobsPage_Title" xml:space="preserve">
<value>Enqueued jobs</value>
</data>
<data name="FailedJobsPage_FailedJobsNotExpire_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;Failed jobs do not become expired&lt;/strong&gt; to allow you to re-queue them without any
time pressure. You should re-queue or delete them manually, or apply &lt;code&gt;AutomaticRetry(OnAttemptsExceeded = AttemptsExceededAction.Delete)&lt;/code&gt;
attribute to delete them automatically.</value>
</data>
<data name="FailedJobsPage_NoJobs" xml:space="preserve">
<value>You have no failed jobs at the moment.</value>
</data>
<data name="FailedJobsPage_Table_Failed" xml:space="preserve">
<value>Failed</value>
</data>
<data name="FailedJobsPage_Title" xml:space="preserve">
<value>Failed Jobs</value>
</data>
<data name="FetchedJobsPage_NoJobs" xml:space="preserve">
<value>The queue is empty.</value>
</data>
<data name="FetchedJobsPage_Title" xml:space="preserve">
<value>Fetched jobs</value>
</data>
<data name="HomePage_HistoryGraph" xml:space="preserve">
<value>History graph</value>
</data>
<data name="HomePage_RealtimeGraph" xml:space="preserve">
<value>Realtime graph</value>
</data>
<data name="HomePage_Title" xml:space="preserve">
<value>Dashboard</value>
</data>
<data name="JobDetailsPage_Created" xml:space="preserve">
<value>Created</value>
</data>
<data name="JobDetailsPage_DeleteConfirm" xml:space="preserve">
<value>Do you really want to delete this job?</value>
</data>
<data name="JobDetailsPage_State" xml:space="preserve">
<value>State</value>
</data>
<data name="JobDetailsPage_JobAbortedNotActive_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;The job was aborted&lt;/strong&gt; – it is processed by server
&lt;code&gt;{0}&lt;/code&gt; which is not in the
&lt;a href="{1}"&gt;active servers&lt;/a&gt; list for now.
It will be retried automatically after invisibility timeout, but you can
also re-queue or delete it manually.</value>
</data>
<data name="JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;Looks like the job was aborted&lt;/strong&gt; – it is processed by server
&lt;code&gt;{0}&lt;/code&gt;, which reported its heartbeat more than 1 minute ago.
It will be retried automatically after invisibility timeout, but you can
also re-queue or delete it manually.</value>
</data>
<data name="JobDetailsPage_JobExpired" xml:space="preserve">
<value>Background job '{0}' has expired or could not be found on the server.</value>
</data>
<data name="JobDetailsPage_JobFinished_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;The job is finished&lt;/strong&gt;.
It will be removed automatically &lt;em&gt;&lt;abbr data-moment="{0}"&gt;{1}&lt;/abbr&gt;&lt;/em&gt;.</value>
</data>
<data name="JobDetailsPage_JobId" xml:space="preserve">
<value>Job ID</value>
</data>
<data name="JobDetailsPage_Requeue" xml:space="preserve">
<value>Requeue</value>
</data>
<data name="LayoutPage_Back" xml:space="preserve">
<value>Back to site</value>
</data>
<data name="LayoutPage_Footer_Generatedms" xml:space="preserve">
<value>Generated: {0}ms</value>
</data>
<data name="LayoutPage_Footer_Time" xml:space="preserve">
<value>Time:</value>
</data>
<data name="Paginator_Next" xml:space="preserve">
<value>Next</value>
</data>
<data name="Paginator_Prev" xml:space="preserve">
<value>Prev</value>
</data>
<data name="Paginator_TotalItems" xml:space="preserve">
<value>Total items</value>
</data>
<data name="PerPageSelector_ItemsPerPage" xml:space="preserve">
<value>Items per page</value>
</data>
<data name="ProcessingJobsPage_Aborted" xml:space="preserve">
<value>Looks like the job was aborted</value>
</data>
<data name="ProcessingJobsPage_NoJobs" xml:space="preserve">
<value>No jobs are being processed right now.</value>
</data>
<data name="ProcessingJobsPage_Table_Started" xml:space="preserve">
<value>Started</value>
</data>
<data name="ProcessingJobsPage_Title" xml:space="preserve">
<value>Processing Jobs</value>
</data>
<data name="QueuesPage_NoJobs" xml:space="preserve">
<value>No jobs queued.</value>
</data>
<data name="QueuesPage_NoQueues" xml:space="preserve">
<value>No queued jobs found. Try to enqueue a job.</value>
</data>
<data name="QueuesPage_Table_Length" xml:space="preserve">
<value>Length</value>
</data>
<data name="QueuesPage_Table_NextsJobs" xml:space="preserve">
<value>Next jobs</value>
</data>
<data name="QueuesPage_Table_Queue" xml:space="preserve">
<value>Queue</value>
</data>
<data name="QueuesPage_Title" xml:space="preserve">
<value>Queues</value>
</data>
<data name="RecurringJobsPage_Canceled" xml:space="preserve">
<value>Canceled</value>
</data>
<data name="RecurringJobsPage_NoJobs" xml:space="preserve">
<value>No recurring jobs found.</value>
</data>
<data name="RecurringJobsPage_Table_Cron" xml:space="preserve">
<value>Cron</value>
</data>
<data name="RecurringJobsPage_Table_LastExecution" xml:space="preserve">
<value>Last execution</value>
</data>
<data name="RecurringJobsPage_Table_NextExecution" xml:space="preserve">
<value>Next execution</value>
</data>
<data name="RecurringJobsPage_Table_TimeZone" xml:space="preserve">
<value>Time zone</value>
</data>
<data name="RecurringJobsPage_Title" xml:space="preserve">
<value>Recurring jobs</value>
</data>
<data name="RecurringJobsPage_Triggering" xml:space="preserve">
<value>Triggering...</value>
</data>
<data name="RecurringJobsPage_TriggerNow" xml:space="preserve">
<value>Trigger now</value>
</data>
<data name="RetriesPage_NoJobs" xml:space="preserve">
<value>All is OK – you have no retries.</value>
</data>
<data name="RetriesPage_Title" xml:space="preserve">
<value>Retries</value>
</data>
<data name="RetriesPage_Warning_Html" xml:space="preserve">
<value>&lt;h4&gt;Retries are working, but this page can't be displayed&lt;/h4&gt;
&lt;p&gt;
Don't worry, retries are working as expected. Your current job storage does not support
some queries required to show this page. Please try to update your storage or wait until
the full command set is implemented.
&lt;/p&gt;
&lt;p&gt;
Please go to the &lt;a href="{0}"&gt;Scheduled jobs&lt;/a&gt; page to see all the
scheduled jobs including retries.
&lt;/p&gt;</value>
</data>
<data name="ScheduledJobsPage_EnqueueNow" xml:space="preserve">
<value>Enqueue now</value>
</data>
<data name="ScheduledJobsPage_NoJobs" xml:space="preserve">
<value>There are no scheduled jobs.</value>
</data>
<data name="ScheduledJobsPage_Table_Enqueue" xml:space="preserve">
<value>Enqueue</value>
</data>
<data name="ScheduledJobsPage_Table_Scheduled" xml:space="preserve">
<value>Scheduled</value>
</data>
<data name="ScheduledJobsPage_Title" xml:space="preserve">
<value>Scheduled Jobs</value>
</data>
<data name="ServersPage_NoServers" xml:space="preserve">
<value>There are no active servers. Background tasks will not be processed.</value>
</data>
<data name="ServersPage_Table_Heartbeat" xml:space="preserve">
<value>Heartbeat</value>
</data>
<data name="ServersPage_Table_Name" xml:space="preserve">
<value>Name</value>
</data>
<data name="ServersPage_Table_Queues" xml:space="preserve">
<value>Queues</value>
</data>
<data name="ServersPage_Table_Started" xml:space="preserve">
<value>Started</value>
</data>
<data name="ServersPage_Table_Workers" xml:space="preserve">
<value>Workers</value>
</data>
<data name="ServersPage_Title" xml:space="preserve">
<value>Servers</value>
</data>
<data name="SucceededJobsPage_NoJobs" xml:space="preserve">
<value>No succeeded jobs found.</value>
</data>
<data name="SucceededJobsPage_Table_Succeeded" xml:space="preserve">
<value>Succeeded</value>
</data>
<data name="SucceededJobsPage_Table_TotalDuration" xml:space="preserve">
<value>Total Duration</value>
</data>
<data name="SucceededJobsPage_Title" xml:space="preserve">
<value>Succeeded Jobs</value>
</data>
<data name="JobsSidebarMenu_Awaiting" xml:space="preserve">
<value>Awaiting</value>
</data>
<data name="JobsSidebarMenu_Deleted" xml:space="preserve">
<value>Deleted</value>
</data>
<data name="JobsSidebarMenu_Failed" xml:space="preserve">
<value>Failed</value>
</data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve">
<value>Processing</value>
</data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve">
<value>Scheduled</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<value>Succeeded</value>
</data>
<data name="NavigationMenu_Jobs" xml:space="preserve">
<value>Jobs</value>
</data>
<data name="NavigationMenu_RecurringJobs" xml:space="preserve">
<value>Recurring Jobs</value>
</data>
<data name="NavigationMenu_Retries" xml:space="preserve">
<value>Retries</value>
</data>
<data name="NavigationMenu_Servers" xml:space="preserve">
<value>Servers</value>
</data>
<data name="Common_CannotFindTargetMethod" xml:space="preserve">
<value>Can not find the target method.</value>
</data>
<data name="Common_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Common_NoState" xml:space="preserve">
<value>No state</value>
</data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value>
</data>
<data name="Metrics_DeletedJobs" xml:space="preserve">
<value>Deleted Jobs</value>
</data>
<data name="Metrics_FailedJobs" xml:space="preserve">
<value>Failed Jobs</value>
</data>
<data name="Metrics_ProcessingJobs" xml:space="preserve">
<value>Processing Jobs</value>
</data>
<data name="Metrics_RecurringJobs" xml:space="preserve">
<value>Recurring Jobs</value>
</data>
<data name="Metrics_Retries" xml:space="preserve">
<value>Retries</value>
</data>
<data name="Metrics_ScheduledJobs" xml:space="preserve">
<value>Scheduled Jobs</value>
</data>
<data name="Metrics_Servers" xml:space="preserve">
<value>Servers</value>
</data>
<data name="Metrics_SucceededJobs" xml:space="preserve">
<value>Succeeded Jobs</value>
</data>
<data name="Metrics_TotalConnections" xml:space="preserve">
<value>Total Connections</value>
</data>
<data name="Common_Condition" xml:space="preserve">
<value>Condition</value>
</data>
<data name="Common_Continuations" xml:space="preserve">
<value>Continuations</value>
</data>
<data name="Metrics_AwaitingCount" xml:space="preserve">
<value>Awaiting</value>
</data>
<data name="Metrics_EnqueuedCountOrNull" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_EnqueuedQueuesCount" xml:space="preserve">
<value>Enqueued / Queues</value>
</data>
<data name="Metrics_FailedCountOrNull" xml:space="preserve">
<value>{0} failed job(s) found. Retry or delete them manually.</value>
</data>
<data name="HomePage_GraphHover_Failed" xml:space="preserve">
<value>Failed</value>
</data>
<data name="HomePage_GraphHover_Succeeded" xml:space="preserve">
<value>Succeeded</value>
</data>
</root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AwaitingJobsPage_ContinuationsWarning_Text" xml:space="preserve">
<value>Don't worry, continuations are working as expected. But your current job storage does not support some queries required to show this page. Please try to update your storage or wait until the full command set is implemented.</value>
</data>
<data name="AwaitingJobsPage_ContinuationsWarning_Title" xml:space="preserve">
<value>作业继续执行中,但是无法显示该页面</value>
</data>
<data name="AwaitingJobsPage_NoJobs" xml:space="preserve">
<value>没有等待中的作业</value>
</data>
<data name="AwaitingJobsPage_Table_Options" xml:space="preserve">
<value>选项</value>
</data>
<data name="AwaitingJobsPage_Table_Parent" xml:space="preserve">
<value>父级</value>
</data>
<data name="AwaitingJobsPage_Title" xml:space="preserve">
<value>等待中的作业</value>
</data>
<data name="Common_Created" xml:space="preserve">
<value>创建</value>
</data>
<data name="Common_Delete" xml:space="preserve">
<value>删除</value>
</data>
<data name="Common_DeleteConfirm" xml:space="preserve">
<value>您确定要删除所选的全部作业吗?</value>
</data>
<data name="Common_Deleting" xml:space="preserve">
<value>删除中...</value>
</data>
<data name="Common_DeleteSelected" xml:space="preserve">
<value>删除选中</value>
</data>
<data name="Common_EnqueueButton_Text" xml:space="preserve">
<value>队列作业</value>
</data>
<data name="Common_Enqueueing" xml:space="preserve">
<value>加入队列中...</value>
</data>
<data name="Common_Fetched" xml:space="preserve">
<value>获取到</value>
</data>
<data name="Common_Id" xml:space="preserve">
<value>编号</value>
</data>
<data name="Common_Job" xml:space="preserve">
<value>作业</value>
</data>
<data name="Common_JobExpired" xml:space="preserve">
<value>作业过期.</value>
</data>
<data name="Common_JobStateChanged_Text" xml:space="preserve">
<value>作业状态已经发生变化</value>
</data>
<data name="Common_LessDetails" xml:space="preserve">
<value>收起...</value>
</data>
<data name="Common_MoreDetails" xml:space="preserve">
<value>更多...</value>
</data>
<data name="Common_NotAvailable" xml:space="preserve">
<value>N/A</value>
</data>
<data name="Common_PeriodDay" xml:space="preserve">
<value></value>
</data>
<data name="Common_PeriodWeek" xml:space="preserve">
<value></value>
</data>
<data name="Common_Reason" xml:space="preserve">
<value>原因</value>
</data>
<data name="Common_RequeueJobs" xml:space="preserve">
<value>重新加入队列</value>
</data>
<data name="Common_Retry" xml:space="preserve">
<value>重试</value>
</data>
<data name="Common_Server" xml:space="preserve">
<value>服务器</value>
</data>
<data name="Common_State" xml:space="preserve">
<value>状态</value>
</data>
<data name="Common_Unknown" xml:space="preserve">
<value>未知</value>
</data>
<data name="DeletedJobsPage_NoJobs" xml:space="preserve">
<value>没有找到任何已经删除的作业</value>
</data>
<data name="DeletedJobsPage_Table_Deleted" xml:space="preserve">
<value>删除</value>
</data>
<data name="DeletedJobsPage_Title" xml:space="preserve">
<value>删除作业</value>
</data>
<data name="EnqueuedJobsPage_NoJobs" xml:space="preserve">
<value>没有任何作业</value>
</data>
<data name="EnqueuedJobsPage_Title" xml:space="preserve">
<value>队列作业</value>
</data>
<data name="FailedJobsPage_FailedJobsNotExpire_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;Failed jobs do not become expired&lt;/strong&gt; to allow you to re-queue them without any
time pressure. You should re-queue or delete them manually, or apply &lt;code&gt;AutomaticRetry(OnAttemptsExceeded = AttemptsExceededAction.Delete)&lt;/code&gt;
attribute to delete them automatically.</value>
</data>
<data name="FailedJobsPage_NoJobs" xml:space="preserve">
<value>没有失败的作业</value>
</data>
<data name="FailedJobsPage_Table_Failed" xml:space="preserve">
<value>失败</value>
</data>
<data name="FailedJobsPage_Title" xml:space="preserve">
<value>失败的作业</value>
</data>
<data name="FetchedJobsPage_NoJobs" xml:space="preserve">
<value>没有任何作业</value>
</data>
<data name="FetchedJobsPage_Title" xml:space="preserve">
<value>Fetched jobs</value>
</data>
<data name="HomePage_HistoryGraph" xml:space="preserve">
<value>历史图表走势</value>
</data>
<data name="HomePage_RealtimeGraph" xml:space="preserve">
<value>实时图表走势</value>
</data>
<data name="HomePage_Title" xml:space="preserve">
<value>仪表盘</value>
</data>
<data name="JobDetailsPage_Created" xml:space="preserve">
<value>创建</value>
</data>
<data name="JobDetailsPage_DeleteConfirm" xml:space="preserve">
<value>确认删除这个作业吗?</value>
</data>
<data name="JobDetailsPage_State" xml:space="preserve">
<value>状态</value>
</data>
<data name="JobDetailsPage_JobAbortedNotActive_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;The job was aborted&lt;/strong&gt; – it is processed by server
&lt;code&gt;{0}&lt;/code&gt; which is not in the
&lt;a href="{1}"&gt;active servers&lt;/a&gt; list for now.
It will be retried automatically after invisibility timeout, but you can
also re-queue or delete it manually.</value>
</data>
<data name="JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;作业疑似终止&lt;/strong&gt; – 服务器代码
&lt;code&gt;{0}&lt;/code&gt;, 心跳包超过1分钟请求超时后,作业会自动重试。但也可以重新加入队列或者删除作业。</value>
</data>
<data name="JobDetailsPage_JobExpired" xml:space="preserve">
<value>Background job '{0}' has expired or could not be found on the server.</value>
</data>
<data name="JobDetailsPage_JobFinished_Warning_Html" xml:space="preserve">
<value>&lt;strong&gt;The job is finished&lt;/strong&gt;.
It will be removed automatically &lt;em&gt;&lt;abbr data-moment="{0}"&gt;{1}&lt;/abbr&gt;&lt;/em&gt;.</value>
</data>
<data name="JobDetailsPage_JobId" xml:space="preserve">
<value>Job Id</value>
</data>
<data name="JobDetailsPage_Requeue" xml:space="preserve">
<value>重试</value>
</data>
<data name="LayoutPage_Back" xml:space="preserve">
<value>返回应用</value>
</data>
<data name="LayoutPage_Footer_Generatedms" xml:space="preserve">
<value>耗时: {0}ms</value>
</data>
<data name="LayoutPage_Footer_Time" xml:space="preserve">
<value>时间:</value>
</data>
<data name="Paginator_Next" xml:space="preserve">
<value>下一步</value>
</data>
<data name="Paginator_Prev" xml:space="preserve">
<value>上一步</value>
</data>
<data name="Paginator_TotalItems" xml:space="preserve">
<value>总条数</value>
</data>
<data name="PerPageSelector_ItemsPerPage" xml:space="preserve">
<value>每页条数</value>
</data>
<data name="ProcessingJobsPage_Aborted" xml:space="preserve">
<value>作业疑似终止</value>
</data>
<data name="ProcessingJobsPage_NoJobs" xml:space="preserve">
<value>没有立即执行的作业</value>
</data>
<data name="ProcessingJobsPage_Table_Started" xml:space="preserve">
<value>执行</value>
</data>
<data name="ProcessingJobsPage_Title" xml:space="preserve">
<value>执行中作业</value>
</data>
<data name="QueuesPage_NoJobs" xml:space="preserve">
<value>没有作业</value>
</data>
<data name="QueuesPage_NoQueues" xml:space="preserve">
<value>队列中不存在。尝试添加作业到队列</value>
</data>
<data name="QueuesPage_Table_Length" xml:space="preserve">
<value>长度</value>
</data>
<data name="QueuesPage_Table_NextsJobs" xml:space="preserve">
<value>下一个作业</value>
</data>
<data name="QueuesPage_Table_Queue" xml:space="preserve">
<value>队列</value>
</data>
<data name="QueuesPage_Title" xml:space="preserve">
<value>队列</value>
</data>
<data name="RecurringJobsPage_Canceled" xml:space="preserve">
<value>取消</value>
</data>
<data name="RecurringJobsPage_NoJobs" xml:space="preserve">
<value>没有作业</value>
</data>
<data name="RecurringJobsPage_Table_Cron" xml:space="preserve">
<value>Cron</value>
</data>
<data name="RecurringJobsPage_Table_LastExecution" xml:space="preserve">
<value>最后执行</value>
</data>
<data name="RecurringJobsPage_Table_NextExecution" xml:space="preserve">
<value>下一个执行</value>
</data>
<data name="RecurringJobsPage_Table_TimeZone" xml:space="preserve">
<value>时区</value>
</data>
<data name="RecurringJobsPage_Title" xml:space="preserve">
<value>定期作业</value>
</data>
<data name="RecurringJobsPage_Triggering" xml:space="preserve">
<value>执行中...</value>
</data>
<data name="RecurringJobsPage_TriggerNow" xml:space="preserve">
<value>立即执行</value>
</data>
<data name="RetriesPage_NoJobs" xml:space="preserve">
<value>没有重试的作业</value>
</data>
<data name="RetriesPage_Title" xml:space="preserve">
<value>重试</value>
</data>
<data name="RetriesPage_Warning_Html" xml:space="preserve">
<value>&lt;h4&gt;Retries are working, but this page can't be displayed&lt;/h4&gt;
&lt;p&gt;
Don't worry, retries are working as expected. Your current job storage does not support
some queries required to show this page. Please try to update your storage or wait until
the full command set is implemented.
&lt;/p&gt;
&lt;p&gt;
Please go to the &lt;a href="{0}"&gt;Scheduled jobs&lt;/a&gt; page to see all the
scheduled jobs including retries.
&lt;/p&gt;</value>
</data>
<data name="ScheduledJobsPage_EnqueueNow" xml:space="preserve">
<value>加入队列</value>
</data>
<data name="ScheduledJobsPage_NoJobs" xml:space="preserve">
<value>没有作业</value>
</data>
<data name="ScheduledJobsPage_Table_Enqueue" xml:space="preserve">
<value>队列</value>
</data>
<data name="ScheduledJobsPage_Table_Scheduled" xml:space="preserve">
<value>计划的</value>
</data>
<data name="ScheduledJobsPage_Title" xml:space="preserve">
<value>计划作业</value>
</data>
<data name="ServersPage_NoServers" xml:space="preserve">
<value>没有活动服务器。后台作业将不会被执行。</value>
</data>
<data name="ServersPage_Table_Heartbeat" xml:space="preserve">
<value>心跳</value>
</data>
<data name="ServersPage_Table_Name" xml:space="preserve">
<value>名称</value>
</data>
<data name="ServersPage_Table_Queues" xml:space="preserve">
<value>队列</value>
</data>
<data name="ServersPage_Table_Started" xml:space="preserve">
<value>执行</value>
</data>
<data name="ServersPage_Table_Workers" xml:space="preserve">
<value>工作区</value>
</data>
<data name="ServersPage_Title" xml:space="preserve">
<value>服务器</value>
</data>
<data name="SucceededJobsPage_NoJobs" xml:space="preserve">
<value>没有作业</value>
</data>
<data name="SucceededJobsPage_Table_Succeeded" xml:space="preserve">
<value>完成</value>
</data>
<data name="SucceededJobsPage_Table_TotalDuration" xml:space="preserve">
<value>Total Duration</value>
</data>
<data name="SucceededJobsPage_Title" xml:space="preserve">
<value>完成的作业</value>
</data>
<data name="JobsSidebarMenu_Awaiting" xml:space="preserve">
<value>等待中</value>
</data>
<data name="JobsSidebarMenu_Deleted" xml:space="preserve">
<value>删除</value>
</data>
<data name="JobsSidebarMenu_Failed" xml:space="preserve">
<value>失败</value>
</data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve">
<value>执行中</value>
</data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve">
<value>计划</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<value>完成</value>
</data>
<data name="NavigationMenu_Jobs" xml:space="preserve">
<value>作业</value>
</data>
<data name="NavigationMenu_RecurringJobs" xml:space="preserve">
<value>周期性作业</value>
</data>
<data name="NavigationMenu_Retries" xml:space="preserve">
<value>重试</value>
</data>
<data name="NavigationMenu_Servers" xml:space="preserve">
<value>服务器</value>
</data>
<data name="Common_CannotFindTargetMethod" xml:space="preserve">
<value>Can not find the target method.</value>
</data>
<data name="Common_Enqueued" xml:space="preserve">
<value>队列</value>
</data>
<data name="Common_NoState" xml:space="preserve">
<value>No state</value>
</data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value>
</data>
<data name="Metrics_DeletedJobs" xml:space="preserve">
<value>删除</value>
</data>
<data name="Metrics_FailedJobs" xml:space="preserve">
<value>失败</value>
</data>
<data name="Metrics_ProcessingJobs" xml:space="preserve">
<value>执行中</value>
</data>
<data name="Metrics_RecurringJobs" xml:space="preserve">
<value>定时</value>
</data>
<data name="Metrics_Retries" xml:space="preserve">
<value>重试</value>
</data>
<data name="Metrics_ScheduledJobs" xml:space="preserve">
<value>计划</value>
</data>
<data name="Metrics_Servers" xml:space="preserve">
<value>服务器</value>
</data>
<data name="Metrics_SucceededJobs" xml:space="preserve">
<value>成功的作业</value>
</data>
<data name="Metrics_TotalConnections" xml:space="preserve">
<value>总连接数</value>
</data>
<data name="Common_Condition" xml:space="preserve">
<value>Condition</value>
</data>
<data name="Common_Continuations" xml:space="preserve">
<value>Continuations</value>
</data>
<data name="Metrics_AwaitingCount" xml:space="preserve">
<value>等待中</value>
</data>
<data name="Metrics_EnqueuedCountOrNull" xml:space="preserve">
<value>队列</value>
</data>
<data name="Metrics_EnqueuedQueuesCount" xml:space="preserve">
<value>队列</value>
</data>
<data name="Metrics_FailedCountOrNull" xml:space="preserve">
<value>{0} failed job(s) found. Retry or delete them manually.</value>
</data>
<data name="HomePage_GraphHover_Failed" xml:space="preserve">
<value>失败</value>
</data>
<data name="HomePage_GraphHover_Succeeded" xml:space="preserve">
<value>完成</value>
</data>
</root>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Text;
namespace DotNetCore.CAP.Dashboard
{
class DashboardContext
{
}
}
// This file is part of Hangfire.
// Copyright 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using Hangfire.Storage.Monitoring;
namespace Hangfire.Storage
{
public interface IMonitoringApi
{
IList<QueueWithTopEnqueuedJobsDto> Queues();
IList<ServerDto> Servers();
JobDetailsDto JobDetails(string jobId);
StatisticsDto GetStatistics();
JobList<EnqueuedJobDto> EnqueuedJobs(string queue, int from, int perPage);
JobList<FetchedJobDto> FetchedJobs(string queue, int from, int perPage);
JobList<ProcessingJobDto> ProcessingJobs(int from, int count);
JobList<ScheduledJobDto> ScheduledJobs(int from, int count);
JobList<SucceededJobDto> SucceededJobs(int from, int count);
JobList<FailedJobDto> FailedJobs(int from, int count);
JobList<DeletedJobDto> DeletedJobs(int from, int count);
long ScheduledCount();
long EnqueuedCount(string queue);
long FetchedCount(string queue);
long FailedCount();
long ProcessingCount();
long SucceededListCount();
long DeletedListCount();
IDictionary<DateTime, long> SucceededByDatesCount();
IDictionary<DateTime, long> FailedByDatesCount();
IDictionary<DateTime, long> HourlySucceededJobs();
IDictionary<DateTime, long> HourlyFailedJobs();
}
}
\ No newline at end of file
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class DeletedJobDto
{
public DeletedJobDto()
{
InDeletedState = true;
}
public Job Job { get; set; }
public DateTime? DeletedAt { get; set; }
public bool InDeletedState { get; set; }
}
}
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class EnqueuedJobDto
{
public EnqueuedJobDto()
{
InEnqueuedState = true;
}
public Job Job { get; set; }
public string State { get; set; }
public DateTime? EnqueuedAt { get; set; }
public bool InEnqueuedState { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class FailedJobDto
{
public FailedJobDto()
{
InFailedState = true;
}
public Job Job { get; set; }
public string Reason { get; set; }
public DateTime? FailedAt { get; set; }
public string ExceptionType { get; set; }
public string ExceptionMessage { get; set; }
public string ExceptionDetails { get; set; }
public bool InFailedState { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class FetchedJobDto
{
public Job Job { get; set; }
public string State { get; set; }
public DateTime? FetchedAt { get; set; }
}
}
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class JobDetailsDto
{
public Job Job { get; set; }
public DateTime? CreatedAt { get; set; }
public IDictionary<string, string> Properties { get; set; }
public IList<StateHistoryDto> History { get; set; }
public DateTime? ExpireAt { get; set; }
}
}
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System.Collections.Generic;
namespace Hangfire.Storage.Monitoring
{
public class JobList<TDto> : List<KeyValuePair<string, TDto>>
{
public JobList(IEnumerable<KeyValuePair<string, TDto>> source)
: base(source)
{
}
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class ProcessingJobDto
{
public ProcessingJobDto()
{
InProcessingState = true;
}
public Job Job { get; set; }
public bool InProcessingState { get; set; }
public string ServerId { get; set; }
public DateTime? StartedAt { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
namespace Hangfire.Storage.Monitoring
{
public class QueueWithTopEnqueuedJobsDto
{
public string Name { get; set; }
public long Length { get; set; }
public long? Fetched { get; set; }
public JobList<EnqueuedJobDto> FirstJobs { get; set; }
}
}
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class ScheduledJobDto
{
public ScheduledJobDto()
{
InScheduledState = true;
}
public Job Job { get; set; }
public DateTime EnqueueAt { get; set; }
public DateTime? ScheduledAt { get; set; }
public bool InScheduledState { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
namespace Hangfire.Storage.Monitoring
{
public class ServerDto
{
public string Name { get; set; }
public int WorkersCount { get; set; }
public DateTime StartedAt { get; set; }
public IList<string> Queues { get; set; }
public DateTime? Heartbeat { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
namespace Hangfire.Storage.Monitoring
{
public class StateHistoryDto
{
public string StateName { get; set; }
public string Reason { get; set; }
public DateTime CreatedAt { get; set; }
public IDictionary<string, string> Data { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
namespace Hangfire.Storage.Monitoring
{
public class StatisticsDto
{
public long Servers { get; set; }
public long Recurring { get; set; }
public long Enqueued { get; set; }
public long Queues { get; set; }
public long Scheduled { get; set; }
public long Processing { get; set; }
public long Succeeded { get; set; }
public long Failed { get; set; }
public long Deleted { get; set; }
}
}
using System;
using Hangfire.Common;
namespace Hangfire.Storage.Monitoring
{
public class SucceededJobDto
{
public SucceededJobDto()
{
InSucceededState = true;
}
public Job Job { get; set; }
public object Result { get; set; }
public long? TotalDuration { get; set; }
public DateTime? SucceededAt { get; set; }
public bool InSucceededState { get; set; }
}
}
\ No newline at end of file
// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Diagnostics;
using System.Net;
using System.Text;
using Hangfire.Storage.Monitoring;
namespace Hangfire.Dashboard
{
public abstract class RazorPage
{
private Lazy<StatisticsDto> _statisticsLazy;
private readonly StringBuilder _content = new StringBuilder();
private string _body;
protected RazorPage()
{
GenerationTime = Stopwatch.StartNew();
Html = new HtmlHelper(this);
}
public RazorPage Layout { get; protected set; }
public HtmlHelper Html { get; private set; }
public UrlHelper Url { get; private set; }
public JobStorage Storage { get; internal set; }
public string AppPath { get; internal set; }
public int StatsPollingInterval { get; internal set; }
public Stopwatch GenerationTime { get; private set; }
public StatisticsDto Statistics
{
get
{
if (_statisticsLazy == null) throw new InvalidOperationException("Page is not initialized.");
return _statisticsLazy.Value;
}
}
internal DashboardRequest Request { private get; set; }
internal DashboardResponse Response { private get; set; }
public string RequestPath => Request.Path;
/// <exclude />
public abstract void Execute();
public string Query(string key)
{
return Request.GetQuery(key);
}
public override string ToString()
{
return TransformText(null);
}
/// <exclude />
public void Assign(RazorPage parentPage)
{
Request = parentPage.Request;
Response = parentPage.Response;
Storage = parentPage.Storage;
AppPath = parentPage.AppPath;
StatsPollingInterval = parentPage.StatsPollingInterval;
Url = parentPage.Url;
GenerationTime = parentPage.GenerationTime;
_statisticsLazy = parentPage._statisticsLazy;
}
internal void Assign(DashboardContext context)
{
Request = context.Request;
Response = context.Response;
Storage = context.Storage;
AppPath = context.Options.AppPath;
StatsPollingInterval = context.Options.StatsPollingInterval;
Url = new UrlHelper(context);
_statisticsLazy = new Lazy<StatisticsDto>(() =>
{
var monitoring = Storage.GetMonitoringApi();
return monitoring.GetStatistics();
});
}
/// <exclude />
protected void WriteLiteral(string textToAppend)
{
if (string.IsNullOrEmpty(textToAppend))
return;
_content.Append(textToAppend);
}
/// <exclude />
protected virtual void Write(object value)
{
if (value == null)
return;
var html = value as NonEscapedString;
WriteLiteral(html?.ToString() ?? Encode(value.ToString()));
}
protected virtual object RenderBody()
{
return new NonEscapedString(_body);
}
private string TransformText(string body)
{
_body = body;
Execute();
if (Layout != null)
{
Layout.Assign(this);
return Layout.TransformText(_content.ToString());
}
return _content.ToString();
}
private static string Encode(string text)
{
return string.IsNullOrEmpty(text)
? string.Empty
: WebUtility.HtmlEncode(text);
}
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: true *@
@using System
@using System.Collections.Generic
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@using Hangfire.States
@using Hangfire.Storage
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.AwaitingJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
List<string> jobIds = null;
Pager pager = null;
using (var connection = Storage.GetConnection())
{
var storageConnection = connection as JobStorageConnection;
if (storageConnection != null)
{
pager = new Pager(from, perPage, storageConnection.GetSetCount("awaiting"));
jobIds = storageConnection.GetRangeFromSet("awaiting", pager.FromRecord, pager.FromRecord + pager.RecordsPerPage - 1);
}
}
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.AwaitingJobsPage_Title</h1>
@if (jobIds == null)
{
<div class="alert alert-warning">
<h4>@Strings.AwaitingJobsPage_ContinuationsWarning_Title</h4>
<p>@Strings.AwaitingJobsPage_ContinuationsWarning_Text</p>
</div>
}
else if (jobIds.Count > 0)
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/awaiting/enqueue")"
data-loading-text="@Strings.Common_Enqueueing">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_EnqueueButton_Text
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/awaiting/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th>@Strings.Common_Job</th>
<th class="min-width">@Strings.AwaitingJobsPage_Table_Options</th>
<th class="min-width">@Strings.AwaitingJobsPage_Table_Parent</th>
<th class="align-right">@Strings.Common_Created</th>
</tr>
</thead>
<tbody>
@foreach (var jobId in jobIds)
{
JobData jobData;
StateData stateData;
StateData parentStateData = null;
using (var connection = Storage.GetConnection())
{
jobData = connection.GetJobData(jobId);
stateData = connection.GetStateData(jobId);
if (stateData != null && stateData.Name == AwaitingState.StateName)
{
parentStateData = connection.GetStateData(stateData.Data["ParentId"]);
}
}
<tr class="js-jobs-list-row @(jobData != null ? "hover" : null)">
<td>
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@jobId" />
</td>
<td class="min-width">
@Html.JobIdLink(jobId)
</td>
@if (jobData == null)
{
<td colspan="2"><em>@Strings.Common_JobExpired</em></td>
}
else
{
<td class="word-break">
@Html.JobNameLink(jobId, jobData.Job)
</td>
<td class="min-width">
@if (stateData != null && stateData.Data.ContainsKey("Options") && !String.IsNullOrWhiteSpace(stateData.Data["Options"]))
{
<code>@stateData.Data["Options"]</code>
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
<td class="min-width">
@if (parentStateData != null)
{
<a href="@Url.JobDetails(stateData.Data["ParentId"])">
<span class="label label-default label-hover" style="@($"background-color: {JobHistoryRenderer.GetForegroundStateColor(parentStateData.Name)};")">
@parentStateData.Name
</span>
</a>
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
<td class="min-width align-right">
@Html.RelativeTime(jobData.CreatedAt)
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
else
{
<div class="alert alert-info">
@Strings.AwaitingJobsPage_NoJobs
</div>
}
</div>
</div>
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using System;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using Hangfire.States;
#line default
#line hidden
#line 8 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
using Hangfire.Storage;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class AwaitingJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 10 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Layout = new LayoutPage(Strings.AwaitingJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
List<string> jobIds = null;
Pager pager = null;
using (var connection = Storage.GetConnection())
{
var storageConnection = connection as JobStorageConnection;
if (storageConnection != null)
{
pager = new Pager(from, perPage, storageConnection.GetSetCount("awaiting"));
jobIds = storageConnection.GetRangeFromSet("awaiting", pager.FromRecord, pager.FromRecord + pager.RecordsPerPage - 1);
}
}
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 35 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 38 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.AwaitingJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 40 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
if (jobIds == null)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n <h4>");
#line 43 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.AwaitingJobsPage_ContinuationsWarning_Title);
#line default
#line hidden
WriteLiteral("</h4>\r\n <p>");
#line 44 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.AwaitingJobsPage_ContinuationsWarning_Text);
#line default
#line hidden
WriteLiteral("</p>\r\n </div>\r\n");
#line 46 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
else if (jobIds.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 52 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Url.To("/jobs/awaiting/enqueue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 53 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\">\r\n <span class=\"glyphicon glyphicon-repeat\"></span>\r\n " +
" ");
#line 55 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_EnqueueButton_Text);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-jobs-lis" +
"t-command btn btn-sm btn-default\"\r\n data-url=\"");
#line 59 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Url.To("/jobs/awaiting/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 60 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 61 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\">\r\n <span class=\"glyphicon glyphicon-remove\"></span>\r\n " +
" ");
#line 63 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 66 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table table-hover"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 76 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 77 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 78 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.AwaitingJobsPage_Table_Options);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 79 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.AwaitingJobsPage_Table_Parent);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 80 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_Created);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 84 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
foreach (var jobId in jobIds)
{
JobData jobData;
StateData stateData;
StateData parentStateData = null;
using (var connection = Storage.GetConnection())
{
jobData = connection.GetJobData(jobId);
stateData = connection.GetStateData(jobId);
if (stateData != null && stateData.Name == AwaitingState.StateName)
{
parentStateData = connection.GetStateData(stateData.Data["ParentId"]);
}
}
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 101 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(jobData != null ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n " +
" <input type=\"checkbox\" class=\"js-jobs-list-checkbox\" name=\"jobs[]\" value=\"");
#line 103 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(jobId);
#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n " +
" <td class=\"min-width\">\r\n ");
#line 106 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Html.JobIdLink(jobId));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
#line 108 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
if (jobData == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"2\"><em>");
#line 110 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_JobExpired);
#line default
#line hidden
WriteLiteral("</em></td>\r\n");
#line 111 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"word-break\">\r\n " +
" ");
#line 115 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Html.JobNameLink(jobId, jobData.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"min-width\">\r\n");
#line 118 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
if (stateData != null && stateData.Data.ContainsKey("Options") && !String.IsNullOrWhiteSpace(stateData.Data["Options"]))
{
#line default
#line hidden
WriteLiteral(" <code>");
#line 120 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(stateData.Data["Options"]);
#line default
#line hidden
WriteLiteral("</code>\r\n");
#line 121 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 124 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 125 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
WriteLiteral(" <td class=\"min-width\">\r\n");
#line 128 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
if (parentStateData != null)
{
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 130 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Url.JobDetails(stateData.Data["ParentId"]));
#line default
#line hidden
WriteLiteral("\">\r\n <span class=\"label label-" +
"default label-hover\" style=\"");
#line 131 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write($"background-color: {JobHistoryRenderer.GetForegroundStateColor(parentStateData.Name)};");
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 132 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(parentStateData.Name);
#line default
#line hidden
WriteLiteral("\r\n </span>\r\n " +
" </a>\r\n");
#line 135 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 138 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 139 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
WriteLiteral(" <td class=\"min-width align-right\">\r\n " +
" ");
#line 142 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Html.RelativeTime(jobData.CreatedAt));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
#line 144 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 146 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n ");
#line 150 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 152 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 156 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
Write(Strings.AwaitingJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 158 "..\..\Dashboard\Pages\AwaitingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>\r\n");
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class BlockMetric
{
public BlockMetric(DashboardMetric dashboardMetric)
{
DashboardMetric = dashboardMetric;
}
public DashboardMetric DashboardMetric { get; }
}
}
using System.Collections.Generic;
namespace Hangfire.Dashboard.Pages
{
partial class Breadcrumbs
{
public Breadcrumbs(string title, IDictionary<string, string> items)
{
Title = title;
Items = items;
}
public string Title { get; }
public IDictionary<string, string> Items { get; }
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.DeletedJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.DeletedListCount());
var jobs = monitor.DeletedJobs(pager.FromRecord, pager.RecordsPerPage);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.DeletedJobsPage_Title</h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-info">
@Strings.DeletedJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/deleted/requeue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th>@Strings.Common_Job</th>
<th class="align-right">@Strings.DeletedJobsPage_Table_Deleted</th>
</tr>
</thead>
<tbody>
@foreach (var job in jobs)
{
<tr class="js-jobs-list-row @(job.Value == null || !job.Value.InDeletedState ? "obsolete-data" : null) @(job.Value != null && job.Value.InDeletedState && job.Value != null ? "hover" : null)">
<td>
@if (job.Value == null || job.Value.InDeletedState)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" />
}
</td>
<td class="min-width">
@Html.JobIdLink(job.Key)
@if (job.Value != null && !job.Value.InDeletedState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
@if (job.Value == null)
{
<td colspan="2"><em>@Strings.Common_JobExpired</em></td>
}
else
{
<td class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="align-right">
@if (job.Value.DeletedAt.HasValue)
{
@Html.RelativeTime(job.Value.DeletedAt.Value)
}
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class DeletedJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 6 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Layout = new LayoutPage(Strings.DeletedJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.DeletedListCount());
var jobs = monitor.DeletedJobs(pager.FromRecord, pager.RecordsPerPage);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 21 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 24 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.DeletedJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 26 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 29 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.DeletedJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 31 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 37 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Url.To("/jobs/deleted/requeue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 38 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");
#line 41 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.Common_RequeueJobs);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n ");
#line 43 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 52 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 53 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 54 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.DeletedJobsPage_Table_Deleted);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 58 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
foreach (var job in jobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 60 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(job.Value == null || !job.Value.InDeletedState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral(" ");
#line 60 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(job.Value != null && job.Value.InDeletedState && job.Value != null ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n");
#line 62 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
if (job.Value == null || job.Value.InDeletedState)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs" +
"-list-checkbox\" name=\"jobs[]\" value=\"");
#line 64 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\" />\r\n");
#line 65 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"min-width\">\r\n ");
#line 68 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 69 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
if (job.Value != null && !job.Value.InDeletedState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 71 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 72 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n\r\n");
#line 75 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
if (job.Value == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"2\"><em>");
#line 77 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Strings.Common_JobExpired);
#line default
#line hidden
WriteLiteral("</em></td>\r\n");
#line 78 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"word-break\">\r\n " +
" ");
#line 82 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"align-right\">\r\n");
#line 85 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
if (job.Value.DeletedAt.HasValue)
{
#line default
#line hidden
#line 87 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.DeletedAt.Value));
#line default
#line hidden
#line 87 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 90 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 92 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n\r\n ");
#line 97 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 99 "..\..\Dashboard\Pages\DeletedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>\r\n\r\n");
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class EnqueuedJobsPage
{
public EnqueuedJobsPage(string queue)
{
Queue = queue;
}
public string Queue { get; }
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System.Collections
@using System.Collections.Generic
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Queue.ToUpperInvariant());
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.EnqueuedCount(Queue));
var enqueuedJobs = monitor.EnqueuedJobs(Queue, pager.FromRecord, pager.RecordsPerPage);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
@Html.Breadcrumbs(Queue.ToUpperInvariant(), new Dictionary<string, string>
{
{ "Queues", Url.LinkToQueues() }
})
<h1 class="page-header">@Queue.ToUpperInvariant() <small>@Strings.EnqueuedJobsPage_Title</small></h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-info">
@Strings.EnqueuedJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/enqueued/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm"
disabled="disabled">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all"/>
</th>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.Common_State</th>
<th>@Strings.Common_Job</th>
<th class="align-right">@Strings.Common_Enqueued</th>
</tr>
</thead>
<tbody>
@foreach (var job in enqueuedJobs)
{
<tr class="js-jobs-list-row hover @(job.Value == null || !job.Value.InEnqueuedState ? "obsolete-data" : null)">
<td>
@if (job.Value != null)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key"/>
}
</td>
<td class="min-width">
@Html.JobIdLink(job.Key)
@if (job.Value != null && !job.Value.InEnqueuedState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
@if (job.Value == null)
{
<td colspan="3"><em>@Strings.Common_JobExpired</em></td>
}
else
{
<td class="min-width">
@Html.StateLabel(job.Value.State)
</td>
<td class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="align-right">
@if (job.Value.EnqueuedAt.HasValue)
{
@Html.RelativeTime(job.Value.EnqueuedAt.Value)
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
#line 2 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
using System.Collections;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class EnqueuedJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 8 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Layout = new LayoutPage(Queue.ToUpperInvariant());
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.EnqueuedCount(Queue));
var enqueuedJobs = monitor.EnqueuedJobs(Queue, pager.FromRecord, pager.RecordsPerPage);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 23 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n ");
#line 26 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.Breadcrumbs(Queue.ToUpperInvariant(), new Dictionary<string, string>
{
{ "Queues", Url.LinkToQueues() }
}));
#line default
#line hidden
WriteLiteral("\r\n\r\n <h1 class=\"page-header\">");
#line 31 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Queue.ToUpperInvariant());
#line default
#line hidden
WriteLiteral(" <small>");
#line 31 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.EnqueuedJobsPage_Title);
#line default
#line hidden
WriteLiteral("</small></h1>\r\n\r\n");
#line 33 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 36 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.EnqueuedJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 38 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-default\"\r\n data-url=\"");
#line 44 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Url.To("/jobs/enqueued/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 45 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 46 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-remove\"></span>\r\n ");
#line 49 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 52 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all""/>
</th>
<th class=""min-width"">");
#line 62 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 63 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_State);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 64 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 65 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_Enqueued);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 69 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
foreach (var job in enqueuedJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover ");
#line 71 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(job.Value == null || !job.Value.InEnqueuedState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n");
#line 73 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
if (job.Value != null)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs-lis" +
"t-checkbox\" name=\"jobs[]\" value=\"");
#line 75 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\"/>\r\n");
#line 76 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <td class=" +
"\"min-width\">\r\n ");
#line 79 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 80 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
if (job.Value != null && !job.Value.InEnqueuedState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 82 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 83 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 85 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
if (job.Value == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"3\"><em>");
#line 87 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_JobExpired);
#line default
#line hidden
WriteLiteral("</em></td>\r\n");
#line 88 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"min-width\">\r\n " +
" ");
#line 92 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.StateLabel(job.Value.State));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"word-break\">\r\n " +
" ");
#line 95 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"align-right\">\r\n");
#line 98 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
if (job.Value.EnqueuedAt.HasValue)
{
#line default
#line hidden
#line 100 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.EnqueuedAt.Value));
#line default
#line hidden
#line 100 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 104 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 105 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 107 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 109 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n\r\n ");
#line 114 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 116 "..\..\Dashboard\Pages\EnqueuedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.FailedJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.FailedCount());
var failedJobs = monitor.FailedJobs(pager.FromRecord, pager.RecordsPerPage);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.FailedJobsPage_Title</h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-success">
@Strings.FailedJobsPage_NoJobs
</div>
}
else
{
<div class="alert alert-warning">
@Html.Raw(Strings.FailedJobsPage_FailedJobsNotExpire_Warning_Html)
</div>
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/failed/requeue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/failed/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th>@Strings.FailedJobsPage_Table_Failed</th>
<th>@Strings.Common_Job</th>
</tr>
</thead>
<tbody>
@{ var index = 0; }
@foreach (var job in failedJobs)
{
<tr class="js-jobs-list-row @(!job.Value.InFailedState ? "obsolete-data" : null) @(job.Value.InFailedState ? "hover" : null)">
<td rowspan="@(job.Value.InFailedState ? "2" : "1")">
@if (job.Value.InFailedState)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" />
}
</td>
<td class="min-width" rowspan="@(job.Value.InFailedState ? "2" : "1")">
@Html.JobIdLink(job.Key)
@if (!job.Value.InFailedState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
<td class="min-width">
@if (job.Value.FailedAt.HasValue)
{
@Html.RelativeTime(job.Value.FailedAt.Value)
}
</td>
<td>
<div class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</div>
@if (!String.IsNullOrEmpty(job.Value.ExceptionMessage))
{
<div style="color: #888;">
@job.Value.Reason <a class="expander" href="#">@(index == 0 ? Strings.Common_LessDetails : Strings.Common_MoreDetails)</a>
</div>
}
</td>
</tr>
if (job.Value.InFailedState)
{
<tr>
<td colspan="2" class="failed-job-details">
<div class="expandable" style="@(index++ == 0 ? "display: block;" : null)">
<h4>@job.Value.ExceptionType</h4>
<p class="text-muted">
@job.Value.ExceptionMessage
</p>
@if (!String.IsNullOrEmpty(job.Value.ExceptionDetails))
{
<pre class="stack-trace"><code>@Html.StackTrace(job.Value.ExceptionDetails)</code></pre>
}
</div>
</td>
</tr>
}
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
using System;
#line default
#line hidden
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 3 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class FailedJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 7 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Layout = new LayoutPage(Strings.FailedJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.FailedCount());
var failedJobs = monitor.FailedJobs(pager.FromRecord, pager.RecordsPerPage);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 22 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 25 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.FailedJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 27 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-success\">\r\n ");
#line 30 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.FailedJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 32 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 36 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.Raw(Strings.FailedJobsPage_FailedJobsNotExpire_Warning_Html));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 38 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 42 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Url.To("/jobs/failed/requeue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 43 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");
#line 46 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_RequeueJobs);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-jobs-lis" +
"t-command btn btn-sm btn-default\"\r\n data-url=\"");
#line 50 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Url.To("/jobs/failed/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 51 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 52 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\">\r\n <span class=\"glyphicon glyphicon-remove\"></span>\r\n " +
" ");
#line 54 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 57 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 67 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 68 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.FailedJobsPage_Table_Failed);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 69 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 73 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
var index = 0;
#line default
#line hidden
#line 74 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
foreach (var job in failedJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 76 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(!job.Value.InFailedState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral(" ");
#line 76 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Value.InFailedState ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td rowspan=\"");
#line 77 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Value.InFailedState ? "2" : "1");
#line default
#line hidden
WriteLiteral("\">\r\n");
#line 78 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (job.Value.InFailedState)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs" +
"-list-checkbox\" name=\"jobs[]\" value=\"");
#line 80 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\" />\r\n");
#line 81 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"min-width\" rowspan=\"");
#line 83 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Value.InFailedState ? "2" : "1");
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 84 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 85 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (!job.Value.InFailedState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 87 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 88 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"min-width\">\r\n");
#line 91 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (job.Value.FailedAt.HasValue)
{
#line default
#line hidden
#line 93 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.FailedAt.Value));
#line default
#line hidden
#line 93 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d>\r\n <div class=\"word-break\">\r\n " +
" ");
#line 98 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 100 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (!String.IsNullOrEmpty(job.Value.ExceptionMessage))
{
#line default
#line hidden
WriteLiteral(" <div style=\"color: #888;\">\r\n " +
" ");
#line 103 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Value.Reason);
#line default
#line hidden
WriteLiteral(" <a class=\"expander\" href=\"#\">");
#line 103 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(index == 0 ? Strings.Common_LessDetails : Strings.Common_MoreDetails);
#line default
#line hidden
WriteLiteral("</a>\r\n </div>\r\n");
#line 105 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r" +
"\n");
#line 108 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (job.Value.InFailedState)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n " +
" <td colspan=\"2\" class=\"failed-job-details\">\r\n " +
" <div class=\"expandable\" style=\"");
#line 112 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(index++ == 0 ? "display: block;" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <h4>");
#line 113 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Value.ExceptionType);
#line default
#line hidden
WriteLiteral("</h4>\r\n <p class=\"text-muted\">\r\n " +
" ");
#line 115 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(job.Value.ExceptionMessage);
#line default
#line hidden
WriteLiteral("\r\n </p>\r\n\r\n");
#line 118 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
if (!String.IsNullOrEmpty(job.Value.ExceptionDetails))
{
#line default
#line hidden
WriteLiteral(" <pre class=\"stack-trace\"><cod" +
"e>");
#line 120 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.StackTrace(job.Value.ExceptionDetails));
#line default
#line hidden
WriteLiteral("</code></pre>\r\n");
#line 121 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n " +
" </td>\r\n </tr>\r\n");
#line 125 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n\r\n ");
#line 131 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 133 "..\..\Dashboard\Pages\FailedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class FetchedJobsPage
{
public FetchedJobsPage(string queue)
{
Queue = queue;
}
public string Queue { get; }
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System.Collections
@using System.Collections.Generic
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Queue.ToUpperInvariant());
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.FetchedCount(Queue));
var fetchedJobs = monitor.FetchedJobs(Queue, pager.FromRecord, pager.RecordsPerPage);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
@Html.Breadcrumbs(Strings.FetchedJobsPage_Title, new Dictionary<string, string>
{
{ "Queues", Url.LinkToQueues() },
{ Queue.ToUpperInvariant(), Url.Queue(Queue) }
})
<h1 class="page-header">
@Queue.ToUpperInvariant() <small>@Strings.FetchedJobsPage_Title</small>
</h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-info">
@Strings.FetchedJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/enqueued/requeue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/enqueued/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm"
disabled="disabled">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.Common_State</th>
<th>@Strings.Common_Job</th>
<th class="align-right">@Strings.Common_Fetched</th>
</tr>
</thead>
<tbody>
@foreach (var job in fetchedJobs)
{
<tr class="js-jobs-list-row hover @(job.Value == null ? "obsolete-data" : null)">
<td>
@if (job.Value != null)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" />
}
</td>
<td class="min-width">
@Html.JobIdLink(job.Key)
</td>
@if (job.Value == null)
{
<td colspan="3"><em>@Strings.Common_JobExpired</em></td>
}
else
{
<td class="min-width">
@Html.StateLabel(job.Value.State)
</td>
<td class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="align-right">
@if (job.Value.FetchedAt.HasValue)
{
@Html.RelativeTime(job.Value.FetchedAt.Value)
}
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
#line 2 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
using System.Collections;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class FetchedJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 8 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Layout = new LayoutPage(Queue.ToUpperInvariant());
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.FetchedCount(Queue));
var fetchedJobs = monitor.FetchedJobs(Queue, pager.FromRecord, pager.RecordsPerPage);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 23 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n ");
#line 26 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.Breadcrumbs(Strings.FetchedJobsPage_Title, new Dictionary<string, string>
{
{ "Queues", Url.LinkToQueues() },
{ Queue.ToUpperInvariant(), Url.Queue(Queue) }
}));
#line default
#line hidden
WriteLiteral("\r\n\r\n <h1 class=\"page-header\">\r\n ");
#line 33 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Queue.ToUpperInvariant());
#line default
#line hidden
WriteLiteral(" <small>");
#line 33 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.FetchedJobsPage_Title);
#line default
#line hidden
WriteLiteral("</small>\r\n </h1>\r\n\r\n");
#line 36 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 39 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.FetchedJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 41 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar btn-toolb" +
"ar-top\">\r\n <button class=\"js-jobs-list-command btn btn-sm btn-pri" +
"mary\"\r\n data-url=\"");
#line 47 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Url.To("/jobs/enqueued/requeue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 48 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <span class=" +
"\"glyphicon glyphicon-repeat\"></span>\r\n ");
#line 51 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_RequeueJobs);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-jobs-list-comman" +
"d btn btn-sm btn-default\"\r\n data-url=\"");
#line 55 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Url.To("/jobs/enqueued/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 56 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 57 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <span class=" +
"\"glyphicon glyphicon-remove\"></span>\r\n ");
#line 60 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 63 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 73 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 74 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_State);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 75 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 76 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_Fetched);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 80 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
foreach (var job in fetchedJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover ");
#line 82 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(job.Value == null ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n");
#line 84 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
if (job.Value != null)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs-lis" +
"t-checkbox\" name=\"jobs[]\" value=\"");
#line 86 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\" />\r\n");
#line 87 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <td class=" +
"\"min-width\">\r\n ");
#line 90 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
#line 92 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
if (job.Value == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"3\"><em>");
#line 94 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Strings.Common_JobExpired);
#line default
#line hidden
WriteLiteral("</em></td>\r\n");
#line 95 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"min-width\">\r\n " +
" ");
#line 99 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.StateLabel(job.Value.State));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"word-break\">\r\n " +
" ");
#line 102 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"align-right\">\r\n");
#line 105 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
if (job.Value.FetchedAt.HasValue)
{
#line default
#line hidden
#line 107 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.FetchedAt.Value));
#line default
#line hidden
#line 107 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 110 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 112 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n\r\n " +
" ");
#line 117 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 119 "..\..\Dashboard\Pages\FetchedJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
using System.Collections.Generic;
namespace Hangfire.Dashboard.Pages
{
partial class HomePage
{
public static readonly List<DashboardMetric> Metrics = new List<DashboardMetric>();
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using System.Collections.Generic
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@using Newtonsoft.Json
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.HomePage_Title);
IDictionary<DateTime, long> succeeded = null;
IDictionary<DateTime, long> failed = null;
var period = Query("period") ?? "day";
var monitor = Storage.GetMonitoringApi();
if ("week".Equals(period, StringComparison.OrdinalIgnoreCase))
{
succeeded = monitor.SucceededByDatesCount();
failed = monitor.FailedByDatesCount();
}
else if ("day".Equals(period, StringComparison.OrdinalIgnoreCase))
{
succeeded = monitor.HourlySucceededJobs();
failed = monitor.HourlyFailedJobs();
}
}
<div class="row">
<div class="col-md-12">
<h1 class="page-header">@Strings.HomePage_Title</h1>
@if (Metrics.Count > 0)
{
<div class="row">
@foreach (var metric in Metrics)
{
<div class="col-md-2">
@Html.BlockMetric(metric)
</div>
}
</div>
}
<h3>@Strings.HomePage_RealtimeGraph</h3>
<div id="realtimeGraph" data-succeeded="@Statistics.Succeeded" data-failed="@Statistics.Failed"
data-succeeded-string="@Strings.HomePage_GraphHover_Succeeded"
data-failed-string="@Strings.HomePage_GraphHover_Failed"></div>
<div style="display: none;">
<span data-metric="succeeded:count"></span>
<span data-metric="failed:count"></span>
</div>
<h3>
<div class="btn-group pull-right" style="margin-top: 2px;">
<a href="?period=day" class="btn btn-sm btn-default @("day".Equals(period, StringComparison.OrdinalIgnoreCase) ? "active" : null)">@Strings.Common_PeriodDay</a>
<a href="?period=week" class="btn btn-sm btn-default @("week".Equals(period, StringComparison.OrdinalIgnoreCase) ? "active" : null)">@Strings.Common_PeriodWeek</a>
</div>
@Strings.HomePage_HistoryGraph
</h3>
@if (succeeded != null && failed != null)
{
<div id="historyGraph"
data-succeeded="@JsonConvert.SerializeObject(succeeded)"
data-failed="@JsonConvert.SerializeObject(failed)"
data-succeeded-string="@Strings.HomePage_GraphHover_Succeeded"
data-failed-string="@Strings.HomePage_GraphHover_Failed">
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\HomePage.cshtml"
using System;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\HomePage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\HomePage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\HomePage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\HomePage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\HomePage.cshtml"
using Newtonsoft.Json;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class HomePage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 9 "..\..\Dashboard\Pages\HomePage.cshtml"
Layout = new LayoutPage(Strings.HomePage_Title);
IDictionary<DateTime, long> succeeded = null;
IDictionary<DateTime, long> failed = null;
var period = Query("period") ?? "day";
var monitor = Storage.GetMonitoringApi();
if ("week".Equals(period, StringComparison.OrdinalIgnoreCase))
{
succeeded = monitor.SucceededByDatesCount();
failed = monitor.FailedByDatesCount();
}
else if ("day".Equals(period, StringComparison.OrdinalIgnoreCase))
{
succeeded = monitor.HourlySucceededJobs();
failed = monitor.HourlyFailedJobs();
}
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h1 class=\"page-header\"" +
">");
#line 31 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n");
#line 32 "..\..\Dashboard\Pages\HomePage.cshtml"
if (Metrics.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"row\">\r\n");
#line 35 "..\..\Dashboard\Pages\HomePage.cshtml"
foreach (var metric in Metrics)
{
#line default
#line hidden
WriteLiteral(" <div class=\"col-md-2\">\r\n ");
#line 38 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Html.BlockMetric(metric));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 40 "..\..\Dashboard\Pages\HomePage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
#line 42 "..\..\Dashboard\Pages\HomePage.cshtml"
}
#line default
#line hidden
WriteLiteral(" <h3>");
#line 43 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_RealtimeGraph);
#line default
#line hidden
WriteLiteral("</h3>\r\n <div id=\"realtimeGraph\" data-succeeded=\"");
#line 44 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Statistics.Succeeded);
#line default
#line hidden
WriteLiteral("\" data-failed=\"");
#line 44 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Statistics.Failed);
#line default
#line hidden
WriteLiteral("\"\r\n data-succeeded-string=\"");
#line 45 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_GraphHover_Succeeded);
#line default
#line hidden
WriteLiteral("\"\r\n data-failed-string=\"");
#line 46 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_GraphHover_Failed);
#line default
#line hidden
WriteLiteral(@"""></div>
<div style=""display: none;"">
<span data-metric=""succeeded:count""></span>
<span data-metric=""failed:count""></span>
</div>
<h3>
<div class=""btn-group pull-right"" style=""margin-top: 2px;"">
<a href=""?period=day"" class=""btn btn-sm btn-default ");
#line 54 "..\..\Dashboard\Pages\HomePage.cshtml"
Write("day".Equals(period, StringComparison.OrdinalIgnoreCase) ? "active" : null);
#line default
#line hidden
WriteLiteral("\">");
#line 54 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.Common_PeriodDay);
#line default
#line hidden
WriteLiteral("</a>\r\n <a href=\"?period=week\" class=\"btn btn-sm btn-default ");
#line 55 "..\..\Dashboard\Pages\HomePage.cshtml"
Write("week".Equals(period, StringComparison.OrdinalIgnoreCase) ? "active" : null);
#line default
#line hidden
WriteLiteral("\">");
#line 55 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.Common_PeriodWeek);
#line default
#line hidden
WriteLiteral("</a>\r\n </div>\r\n ");
#line 57 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_HistoryGraph);
#line default
#line hidden
WriteLiteral("\r\n </h3>\r\n\r\n");
#line 60 "..\..\Dashboard\Pages\HomePage.cshtml"
if (succeeded != null && failed != null)
{
#line default
#line hidden
WriteLiteral(" <div id=\"historyGraph\"\r\n data-succeeded=\"");
#line 63 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(JsonConvert.SerializeObject(succeeded));
#line default
#line hidden
WriteLiteral("\"\r\n data-failed=\"");
#line 64 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(JsonConvert.SerializeObject(failed));
#line default
#line hidden
WriteLiteral("\"\r\n data-succeeded-string=\"");
#line 65 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_GraphHover_Succeeded);
#line default
#line hidden
WriteLiteral("\"\r\n data-failed-string=\"");
#line 66 "..\..\Dashboard\Pages\HomePage.cshtml"
Write(Strings.HomePage_GraphHover_Failed);
#line default
#line hidden
WriteLiteral("\">\r\n </div>\r\n");
#line 68 "..\..\Dashboard\Pages\HomePage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class InlineMetric
{
public InlineMetric(DashboardMetric dashboardMetric)
{
DashboardMetric = dashboardMetric;
}
public DashboardMetric DashboardMetric { get; }
}
}
using Hangfire.Annotations;
namespace Hangfire.Dashboard.Pages
{
partial class JobDetailsPage
{
public JobDetailsPage(string jobId)
{
JobId = jobId;
}
public string JobId { get; }
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using System.Collections.Generic
@using System.Linq
@using Hangfire
@using Hangfire.Common
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@using Hangfire.States
@using Hangfire.Storage
@using Hangfire.Storage.Monitoring
@inherits RazorPage
@{
var monitor = Storage.GetMonitoringApi();
var job = monitor.JobDetails(JobId);
string title = null;
if (job != null)
{
title = job.Job != null ? Html.JobName(job.Job) : null;
job.History.Add(new StateHistoryDto { StateName = "Created", CreatedAt = job.CreatedAt ?? default(DateTime) });
}
title = title ?? Strings.Common_Job;
Layout = new LayoutPage(title);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@title</h1>
@if (job == null)
{
<div class="alert alert-warning">
@String.Format(Strings.JobDetailsPage_JobExpired, JobId)
</div>
}
else
{
var currentState = job.History[0];
if (currentState.StateName == ProcessingState.StateName)
{
var server = monitor.Servers().FirstOrDefault(x => x.Name == currentState.Data["ServerId"]);
if (server == null)
{
<div class="alert alert-danger">
@Html.Raw(String.Format(Strings.JobDetailsPage_JobAbortedNotActive_Warning_Html, currentState.Data["ServerId"], Url.To("/servers")))
</div>
}
else if (server.Heartbeat.HasValue && server.Heartbeat < DateTime.UtcNow.AddMinutes(-1))
{
<div class="alert alert-warning">
@Html.Raw(String.Format(Strings.JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html, server.Name))
</div>
}
}
if (job.ExpireAt.HasValue)
{
<div class="alert alert-info">
@Html.Raw(String.Format(Strings.JobDetailsPage_JobFinished_Warning_Html, JobHelper.ToTimestamp(job.ExpireAt.Value), job.ExpireAt))
</div>
}
<div class="job-snippet">
<div class="job-snippet-code">
<pre><code><span class="comment">// @Strings.JobDetailsPage_JobId: @Html.JobId(JobId.ToString(), false)</span>
@JobMethodCallRenderer.Render(job.Job)
</code></pre>
</div>
@if (job.Properties.Count > 0)
{
<div class="job-snippet-properties">
<dl>
@foreach (var property in job.Properties.Where(x => x.Key != "Continuations"))
{
<dt>@property.Key</dt>
<dd><pre><code>@property.Value</code></pre></dd>
}
</dl>
</div>
}
</div>
if (job.Properties.ContainsKey("Continuations"))
{
List<ContinuationsSupportAttribute.Continuation> continuations;
using (var connection = Storage.GetConnection())
{
continuations = JobHelper.FromJson<List<ContinuationsSupportAttribute.Continuation>>(connection.GetJobParameter(
JobId, "Continuations")) ?? new List<ContinuationsSupportAttribute.Continuation>();
}
if (continuations.Count > 0)
{
<h3>@Strings.Common_Continuations</h3>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.Common_Condition</th>
<th class="min-width">@Strings.Common_State</th>
<th>@Strings.Common_Job</th>
<th class="align-right">@Strings.Common_Created</th>
</tr>
</thead>
<tbody>
@foreach (var continuation in continuations)
{
JobData jobData;
using (var connection = Storage.GetConnection())
{
jobData = connection.GetJobData(continuation.JobId);
}
<tr>
@if (jobData == null)
{
<td colspan="5"><em>@String.Format(Strings.JobDetailsPage_JobExpired, continuation.JobId)</em></td>
}
else
{
<td class="min-width">@Html.JobIdLink(continuation.JobId)</td>
<td class="min-width"><code>@continuation.Options.ToString("G")</code></td>
<td class="min-width">@Html.StateLabel(jobData.State)</td>
<td class="word-break">@Html.JobNameLink(continuation.JobId, jobData.Job)</td>
<td class="align-right">@Html.RelativeTime(jobData.CreatedAt)</td>
}
</tr>
}
</tbody>
</table>
</div>
}
}
<h3>
@if (job.History.Count > 1)
{
<span class="job-snippet-buttons pull-right">
<button class="btn btn-sm btn-default" data-ajax="@Url.To("/jobs/actions/requeue/" + JobId)" data-loading-text="@Strings.Common_Enqueueing">@Strings.JobDetailsPage_Requeue</button>
<button class="btn btn-sm btn-death" data-ajax="@Url.To("/jobs/actions/delete/" + JobId)" data-loading-text="@Strings.Common_Deleting" data-confirm="@Strings.JobDetailsPage_DeleteConfirm">@Strings.Common_Delete</button>
</span>
}
@Strings.JobDetailsPage_State
</h3>
var index = 0;
foreach (var entry in job.History)
{
var accentColor = JobHistoryRenderer.GetForegroundStateColor(entry.StateName);
var backgroundColor = JobHistoryRenderer.GetBackgroundStateColor(entry.StateName);
<div class="state-card" style="@(index == 0 ? $"border-color: {accentColor}" : null)">
<h4 class="state-card-title" style="@(index == 0 ? $"color: {accentColor}" : null)">
<small class="pull-right text-muted">
@if (index == job.History.Count - 1)
{
@Html.RelativeTime(entry.CreatedAt)
}
else
{
var duration = Html.ToHumanDuration(entry.CreatedAt - job.History[index + 1].CreatedAt);
if (index == 0)
{
@: @Html.RelativeTime(entry.CreatedAt) (@duration)
}
else
{
@: @Html.MomentTitle(entry.CreatedAt, duration)
}
}
</small>
@entry.StateName
</h4>
@if (!String.IsNullOrWhiteSpace(entry.Reason))
{
<p class="state-card-text text-muted">@entry.Reason</p>
}
@{
var rendered = Html.RenderHistory(entry.StateName, entry.Data);
}
@if (rendered != null)
{
<div class="state-card-body" style="@(index == 0 ? $"background-color: {backgroundColor}" : null)">
@rendered
</div>
}
</div>
index++;
}
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using System;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using System.Linq;
#line default
#line hidden
using System.Text;
#line 5 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.Common;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 8 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 9 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
#line 10 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.States;
#line default
#line hidden
#line 11 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.Storage;
#line default
#line hidden
#line 12 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
using Hangfire.Storage.Monitoring;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class JobDetailsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 14 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
var monitor = Storage.GetMonitoringApi();
var job = monitor.JobDetails(JobId);
string title = null;
if (job != null)
{
title = job.Job != null ? Html.JobName(job.Job) : null;
job.History.Add(new StateHistoryDto { StateName = "Created", CreatedAt = job.CreatedAt ?? default(DateTime) });
}
title = title ?? Strings.Common_Job;
Layout = new LayoutPage(title);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 32 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 35 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 37 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (job == null)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 40 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(String.Format(Strings.JobDetailsPage_JobExpired, JobId));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 42 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
else
{
var currentState = job.History[0];
if (currentState.StateName == ProcessingState.StateName)
{
var server = monitor.Servers().FirstOrDefault(x => x.Name == currentState.Data["ServerId"]);
if (server == null)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-danger\">\r\n ");
#line 52 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.Raw(String.Format(Strings.JobDetailsPage_JobAbortedNotActive_Warning_Html, currentState.Data["ServerId"], Url.To("/servers"))));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 54 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
else if (server.Heartbeat.HasValue && server.Heartbeat < DateTime.UtcNow.AddMinutes(-1))
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 58 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.Raw(String.Format(Strings.JobDetailsPage_JobAbortedWithHeartbeat_Warning_Html, server.Name)));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 60 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
}
if (job.ExpireAt.HasValue)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 66 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.Raw(String.Format(Strings.JobDetailsPage_JobFinished_Warning_Html, JobHelper.ToTimestamp(job.ExpireAt.Value), job.ExpireAt)));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 68 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" <div class=\"job-snippet\">\r\n <div class=\"job-snippet-co" +
"de\">\r\n <pre><code><span class=\"comment\">// ");
#line 72 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.JobDetailsPage_JobId);
#line default
#line hidden
WriteLiteral(": ");
#line 72 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.JobId(JobId.ToString(), false));
#line default
#line hidden
WriteLiteral("</span>\r\n");
#line 73 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(JobMethodCallRenderer.Render(job.Job));
#line default
#line hidden
WriteLiteral("\r\n</code></pre>\r\n </div>\r\n\r\n");
#line 77 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (job.Properties.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"job-snippet-properties\">\r\n " +
" <dl>\r\n");
#line 81 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
foreach (var property in job.Properties.Where(x => x.Key != "Continuations"))
{
#line default
#line hidden
WriteLiteral(" <dt>");
#line 83 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(property.Key);
#line default
#line hidden
WriteLiteral("</dt>\r\n");
WriteLiteral(" <dd><pre><code>");
#line 84 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(property.Value);
#line default
#line hidden
WriteLiteral("</code></pre></dd>\r\n");
#line 85 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </dl>\r\n </div>\r\n");
#line 88 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
#line 90 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (job.Properties.ContainsKey("Continuations"))
{
List<ContinuationsSupportAttribute.Continuation> continuations;
using (var connection = Storage.GetConnection())
{
continuations = JobHelper.FromJson<List<ContinuationsSupportAttribute.Continuation>>(connection.GetJobParameter(
JobId, "Continuations")) ?? new List<ContinuationsSupportAttribute.Continuation>();
}
if (continuations.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <h3>");
#line 103 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Continuations);
#line default
#line hidden
WriteLiteral("</h3>\r\n");
WriteLiteral(" <div class=\"table-responsive\">\r\n <tabl" +
"e class=\"table\">\r\n <thead>\r\n " +
" <tr>\r\n <th class=\"min-width\">");
#line 108 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 109 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Condition);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 110 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_State);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 111 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 112 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Created);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 116 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
foreach (var continuation in continuations)
{
JobData jobData;
using (var connection = Storage.GetConnection())
{
jobData = connection.GetJobData(continuation.JobId);
}
#line default
#line hidden
WriteLiteral(" <tr>\r\n");
#line 126 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (jobData == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"5\"><em>");
#line 128 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(String.Format(Strings.JobDetailsPage_JobExpired, continuation.JobId));
#line default
#line hidden
WriteLiteral("</em></td>\r\n");
#line 129 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"min-width\">");
#line 132 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.JobIdLink(continuation.JobId));
#line default
#line hidden
WriteLiteral("</td>\r\n");
WriteLiteral(" <td class=\"min-width\"><code>");
#line 133 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(continuation.Options.ToString("G"));
#line default
#line hidden
WriteLiteral("</code></td>\r\n");
WriteLiteral(" <td class=\"min-width\">");
#line 134 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.StateLabel(jobData.State));
#line default
#line hidden
WriteLiteral("</td>\r\n");
WriteLiteral(" <td class=\"word-break\">");
#line 135 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.JobNameLink(continuation.JobId, jobData.Job));
#line default
#line hidden
WriteLiteral("</td>\r\n");
WriteLiteral(" <td class=\"align-right\">");
#line 136 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.RelativeTime(jobData.CreatedAt));
#line default
#line hidden
WriteLiteral("</td>\r\n");
#line 137 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 139 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n " +
" </div>\r\n");
#line 143 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
}
#line default
#line hidden
WriteLiteral(" <h3>\r\n");
#line 147 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (job.History.Count > 1)
{
#line default
#line hidden
WriteLiteral(" <span class=\"job-snippet-buttons pull-right\">\r\n " +
" <button class=\"btn btn-sm btn-default\" data-ajax=\"");
#line 150 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Url.To("/jobs/actions/requeue/" + JobId));
#line default
#line hidden
WriteLiteral("\" data-loading-text=\"");
#line 150 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\">");
#line 150 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.JobDetailsPage_Requeue);
#line default
#line hidden
WriteLiteral("</button>\r\n <button class=\"btn btn-sm btn-death\" data-ajax" +
"=\"");
#line 151 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Url.To("/jobs/actions/delete/" + JobId));
#line default
#line hidden
WriteLiteral("\" data-loading-text=\"");
#line 151 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\" data-confirm=\"");
#line 151 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.JobDetailsPage_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\">");
#line 151 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.Common_Delete);
#line default
#line hidden
WriteLiteral("</button>\r\n </span>\r\n");
#line 153 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n ");
#line 155 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Strings.JobDetailsPage_State);
#line default
#line hidden
WriteLiteral("\r\n </h3>\r\n");
#line 157 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
var index = 0;
foreach (var entry in job.History)
{
var accentColor = JobHistoryRenderer.GetForegroundStateColor(entry.StateName);
var backgroundColor = JobHistoryRenderer.GetBackgroundStateColor(entry.StateName);
#line default
#line hidden
WriteLiteral(" <div class=\"state-card\" style=\"");
#line 165 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(index == 0 ? $"border-color: {accentColor}" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <h4 class=\"state-card-title\" style=\"");
#line 166 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(index == 0 ? $"color: {accentColor}" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <small class=\"pull-right text-muted\">\r\n");
#line 168 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (index == job.History.Count - 1)
{
#line default
#line hidden
#line 170 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.RelativeTime(entry.CreatedAt));
#line default
#line hidden
#line 170 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
else
{
var duration = Html.ToHumanDuration(entry.CreatedAt - job.History[index + 1].CreatedAt);
if (index == 0)
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral(" ");
#line 178 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.RelativeTime(entry.CreatedAt));
#line default
#line hidden
WriteLiteral(" (");
#line 178 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(duration);
#line default
#line hidden
WriteLiteral(")\r\n");
#line 179 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral(" ");
#line 182 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(Html.MomentTitle(entry.CreatedAt, duration));
#line default
#line hidden
WriteLiteral("\r\n");
#line 183 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
}
#line default
#line hidden
WriteLiteral(" </small>\r\n\r\n ");
#line 187 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(entry.StateName);
#line default
#line hidden
WriteLiteral("\r\n </h4>\r\n\r\n");
#line 190 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (!String.IsNullOrWhiteSpace(entry.Reason))
{
#line default
#line hidden
WriteLiteral(" <p class=\"state-card-text text-muted\">");
#line 192 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(entry.Reason);
#line default
#line hidden
WriteLiteral("</p>\r\n");
#line 193 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n");
#line 195 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
var rendered = Html.RenderHistory(entry.StateName, entry.Data);
#line default
#line hidden
WriteLiteral("\r\n");
#line 199 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
if (rendered != null)
{
#line default
#line hidden
WriteLiteral(" <div class=\"state-card-body\" style=\"");
#line 201 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(index == 0 ? $"background-color: {backgroundColor}" : null);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 202 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
Write(rendered);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 204 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
#line 206 "..\..\Dashboard\Pages\JobDetailsPage.cshtml"
index++;
}
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class LayoutPage
{
public LayoutPage(string title)
{
Title = title;
}
public string Title { get; }
}
}
@* Generator: Template TypeVisibility: Public GeneratePrettyNames: True *@
@using System
@using System.Globalization
@using System.Reflection
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
<!DOCTYPE html>
<html lang="@CultureInfo.CurrentUICulture.TwoLetterISOLanguageName">
<head>
<title>@Title - Hangfire</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@{ var version = GetType().GetTypeInfo().Assembly.GetName().Version; }
<link rel="stylesheet" href="@Url.To($"/css{version.Major}{version.Minor}{version.Build}")">
</head>
<body>
<!-- Wrap all page content here -->
<div id="wrap">
<!-- Fixed navbar -->
<div class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="@Url.Home()">Hangfire Dashboard</a>
</div>
<div class="collapse navbar-collapse">
@Html.RenderPartial(new Navigation())
@if(@AppPath != null) {
<ul class="nav navbar-nav navbar-right">
<li>
<a href="@AppPath">
<span class="glyphicon glyphicon-log-out"></span>
@Strings.LayoutPage_Back
</a>
</li>
</ul>
}
</div>
<!--/.nav-collapse -->
</div>
</div>
<!-- Begin page content -->
<div class="container" style="margin-bottom: 20px;">
@RenderBody()
</div>
</div>
<div id="footer">
<div class="container">
<ul class="list-inline credit">
<li>
<a href="http://hangfire.io/" target="_blank">Hangfire @($"{version.Major}.{version.Minor}.{version.Build}")
</a>
</li>
<li>@Storage</li>
<li>@Strings.LayoutPage_Footer_Time @Html.LocalTime(DateTime.UtcNow)</li>
<li>@String.Format(Strings.LayoutPage_Footer_Generatedms, GenerationTime.Elapsed.TotalMilliseconds.ToString("N"))</li>
</ul>
</div>
</div>
<div id="hangfireConfig"
data-pollinterval="@StatsPollingInterval"
data-pollurl="@(Url.To("/stats"))">
</div>
<script src="@Url.To($"/js{version.Major}{version.Minor}{version.Build}")"></script>
</body>
</html>
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\LayoutPage.cshtml"
using System;
#line default
#line hidden
using System.Collections.Generic;
#line 3 "..\..\Dashboard\Pages\LayoutPage.cshtml"
using System.Globalization;
#line default
#line hidden
using System.Linq;
#line 4 "..\..\Dashboard\Pages\LayoutPage.cshtml"
using System.Reflection;
#line default
#line hidden
using System.Text;
#line 5 "..\..\Dashboard\Pages\LayoutPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\LayoutPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\LayoutPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
public partial class LayoutPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
WriteLiteral("<!DOCTYPE html>\r\n<html lang=\"");
#line 10 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
#line default
#line hidden
WriteLiteral("\">\r\n<head>\r\n <title>");
#line 12 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Title);
#line default
#line hidden
WriteLiteral(" - Hangfire</title>\r\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n " +
" <meta charset=\"utf-8\">\r\n <meta name=\"viewport\" content=\"width=device-width" +
", initial-scale=1.0\">\r\n");
#line 16 "..\..\Dashboard\Pages\LayoutPage.cshtml"
var version = GetType().GetTypeInfo().Assembly.GetName().Version;
#line default
#line hidden
WriteLiteral(" <link rel=\"stylesheet\" href=\"");
#line 17 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Url.To($"/css{version.Major}{version.Minor}{version.Build}"));
#line default
#line hidden
WriteLiteral(@""">
</head>
<body>
<!-- Wrap all page content here -->
<div id=""wrap"">
<!-- Fixed navbar -->
<div class=""navbar navbar-default navbar-fixed-top"">
<div class=""container"">
<div class=""navbar-header"">
<button type=""button"" class=""navbar-toggle"" data-toggle=""collapse"" data-target="".navbar-collapse"">
<span class=""icon-bar""></span>
<span class=""icon-bar""></span>
<span class=""icon-bar""></span>
</button>
<a class=""navbar-brand"" href=""");
#line 32 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Url.Home());
#line default
#line hidden
WriteLiteral("\">Hangfire Dashboard</a>\r\n </div>\r\n <div cl" +
"ass=\"collapse navbar-collapse\">\r\n ");
#line 35 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Html.RenderPartial(new Navigation()));
#line default
#line hidden
WriteLiteral("\r\n");
#line 36 "..\..\Dashboard\Pages\LayoutPage.cshtml"
if(@AppPath != null) {
#line default
#line hidden
WriteLiteral(" <ul class=\"nav navbar-nav navbar-right\">\r\n " +
" <li>\r\n <a href=\"");
#line 39 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(AppPath);
#line default
#line hidden
WriteLiteral("\">\r\n <span class=\"glyphicon glyphicon-log-" +
"out\"></span>\r\n ");
#line 41 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Strings.LayoutPage_Back);
#line default
#line hidden
WriteLiteral("\r\n </a>\r\n </li>" +
"\r\n </ul>\r\n");
#line 45 "..\..\Dashboard\Pages\LayoutPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n <!--/.nav-collapse -->\r\n " +
" </div>\r\n </div>\r\n\r\n <!-- Begin page content -->\r\n " +
" <div class=\"container\" style=\"margin-bottom: 20px;\">\r\n " +
"");
#line 53 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(RenderBody());
#line default
#line hidden
WriteLiteral(@"
</div>
</div>
<div id=""footer"">
<div class=""container"">
<ul class=""list-inline credit"">
<li>
<a href=""http://hangfire.io/"" target=""_blank"">Hangfire ");
#line 61 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write($"{version.Major}.{version.Minor}.{version.Build}");
#line default
#line hidden
WriteLiteral("\r\n </a>\r\n </li>\r\n <l" +
"i>");
#line 64 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Storage);
#line default
#line hidden
WriteLiteral("</li>\r\n <li>");
#line 65 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Strings.LayoutPage_Footer_Time);
#line default
#line hidden
WriteLiteral(" ");
#line 65 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Html.LocalTime(DateTime.UtcNow));
#line default
#line hidden
WriteLiteral("</li>\r\n <li>");
#line 66 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(String.Format(Strings.LayoutPage_Footer_Generatedms, GenerationTime.Elapsed.TotalMilliseconds.ToString("N")));
#line default
#line hidden
WriteLiteral("</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n " +
" <div id=\"hangfireConfig\"\r\n data-pollinterval=\"");
#line 72 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(StatsPollingInterval);
#line default
#line hidden
WriteLiteral("\"\r\n data-pollurl=\"");
#line 73 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Url.To("/stats"));
#line default
#line hidden
WriteLiteral("\">\r\n </div>\r\n\r\n <script src=\"");
#line 76 "..\..\Dashboard\Pages\LayoutPage.cshtml"
Write(Url.To($"/js{version.Major}{version.Minor}{version.Build}"));
#line default
#line hidden
WriteLiteral("\"></script>\r\n </body>\r\n</html>\r\n");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using System.Linq
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.ProcessingJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.ProcessingCount());
var processingJobs = monitor.ProcessingJobs(pager.FromRecord, pager.RecordsPerPage);
var servers = monitor.Servers();
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.ProcessingJobsPage_Title</h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-info">
@Strings.ProcessingJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/processing/requeue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/processing/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm"
disabled="disabled">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.Common_Server</th>
<th>@Strings.Common_Job</th>
<th class="align-right">@Strings.ProcessingJobsPage_Table_Started</th>
</tr>
</thead>
<tbody>
@foreach (var job in processingJobs)
{
<tr class="js-jobs-list-row @(!job.Value.InProcessingState ? "obsolete-data" : null) @(job.Value.InProcessingState ? "hover" : null)">
<td>
@if (job.Value.InProcessingState)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" />
}
</td>
<td class="min-width">
@Html.JobIdLink(job.Key)
@if (!job.Value.InProcessingState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
@if (!job.Value.InProcessingState)
{
<td colspan="3">@Strings.Common_JobStateChanged_Text</td>
}
else
{
<td class="min-width">
@Html.ServerId(job.Value.ServerId)
</td>
<td class="word-break">
@if (servers.All(x => x.Name != job.Value.ServerId || x.Heartbeat < DateTime.UtcNow.AddMinutes(-1)))
{
<span title="@Strings.ProcessingJobsPage_Aborted" class="glyphicon glyphicon-warning-sign" style="font-size: 10px;"></span>
}
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="align-right">
@if (job.Value.StartedAt.HasValue)
{
@Html.RelativeTime(job.Value.StartedAt.Value)
}
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
using System;
#line default
#line hidden
using System.Collections.Generic;
#line 3 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
using System.Linq;
#line default
#line hidden
using System.Text;
#line 4 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class ProcessingJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 8 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Layout = new LayoutPage(Strings.ProcessingJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.ProcessingCount());
var processingJobs = monitor.ProcessingJobs(pager.FromRecord, pager.RecordsPerPage);
var servers = monitor.Servers();
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 24 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 27 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.ProcessingJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 29 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 32 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.ProcessingJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 34 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 40 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Url.To("/jobs/processing/requeue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 41 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");
#line 44 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_RequeueJobs);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-jobs-lis" +
"t-command btn btn-sm btn-default\"\r\n data-url=\"");
#line 48 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Url.To("/jobs/processing/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 49 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 50 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-remove\"></span>\r\n ");
#line 53 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 56 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 66 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 67 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_Server);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 68 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 69 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.ProcessingJobsPage_Table_Started);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 73 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
foreach (var job in processingJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 75 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(!job.Value.InProcessingState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral(" ");
#line 75 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(job.Value.InProcessingState ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n");
#line 77 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
if (job.Value.InProcessingState)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs" +
"-list-checkbox\" name=\"jobs[]\" value=\"");
#line 79 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\" />\r\n");
#line 80 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"min-width\">\r\n ");
#line 83 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 84 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
if (!job.Value.InProcessingState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 86 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 87 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 89 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
if (!job.Value.InProcessingState)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"3\">");
#line 91 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("</td>\r\n");
#line 92 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"min-width\">\r\n " +
" ");
#line 96 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.ServerId(job.Value.ServerId));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"word-break\">\r\n");
#line 99 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
if (servers.All(x => x.Name != job.Value.ServerId || x.Heartbeat < DateTime.UtcNow.AddMinutes(-1)))
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 101 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Strings.ProcessingJobsPage_Aborted);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-warning-sign\" style=\"font-size: 10px;\"></span>\r\n");
#line 102 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n ");
#line 104 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"align-right\">\r\n");
#line 107 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
if (job.Value.StartedAt.HasValue)
{
#line default
#line hidden
#line 109 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.StartedAt.Value));
#line default
#line hidden
#line 109 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 112 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 114 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n\r\n ");
#line 119 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 121 "..\..\Dashboard\Pages\ProcessingJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System.Linq
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.QueuesPage_Title);
var monitor = Storage.GetMonitoringApi();
var queues = monitor.Queues();
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.QueuesPage_Title</h1>
@if (queues.Count == 0)
{
<div class="alert alert-warning">
@Strings.QueuesPage_NoQueues
</div>
}
else
{
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th style="min-width: 200px;">@Strings.QueuesPage_Table_Queue</th>
<th>@Strings.QueuesPage_Table_Length</th>
<th>@Strings.Common_Fetched</th>
<th>@Strings.QueuesPage_Table_NextsJobs</th>
</tr>
</thead>
<tbody>
@foreach (var queue in queues)
{
<tr>
<td>@Html.QueueLabel(queue.Name)</td>
<td>@queue.Length</td>
<td>
@if (queue.Fetched.HasValue)
{
<a href="@Url.To("/jobs/enqueued/fetched/" + queue.Name)">
@queue.Fetched
</a>
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
<td>
@if (queue.FirstJobs.Count == 0)
{
<em>
@Strings.QueuesPage_NoJobs
</em>
}
else
{
<table class="table table-condensed table-inner">
<thead>
<tr>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.Common_State</th>
<th>@Strings.Common_Job</th>
<th class="align-right min-width">@Strings.Common_Enqueued</th>
</tr>
</thead>
<tbody>
@foreach (var job in queue.FirstJobs)
{
<tr class="@(job.Value == null || !job.Value.InEnqueuedState ? "obsolete-data" : null)">
<td class="min-width">
@Html.JobIdLink(job.Key)
@if (job.Value != null && !job.Value.InEnqueuedState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
@if (job.Value == null)
{
<td colspan="3"><em>@Strings.Common_JobExpired</em></td>
}
else
{
<td class="min-width">
@Html.StateLabel(job.Value.State)
</td>
<td class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="align-right min-width">
@if (job.Value.EnqueuedAt.HasValue)
{
@Html.RelativeTime(job.Value.EnqueuedAt.Value)
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
}
</tr>
}
</tbody>
</table>
}
</td>
</tr>
}
</tbody>
</table>
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
#line 2 "..\..\Dashboard\Pages\QueuesPage.cshtml"
using System.Linq;
#line default
#line hidden
using System.Text;
#line 3 "..\..\Dashboard\Pages\QueuesPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\QueuesPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\QueuesPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class QueuesPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 7 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Layout = new LayoutPage(Strings.QueuesPage_Title);
var monitor = Storage.GetMonitoringApi();
var queues = monitor.Queues();
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 16 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 19 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.QueuesPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 21 "..\..\Dashboard\Pages\QueuesPage.cshtml"
if (queues.Count == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 24 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.QueuesPage_NoQueues);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 26 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"table-responsive\">\r\n <table class=\"table t" +
"able-striped\">\r\n <thead>\r\n <tr>\r\n " +
" <th style=\"min-width: 200px;\">");
#line 33 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.QueuesPage_Table_Queue);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 34 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.QueuesPage_Table_Length);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 35 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_Fetched);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 36 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.QueuesPage_Table_NextsJobs);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 40 "..\..\Dashboard\Pages\QueuesPage.cshtml"
foreach (var queue in queues)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n <td>");
#line 43 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Html.QueueLabel(queue.Name));
#line default
#line hidden
WriteLiteral("</td>\r\n <td>");
#line 44 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(queue.Length);
#line default
#line hidden
WriteLiteral("</td>\r\n <td>\r\n");
#line 46 "..\..\Dashboard\Pages\QueuesPage.cshtml"
if (queue.Fetched.HasValue)
{
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 48 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Url.To("/jobs/enqueued/fetched/" + queue.Name));
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 49 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(queue.Fetched);
#line default
#line hidden
WriteLiteral("\r\n </a>\r\n");
#line 51 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 54 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 55 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <td>\r\n");
#line 58 "..\..\Dashboard\Pages\QueuesPage.cshtml"
if (queue.FirstJobs.Count == 0)
{
#line default
#line hidden
WriteLiteral(" <em>\r\n " +
" ");
#line 61 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.QueuesPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </em>\r\n");
#line 63 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(@" <table class=""table table-condensed table-inner"">
<thead>
<tr>
<th class=""min-width"">");
#line 69 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">" +
"");
#line 70 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_State);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 71 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right" +
" min-width\">");
#line 72 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_Enqueued);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n " +
" </thead>\r\n <" +
"tbody>\r\n");
#line 76 "..\..\Dashboard\Pages\QueuesPage.cshtml"
foreach (var job in queue.FirstJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"");
#line 78 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(job.Value == null || !job.Value.InEnqueuedState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td class=\"min-width\"" +
">\r\n ");
#line 80 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 81 "..\..\Dashboard\Pages\QueuesPage.cshtml"
if (job.Value != null && !job.Value.InEnqueuedState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 83 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 84 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 86 "..\..\Dashboard\Pages\QueuesPage.cshtml"
if (job.Value == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"3\"><em>");
#line 88 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_JobExpired);
#line default
#line hidden
WriteLiteral("</em></td>\r\n");
#line 89 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"min-width\"" +
">\r\n ");
#line 93 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Html.StateLabel(job.Value.State));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"word-break" +
"\">\r\n ");
#line 96 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"align-righ" +
"t min-width\">\r\n");
#line 99 "..\..\Dashboard\Pages\QueuesPage.cshtml"
if (job.Value.EnqueuedAt.HasValue)
{
#line default
#line hidden
#line 101 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Html.RelativeTime(job.Value.EnqueuedAt.Value));
#line default
#line hidden
#line 101 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 105 "..\..\Dashboard\Pages\QueuesPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 106 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 108 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 110 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n " +
" </table>\r\n");
#line 113 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r\n");
#line 116 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n");
#line 120 "..\..\Dashboard\Pages\QueuesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: true *@
@using System
@using System.Collections.Generic
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@using Hangfire.Storage
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.RecurringJobsPage_Title);
List<RecurringJobDto> recurringJobs;
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
Pager pager = null;
using (var connection = Storage.GetConnection())
{
var storageConnection = connection as JobStorageConnection;
if (storageConnection != null)
{
pager = new Pager(from, perPage, storageConnection.GetRecurringJobCount());
recurringJobs = storageConnection.GetRecurringJobs(pager.FromRecord, pager.FromRecord + pager.RecordsPerPage);
}
else
{
recurringJobs = connection.GetRecurringJobs();
}
}
}
<div class="row">
<div class="col-md-12">
<h1 class="page-header">@Strings.RecurringJobsPage_Title</h1>
@if (recurringJobs.Count == 0)
{
<div class="alert alert-info">
@Strings.RecurringJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/recurring/trigger")"
data-loading-text="@Strings.RecurringJobsPage_Triggering"
disabled="disabled">
<span class="glyphicon glyphicon-play-circle"></span>
@Strings.RecurringJobsPage_TriggerNow
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/recurring/remove")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm"
disabled="disabled">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_Delete
</button>
@if (pager != null)
{
@: @Html.PerPageSelector(pager)
}
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.RecurringJobsPage_Table_Cron</th>
<th class="min-width">@Strings.RecurringJobsPage_Table_TimeZone</th>
<th>@Strings.Common_Job</th>
<th class="align-right min-width">@Strings.RecurringJobsPage_Table_NextExecution</th>
<th class="align-right min-width">@Strings.RecurringJobsPage_Table_LastExecution</th>
<th class="align-right min-width">@Strings.Common_Created</th>
</tr>
</thead>
<tbody>
@foreach (var job in recurringJobs)
{
<tr class="js-jobs-list-row hover">
<td>
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Id" />
</td>
<td class="min-width">@job.Id</td>
<td class="min-width">
@* ReSharper disable once EmptyGeneralCatchClause *@
@{
string cronDescription = null;
#if NETFULL
try
{
cronDescription = string.IsNullOrEmpty(job.Cron) ? null : CronExpressionDescriptor.ExpressionDescriptor.GetDescription(job.Cron);
}
catch (FormatException)
{
}
#endif
}
@if (cronDescription != null)
{
<code title="@cronDescription">@job.Cron</code>
}
else
{
<code>@job.Cron</code>
}
</td>
<td class="min-width">
@if (!String.IsNullOrWhiteSpace(job.TimeZoneId))
{
<span title="@TimeZoneInfo.FindSystemTimeZoneById(job.TimeZoneId).DisplayName" data-container="body">@job.TimeZoneId</span>
}
else
{
@: UTC
}
</td>
<td class="word-break">
@if (job.Job != null)
{
@: @Html.JobName(job.Job)
}
else
{
<em>@job.LoadException.InnerException.Message</em>
}
</td>
<td class="align-right min-width">
@if (job.NextExecution != null)
{
@Html.RelativeTime(job.NextExecution.Value)
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
<td class="align-right min-width">
@if (job.LastExecution != null)
{
if (!String.IsNullOrEmpty(job.LastJobId))
{
<a href="@Url.JobDetails(job.LastJobId)">
<span class="label label-default label-hover" style="@($"background-color: {JobHistoryRenderer.GetForegroundStateColor(job.LastJobState)};")">
@Html.RelativeTime(job.LastExecution.Value)
</span>
</a>
}
else
{
<em>
@Strings.RecurringJobsPage_Canceled @Html.RelativeTime(job.LastExecution.Value)
</em>
}
}
else
{
<em>@Strings.Common_NotAvailable</em>
}
</td>
<td class="align-right min-width">
@if (job.CreatedAt != null)
{
@Html.RelativeTime(job.CreatedAt.Value)
}
else
{
<em>N/A</em>
}
</td>
</tr>
}
</tbody>
</table>
</div>
@if (pager != null)
{
@: @Html.Paginator(pager)
}
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
using System;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
using Hangfire.Storage;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class RecurringJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 9 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Layout = new LayoutPage(Strings.RecurringJobsPage_Title);
List<RecurringJobDto> recurringJobs;
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
Pager pager = null;
using (var connection = Storage.GetConnection())
{
var storageConnection = connection as JobStorageConnection;
if (storageConnection != null)
{
pager = new Pager(from, perPage, storageConnection.GetRecurringJobCount());
recurringJobs = storageConnection.GetRecurringJobs(pager.FromRecord, pager.FromRecord + pager.RecordsPerPage - 1);
}
else
{
recurringJobs = connection.GetRecurringJobs();
}
}
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h1 class=\"page-header\"" +
">");
#line 37 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 39 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (recurringJobs.Count == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 42 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 44 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 50 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Url.To("/recurring/trigger"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 51 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Triggering);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-play-circle\"></span>\r\n ");
#line 54 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_TriggerNow);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-jobs-lis" +
"t-command btn btn-sm btn-default\"\r\n data-url=\"");
#line 58 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Url.To("/recurring/remove"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 59 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 60 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-remove\"></span>\r\n ");
#line 63 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_Delete);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n");
#line 66 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (pager != null)
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral(" ");
#line 68 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral("\r\n");
#line 69 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(@" </div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 79 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 80 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Table_Cron);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 81 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Table_TimeZone);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 82 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right min-width\">");
#line 83 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Table_NextExecution);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right min-width\">");
#line 84 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Table_LastExecution);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right min-width\">");
#line 85 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_Created);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 89 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
foreach (var job in recurringJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover\">\r\n " +
" <td>\r\n <input typ" +
"e=\"checkbox\" class=\"js-jobs-list-checkbox\" name=\"jobs[]\" value=\"");
#line 93 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(job.Id);
#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n " +
" <td class=\"min-width\">");
#line 95 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(job.Id);
#line default
#line hidden
WriteLiteral("</td>\r\n <td class=\"min-width\">\r\n " +
" ");
WriteLiteral("\r\n");
#line 98 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
string cronDescription = null;
#if NETFULL
try
{
cronDescription = string.IsNullOrEmpty(job.Cron) ? null : CronExpressionDescriptor.ExpressionDescriptor.GetDescription(job.Cron);
}
catch (FormatException)
{
}
#endif
#line default
#line hidden
WriteLiteral("\r\n");
#line 111 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (cronDescription != null)
{
#line default
#line hidden
WriteLiteral(" <code title=\"");
#line 113 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(cronDescription);
#line default
#line hidden
WriteLiteral("\">");
#line 113 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(job.Cron);
#line default
#line hidden
WriteLiteral("</code>\r\n");
#line 114 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <code>");
#line 117 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(job.Cron);
#line default
#line hidden
WriteLiteral("</code>\r\n");
#line 118 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"min-width\">\r\n");
#line 121 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (!String.IsNullOrWhiteSpace(job.TimeZoneId))
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 123 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(TimeZoneInfo.FindSystemTimeZoneById(job.TimeZoneId).DisplayName);
#line default
#line hidden
WriteLiteral("\" data-container=\"body\">");
#line 123 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(job.TimeZoneId);
#line default
#line hidden
WriteLiteral("</span>\r\n");
#line 124 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral(" UTC\r\n");
#line 128 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"word-break\">\r\n");
#line 131 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (job.Job != null)
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral(" ");
#line 133 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.JobName(job.Job));
#line default
#line hidden
WriteLiteral("\r\n");
#line 134 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 137 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(job.LoadException.InnerException.Message);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 138 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"align-right min-width\">\r\n");
#line 141 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (job.NextExecution != null)
{
#line default
#line hidden
#line 143 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.RelativeTime(job.NextExecution.Value));
#line default
#line hidden
#line 143 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 147 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 148 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"align-right min-width\">\r\n");
#line 151 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (job.LastExecution != null)
{
if (!String.IsNullOrEmpty(job.LastJobId))
{
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 155 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Url.JobDetails(job.LastJobId));
#line default
#line hidden
WriteLiteral("\">\r\n <span class=\"label label-" +
"default label-hover\" style=\"");
#line 156 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write($"background-color: {JobHistoryRenderer.GetForegroundStateColor(job.LastJobState)};");
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 157 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.RelativeTime(job.LastExecution.Value));
#line default
#line hidden
WriteLiteral("\r\n </span>\r\n " +
" </a>\r\n");
#line 160 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>\r\n " +
" ");
#line 164 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.RecurringJobsPage_Canceled);
#line default
#line hidden
WriteLiteral(" ");
#line 164 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.RelativeTime(job.LastExecution.Value));
#line default
#line hidden
WriteLiteral("\r\n </em>\r\n");
#line 166 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
}
else
{
#line default
#line hidden
WriteLiteral(" <em>");
#line 170 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Strings.Common_NotAvailable);
#line default
#line hidden
WriteLiteral("</em>\r\n");
#line 171 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"align-right min-width\">\r\n");
#line 174 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (job.CreatedAt != null)
{
#line default
#line hidden
#line 176 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.RelativeTime(job.CreatedAt.Value));
#line default
#line hidden
#line 176 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <em>N/A</em>\r\n");
#line 181 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r" +
"\n");
#line 184 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n\r\n");
#line 189 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
if (pager != null)
{
#line default
#line hidden
WriteLiteral(" ");
WriteLiteral(" ");
#line 191 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n");
#line 192 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
#line 194 "..\..\Dashboard\Pages\RecurringJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div> ");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System.Collections.Generic
@using Hangfire.Common
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@using Hangfire.Storage
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.RetriesPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
Pager pager = null;
List<string> jobIds = null;
using (var connection = Storage.GetConnection())
{
var storageConnection = connection as JobStorageConnection;
if (storageConnection != null)
{
pager = new Pager(@from, perPage, storageConnection.GetSetCount("retries"));
jobIds = storageConnection.GetRangeFromSet("retries", pager.FromRecord, pager.FromRecord + pager.RecordsPerPage - 1);
}
}
}
@if (pager == null)
{
<div class="alert alert-warning">
@Html.Raw(String.Format(Strings.RetriesPage_Warning_Html, Url.To("/jobs/scheduled")))
</div>
}
else
{
<div class="row">
<div class="col-md-12">
<h1 class="page-header">@Strings.RetriesPage_Title</h1>
@if (jobIds.Count == 0)
{
<div class="alert alert-success">
@Strings.RetriesPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/scheduled/enqueue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_EnqueueButton_Text
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/scheduled/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm"
disabled="disabled">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th class="min-width">@Strings.Common_State</th>
<th>@Strings.Common_Job</th>
<th>@Strings.Common_Reason</th>
<th class="align-right">@Strings.Common_Retry</th>
<th class="align-right">@Strings.Common_Created</th>
</tr>
</thead>
<tbody>
@foreach (var jobId in jobIds)
{
JobData jobData;
StateData stateData;
using (var connection = Storage.GetConnection())
{
jobData = connection.GetJobData(jobId);
stateData = connection.GetStateData(jobId);
}
<tr class="js-jobs-list-row @(jobData != null ? "hover" : null)">
<td>
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@jobId" />
</td>
<td class="min-width">
@Html.JobIdLink(jobId)
</td>
@if (jobData == null)
{
<td colspan="5"><em>Job expired.</em></td>
}
else
{
<td class="min-width">
@Html.StateLabel(jobData.State)
</td>
<td class="word-break">
@Html.JobNameLink(jobId, jobData.Job)
</td>
<td>
@(stateData?.Reason)
</td>
<td class="align-right">
@if (stateData != null && stateData.Data.ContainsKey("EnqueueAt"))
{
@Html.RelativeTime(JobHelper.DeserializeDateTime(stateData.Data["EnqueueAt"]))
}
</td>
<td class="align-right">
@Html.RelativeTime(jobData.CreatedAt)
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
}
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
#line 2 "..\..\Dashboard\Pages\RetriesPage.cshtml"
using System.Collections.Generic;
#line default
#line hidden
using System.Linq;
using System.Text;
#line 3 "..\..\Dashboard\Pages\RetriesPage.cshtml"
using Hangfire.Common;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\RetriesPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\RetriesPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\RetriesPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\RetriesPage.cshtml"
using Hangfire.Storage;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class RetriesPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 9 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Layout = new LayoutPage(Strings.RetriesPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
Pager pager = null;
List<string> jobIds = null;
using (var connection = Storage.GetConnection())
{
var storageConnection = connection as JobStorageConnection;
if (storageConnection != null)
{
pager = new Pager(@from, perPage, storageConnection.GetSetCount("retries"));
jobIds = storageConnection.GetRangeFromSet("retries", pager.FromRecord, pager.FromRecord + pager.RecordsPerPage - 1);
}
}
#line default
#line hidden
WriteLiteral("\r\n");
#line 32 "..\..\Dashboard\Pages\RetriesPage.cshtml"
if (pager == null)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 35 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.Raw(String.Format(Strings.RetriesPage_Warning_Html, Url.To("/jobs/scheduled"))));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 37 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h1 class=\"pa" +
"ge-header\">");
#line 42 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.RetriesPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n");
#line 43 "..\..\Dashboard\Pages\RetriesPage.cshtml"
if (jobIds.Count == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-success\">\r\n ");
#line 46 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.RetriesPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 48 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-t" +
"oolbar btn-toolbar-top\">\r\n <button class=\"js-jobs-list-co" +
"mmand btn btn-sm btn-primary\"\r\n data-url=\"");
#line 54 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Url.To("/jobs/scheduled/enqueue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 55 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n " +
" <span class=\"glyphicon glyphicon-repeat\"></span>\r\n " +
" ");
#line 58 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_EnqueueButton_Text);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-" +
"jobs-list-command btn btn-sm btn-default\"\r\n data-" +
"url=\"");
#line 62 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Url.To("/jobs/scheduled/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 63 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 64 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n " +
" <span class=\"glyphicon glyphicon-remove\"></span>\r\n " +
" ");
#line 67 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 70 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table table-hover"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 80 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 81 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_State);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 82 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 83 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Reason);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 84 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Retry);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 85 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Strings.Common_Created);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead" +
">\r\n <tbody>\r\n");
#line 89 "..\..\Dashboard\Pages\RetriesPage.cshtml"
foreach (var jobId in jobIds)
{
JobData jobData;
StateData stateData;
using (var connection = Storage.GetConnection())
{
jobData = connection.GetJobData(jobId);
stateData = connection.GetStateData(jobId);
}
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 100 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(jobData != null ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n " +
" <input type=\"checkbox\" class=\"js-jobs-list-checkbox\" name=\"jobs[]\" " +
"value=\"");
#line 102 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(jobId);
#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n " +
" <td class=\"min-width\">\r\n " +
"");
#line 105 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.JobIdLink(jobId));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
#line 107 "..\..\Dashboard\Pages\RetriesPage.cshtml"
if (jobData == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"5\"><em>Job expired.</em>" +
"</td>\r\n");
#line 110 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"min-width\">\r\n " +
" ");
#line 114 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.StateLabel(jobData.State));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"word-break\">\r\n " +
" ");
#line 117 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.JobNameLink(jobId, jobData.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td>\r\n " +
" ");
#line 120 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(stateData?.Reason);
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"align-right\">\r\n");
#line 123 "..\..\Dashboard\Pages\RetriesPage.cshtml"
if (stateData != null && stateData.Data.ContainsKey("EnqueueAt"))
{
#line default
#line hidden
#line 125 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.RelativeTime(JobHelper.DeserializeDateTime(stateData.Data["EnqueueAt"])));
#line default
#line hidden
#line 125 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
WriteLiteral(" <td class=\"align-right\">\r\n " +
" ");
#line 129 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.RelativeTime(jobData.CreatedAt));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
#line 131 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 133 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n " +
" </div>\r\n\r\n ");
#line 138 "..\..\Dashboard\Pages\RetriesPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 140 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n </div>\r\n");
#line 143 "..\..\Dashboard\Pages\RetriesPage.cshtml"
}
#line default
#line hidden
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.ScheduledJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.ScheduledCount());
var scheduledJobs = monitor.ScheduledJobs(pager.FromRecord, pager.RecordsPerPage);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.ScheduledJobsPage_Title</h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-info">
@Strings.ScheduledJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/scheduled/enqueue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-play"></span>
@Strings.ScheduledJobsPage_EnqueueNow
</button>
<button class="js-jobs-list-command btn btn-sm btn-default"
data-url="@Url.To("/jobs/scheduled/delete")"
data-loading-text="@Strings.Common_Deleting"
data-confirm="@Strings.Common_DeleteConfirm"
disabled="disabled">
<span class="glyphicon glyphicon-remove"></span>
@Strings.Common_DeleteSelected
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th>@Strings.ScheduledJobsPage_Table_Enqueue</th>
<th>@Strings.Common_Job</th>
<th class="align-right">@Strings.ScheduledJobsPage_Table_Scheduled</th>
</tr>
</thead>
@foreach (var job in scheduledJobs)
{
<tr class="js-jobs-list-row @(!job.Value.InScheduledState ? "obsolete-data" : null) @(job.Value.InScheduledState ? "hover" : null)">
<td>
@if (job.Value.InScheduledState)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" />
}
</td>
<td class="min-width">
@Html.JobIdLink(job.Key)
@if (!job.Value.InScheduledState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
<td class="min-width">
@Html.RelativeTime(job.Value.EnqueueAt)
</td>
<td class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="align-right">
@if (job.Value.ScheduledAt.HasValue)
{
@Html.RelativeTime(job.Value.ScheduledAt.Value)
}
</td>
</tr>
}
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class ScheduledJobsPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 6 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Layout = new LayoutPage(Strings.ScheduledJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.ScheduledCount());
var scheduledJobs = monitor.ScheduledJobs(pager.FromRecord, pager.RecordsPerPage);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 21 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 24 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.ScheduledJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 26 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 29 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.ScheduledJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 31 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 37 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Url.To("/jobs/scheduled/enqueue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 38 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-play\"></span>\r\n ");
#line 41 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.ScheduledJobsPage_EnqueueNow);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n <button class=\"js-jobs-lis" +
"t-command btn btn-sm btn-default\"\r\n data-url=\"");
#line 45 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Url.To("/jobs/scheduled/delete"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 46 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_Deleting);
#line default
#line hidden
WriteLiteral("\"\r\n data-confirm=\"");
#line 47 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_DeleteConfirm);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-remove\"></span>\r\n ");
#line 50 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_DeleteSelected);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 53 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 63 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 64 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.ScheduledJobsPage_Table_Enqueue);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 65 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 66 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.ScheduledJobsPage_Table_Scheduled);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n");
#line 69 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
foreach (var job in scheduledJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 71 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(!job.Value.InScheduledState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral(" ");
#line 71 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(job.Value.InScheduledState ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n");
#line 73 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
if (job.Value.InScheduledState)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs-lis" +
"t-checkbox\" name=\"jobs[]\" value=\"");
#line 75 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\" />\r\n");
#line 76 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <td class=" +
"\"min-width\">\r\n ");
#line 79 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 80 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
if (!job.Value.InScheduledState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 82 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 83 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <td class=" +
"\"min-width\">\r\n ");
#line 86 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.EnqueueAt));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n <td clas" +
"s=\"word-break\">\r\n ");
#line 89 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n <td clas" +
"s=\"align-right\">\r\n");
#line 92 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
if (job.Value.ScheduledAt.HasValue)
{
#line default
#line hidden
#line 94 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.RelativeTime(job.Value.ScheduledAt.Value));
#line default
#line hidden
#line 94 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r\n");
#line 98 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </table>\r\n </div>\r\n\r\n ");
#line 102 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 104 "..\..\Dashboard\Pages\ScheduledJobsPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using System.Linq
@using Hangfire.Common
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.ServersPage_Title);
var monitor = Storage.GetMonitoringApi();
var servers = monitor.Servers();
}
<div class="row">
<div class="col-md-12">
<h1 class="page-header">@Strings.ServersPage_Title</h1>
@if (servers.Count == 0)
{
<div class="alert alert-warning">
@Strings.ServersPage_NoServers
</div>
}
else
{
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>@Strings.ServersPage_Table_Name</th>
<th>@Strings.ServersPage_Table_Workers</th>
<th>@Strings.ServersPage_Table_Queues</th>
<th>@Strings.ServersPage_Table_Started</th>
<th>@Strings.ServersPage_Table_Heartbeat</th>
</tr>
</thead>
<tbody>
@foreach (var server in servers)
{
<tr>
<td>@Html.ServerId(server.Name)</td>
<td>@server.WorkersCount</td>
<td>@Html.Raw(String.Join(", ", server.Queues.Select(Html.QueueLabel)))</td>
<td data-moment="@JobHelper.ToTimestamp(server.StartedAt)">@server.StartedAt</td>
<td>
@if (server.Heartbeat.HasValue)
{
@Html.RelativeTime(server.Heartbeat.Value)
}
</td>
</tr>
}
</tbody>
</table>
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\ServersPage.cshtml"
using System;
#line default
#line hidden
using System.Collections.Generic;
#line 3 "..\..\Dashboard\Pages\ServersPage.cshtml"
using System.Linq;
#line default
#line hidden
using System.Text;
#line 4 "..\..\Dashboard\Pages\ServersPage.cshtml"
using Hangfire.Common;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\ServersPage.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\ServersPage.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\ServersPage.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class ServersPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 9 "..\..\Dashboard\Pages\ServersPage.cshtml"
Layout = new LayoutPage(Strings.ServersPage_Title);
var monitor = Storage.GetMonitoringApi();
var servers = monitor.Servers();
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h1 class=\"page-header\"" +
">");
#line 18 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 20 "..\..\Dashboard\Pages\ServersPage.cshtml"
if (servers.Count == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 23 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_NoServers);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 25 "..\..\Dashboard\Pages\ServersPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"table-responsive\">\r\n <table class=\"table\">" +
"\r\n <thead>\r\n <tr>\r\n " +
" <th>");
#line 32 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_Table_Name);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 33 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_Table_Workers);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 34 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_Table_Queues);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 35 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_Table_Started);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 36 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Strings.ServersPage_Table_Heartbeat);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 40 "..\..\Dashboard\Pages\ServersPage.cshtml"
foreach (var server in servers)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n <td>");
#line 43 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Html.ServerId(server.Name));
#line default
#line hidden
WriteLiteral("</td>\r\n <td>");
#line 44 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(server.WorkersCount);
#line default
#line hidden
WriteLiteral("</td>\r\n <td>");
#line 45 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Html.Raw(String.Join(", ", server.Queues.Select(Html.QueueLabel))));
#line default
#line hidden
WriteLiteral("</td>\r\n <td data-moment=\"");
#line 46 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(JobHelper.ToTimestamp(server.StartedAt));
#line default
#line hidden
WriteLiteral("\">");
#line 46 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(server.StartedAt);
#line default
#line hidden
WriteLiteral("</td>\r\n <td>\r\n");
#line 48 "..\..\Dashboard\Pages\ServersPage.cshtml"
if (server.Heartbeat.HasValue)
{
#line default
#line hidden
#line 50 "..\..\Dashboard\Pages\ServersPage.cshtml"
Write(Html.RelativeTime(server.Heartbeat.Value));
#line default
#line hidden
#line 50 "..\..\Dashboard\Pages\ServersPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r\n");
#line 54 "..\..\Dashboard\Pages\ServersPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n");
#line 58 "..\..\Dashboard\Pages\ServersPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
// This file is part of Hangfire.
// Copyright © 2015 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using Hangfire.Annotations;
namespace Hangfire.Dashboard.Pages
{
partial class SidebarMenu
{
public SidebarMenu([NotNull] IEnumerable<Func<RazorPage, MenuItem>> items)
{
if (items == null) throw new ArgumentNullException(nameof(items));
Items = items;
}
public IEnumerable<Func<RazorPage, MenuItem>> Items { get; }
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Pages
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.SucceededJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.SucceededListCount());
var succeededJobs = monitor.SucceededJobs(pager.FromRecord, pager.RecordsPerPage);
}
<div class="row">
<div class="col-md-3">
@Html.JobsSidebar()
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.SucceededJobsPage_Title</h1>
@if (pager.TotalPageCount == 0)
{
<div class="alert alert-info">
@Strings.SucceededJobsPage_NoJobs
</div>
}
else
{
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<button class="js-jobs-list-command btn btn-sm btn-primary"
data-url="@Url.To("/jobs/succeeded/requeue")"
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
</button>
@Html.PerPageSelector(pager)
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="min-width">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th class="min-width">@Strings.Common_Id</th>
<th>@Strings.Common_Job</th>
<th class="min-width">@Strings.SucceededJobsPage_Table_TotalDuration</th>
<th class="align-right">@Strings.SucceededJobsPage_Table_Succeeded</th>
</tr>
</thead>
<tbody>
@foreach (var job in succeededJobs)
{
<tr class="js-jobs-list-row @(job.Value == null || !job.Value.InSucceededState ? "obsolete-data" : null) @(job.Value != null && job.Value.InSucceededState ? "hover" : null)">
<td>
@if (job.Value == null || job.Value.InSucceededState)
{
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" />
}
</td>
<td class="min-width">
@Html.JobIdLink(job.Key)
@if (job.Value != null && !job.Value.InSucceededState)
{
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span>
}
</td>
@if (job.Value == null)
{
<td colspan="3">
<em>@Strings.Common_JobExpired</em>
</td>
}
else
{
<td class="word-break">
@Html.JobNameLink(job.Key, job.Value.Job)
</td>
<td class="min-width align-right">
@if (job.Value.TotalDuration.HasValue)
{
@Html.ToHumanDuration(TimeSpan.FromMilliseconds(job.Value.TotalDuration.Value), false)
}
</td>
<td class="min-width align-right">
@if (job.Value.SucceededAt.HasValue)
{
@Html.RelativeTime(job.Value.SucceededAt.Value)
}
</td>
}
</tr>
}
</tbody>
</table>
</div>
@Html.Paginator(pager)
</div>
}
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
using System;
#line default
#line hidden
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 3 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
using Hangfire.Dashboard.Pages;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class SucceededJobs : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 7 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Layout = new LayoutPage(Strings.SucceededJobsPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, monitor.SucceededListCount());
var succeededJobs = monitor.SucceededJobs(pager.FromRecord, pager.RecordsPerPage);
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
#line 22 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.JobsSidebar());
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line 25 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.SucceededJobsPage_Title);
#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 27 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
if (pager.TotalPageCount == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
#line 30 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.SucceededJobsPage_NoJobs);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 32 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar b" +
"tn-toolbar-top\">\r\n <button class=\"js-jobs-list-command btn bt" +
"n-sm btn-primary\"\r\n data-url=\"");
#line 38 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Url.To("/jobs/succeeded/requeue"));
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 39 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");
#line 42 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.Common_RequeueJobs);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");
#line 45 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.PerPageSelector(pager));
#line default
#line hidden
WriteLiteral(@"
</div>
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th class=""min-width"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th class=""min-width"">");
#line 55 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.Common_Id);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 56 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.Common_Job);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");
#line 57 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.SucceededJobsPage_Table_TotalDuration);
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");
#line 58 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.SucceededJobsPage_Table_Succeeded);
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 62 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
foreach (var job in succeededJobs)
{
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row ");
#line 64 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(job.Value == null || !job.Value.InSucceededState ? "obsolete-data" : null);
#line default
#line hidden
WriteLiteral(" ");
#line 64 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(job.Value != null && job.Value.InSucceededState ? "hover" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <td>\r\n");
#line 66 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
if (job.Value == null || job.Value.InSucceededState)
{
#line default
#line hidden
WriteLiteral(" <input type=\"checkbox\" class=\"js-jobs" +
"-list-checkbox\" name=\"jobs[]\" value=\"");
#line 68 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(job.Key);
#line default
#line hidden
WriteLiteral("\" />\r\n");
#line 69 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <t" +
"d class=\"min-width\">\r\n ");
#line 72 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.JobIdLink(job.Key));
#line default
#line hidden
WriteLiteral("\r\n");
#line 73 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
if (job.Value != null && !job.Value.InSucceededState)
{
#line default
#line hidden
WriteLiteral(" <span title=\"");
#line 75 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.Common_JobStateChanged_Text);
#line default
#line hidden
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n");
#line 76 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n\r\n");
#line 79 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
if (job.Value == null)
{
#line default
#line hidden
WriteLiteral(" <td colspan=\"3\">\r\n " +
" <em>");
#line 82 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Strings.Common_JobExpired);
#line default
#line hidden
WriteLiteral("</em>\r\n </td>\r\n");
#line 84 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(" <td class=\"word-break\">\r\n " +
" ");
#line 88 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.JobNameLink(job.Key, job.Value.Job));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n");
WriteLiteral(" <td class=\"min-width align-right\">\r\n");
#line 91 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
if (job.Value.TotalDuration.HasValue)
{
#line default
#line hidden
#line 93 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.ToHumanDuration(TimeSpan.FromMilliseconds(job.Value.TotalDuration.Value), false));
#line default
#line hidden
#line 93 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
WriteLiteral(" <td class=\"min-width align-right\">\r\n");
#line 97 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
if (job.Value.SucceededAt.HasValue)
{
#line default
#line hidden
#line 99 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.RelativeTime(job.Value.SucceededAt.Value));
#line default
#line hidden
#line 99 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n");
#line 102 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tr>\r\n");
#line 104 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n\r\n ");
#line 109 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
Write(Html.Paginator(pager));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 111 "..\..\Dashboard\Pages\SucceededJobs.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Resources
@inherits RazorPage
@{
var metric = DashboardMetric.Func(this);
var className = metric == null ? "metric-null" : metric.Style.ToClassName();
var highlighted = metric != null && metric.Highlighted ? "highlighted" : null;
}
<div class="metric @className @highlighted">
<div class="metric-body" data-metric="@DashboardMetric.Name">
@(metric?.Value)
</div>
<div class="metric-description">
@(Strings.ResourceManager.GetString(DashboardMetric.Title) ?? DashboardMetric.Title)
</div>
</div>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class BlockMetric : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 5 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
var metric = DashboardMetric.Func(this);
var className = metric == null ? "metric-null" : metric.Style.ToClassName();
var highlighted = metric != null && metric.Highlighted ? "highlighted" : null;
#line default
#line hidden
WriteLiteral("<div class=\"metric ");
#line 10 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
Write(className);
#line default
#line hidden
WriteLiteral(" ");
#line 10 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
Write(highlighted);
#line default
#line hidden
WriteLiteral("\">\r\n <div class=\"metric-body\" data-metric=\"");
#line 11 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
Write(DashboardMetric.Name);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 12 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
Write(metric?.Value);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"metric-description\">\r\n ");
#line 15 "..\..\Dashboard\Pages\_BlockMetric.cshtml"
Write(Strings.ResourceManager.GetString(DashboardMetric.Title) ?? DashboardMetric.Title);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard
@inherits RazorPage
<ol class="breadcrumb">
<li><a href="@Url.Home()"><span class="glyphicon glyphicon-home"></span></a></li>
@foreach (var item in Items)
{
<li><a href="@item.Value">@item.Key</a></li>
}
<li class="active">@Title</li>
</ol>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class Breadcrumbs : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
WriteLiteral("\r\n<ol class=\"breadcrumb\">\r\n <li><a href=\"");
#line 6 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
Write(Url.Home());
#line default
#line hidden
WriteLiteral("\"><span class=\"glyphicon glyphicon-home\"></span></a></li>\r\n");
#line 7 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
foreach (var item in Items)
{
#line default
#line hidden
WriteLiteral(" <li><a href=\"");
#line 9 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
Write(item.Value);
#line default
#line hidden
WriteLiteral("\">");
#line 9 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
Write(item.Key);
#line default
#line hidden
WriteLiteral("</a></li>\r\n");
#line 10 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
}
#line default
#line hidden
WriteLiteral(" <li class=\"active\">");
#line 11 "..\..\Dashboard\Pages\_Breadcrumbs.cshtml"
Write(Title);
#line default
#line hidden
WriteLiteral("</li>\r\n</ol>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard
@inherits RazorPage
@{
var metric = DashboardMetric.Func(this);
var className = metric == null ? "metric-null" : metric.Style.ToClassName();
var highlighted = metric != null && metric.Highlighted ? "highlighted" : null;
}
<span data-metric="@DashboardMetric.Name" class="metric @className @highlighted">@(metric?.Value)</span>
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_InlineMetric.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class InlineMetric : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 4 "..\..\Dashboard\Pages\_InlineMetric.cshtml"
var metric = DashboardMetric.Func(this);
var className = metric == null ? "metric-null" : metric.Style.ToClassName();
var highlighted = metric != null && metric.Highlighted ? "highlighted" : null;
#line default
#line hidden
WriteLiteral("<span data-metric=\"");
#line 9 "..\..\Dashboard\Pages\_InlineMetric.cshtml"
Write(DashboardMetric.Name);
#line default
#line hidden
WriteLiteral("\" class=\"metric ");
#line 9 "..\..\Dashboard\Pages\_InlineMetric.cshtml"
Write(className);
#line default
#line hidden
WriteLiteral(" ");
#line 9 "..\..\Dashboard\Pages\_InlineMetric.cshtml"
Write(highlighted);
#line default
#line hidden
WriteLiteral("\">");
#line 9 "..\..\Dashboard\Pages\_InlineMetric.cshtml"
Write(metric?.Value);
#line default
#line hidden
WriteLiteral("</span>");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard
@inherits RazorPage
@if (NavigationMenu.Items.Count > 0)
{
<ul class="nav navbar-nav">
@foreach (var item in NavigationMenu.Items)
{
var itemValue = item(this);
if (itemValue == null) { continue; }
<li class="@(itemValue.Active ? "active" : null)">
<a href="@itemValue.Url">
@itemValue.Text
@foreach (var metric in itemValue.GetAllMetrics())
{
@Html.InlineMetric(metric)
}
</a>
</li>
}
</ul>
}
\ No newline at end of file
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_Navigation.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class Navigation : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 4 "..\..\Dashboard\Pages\_Navigation.cshtml"
if (NavigationMenu.Items.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <ul class=\"nav navbar-nav\">\r\n");
#line 7 "..\..\Dashboard\Pages\_Navigation.cshtml"
foreach (var item in NavigationMenu.Items)
{
var itemValue = item(this);
if (itemValue == null) { continue; }
#line default
#line hidden
WriteLiteral(" <li class=\"");
#line 13 "..\..\Dashboard\Pages\_Navigation.cshtml"
Write(itemValue.Active ? "active" : null);
#line default
#line hidden
WriteLiteral("\">\r\n <a href=\"");
#line 14 "..\..\Dashboard\Pages\_Navigation.cshtml"
Write(itemValue.Url);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 15 "..\..\Dashboard\Pages\_Navigation.cshtml"
Write(itemValue.Text);
#line default
#line hidden
WriteLiteral("\r\n\r\n");
#line 17 "..\..\Dashboard\Pages\_Navigation.cshtml"
foreach (var metric in itemValue.GetAllMetrics())
{
#line default
#line hidden
#line 19 "..\..\Dashboard\Pages\_Navigation.cshtml"
Write(Html.InlineMetric(metric));
#line default
#line hidden
#line 19 "..\..\Dashboard\Pages\_Navigation.cshtml"
}
#line default
#line hidden
WriteLiteral(" </a>\r\n </li>\r\n");
#line 23 "..\..\Dashboard\Pages\_Navigation.cshtml"
}
#line default
#line hidden
WriteLiteral(" </ul>\r\n");
#line 25 "..\..\Dashboard\Pages\_Navigation.cshtml"
}
#line default
#line hidden
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class Paginator
{
private readonly Pager _pager;
public Paginator(Pager pager)
{
_pager = pager;
}
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard
@using Hangfire.Dashboard.Resources;
@inherits RazorPage
<div class="btn-toolbar">
@if (_pager.TotalPageCount > 1)
{
<div class="btn-group paginator">
@foreach (var page in _pager.PagerItems)
{
switch (page.Type)
{
case Pager.ItemType.Page:
<a href="@_pager.PageUrl(page.PageIndex)" class="btn btn-default @(_pager.CurrentPage == page.PageIndex ? "active" : null)">
@page.PageIndex
</a>
break;
case Pager.ItemType.NextPage:
<a href="@_pager.PageUrl(page.PageIndex)" class="btn btn-default @(page.Disabled ? "disabled" : null)">
@Strings.Paginator_Next
</a>
break;
case Pager.ItemType.PrevPage:
<a href="@_pager.PageUrl(page.PageIndex)" class="btn btn-default @(page.Disabled ? "disabled" : null)">
@Strings.Paginator_Prev
</a>
break;
case Pager.ItemType.MorePage:
<a href="#" class="btn btn-default disabled">
</a>
break;
}
}
</div>
<div class="btn-toolbar-spacer"></div>
}
<div class="btn-toolbar-label">
@Strings.Paginator_TotalItems: @_pager.TotalRecordCount
</div>
</div>
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_Paginator.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\_Paginator.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class Paginator : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
WriteLiteral("\r\n");
WriteLiteral("<div class=\"btn-toolbar\">\r\n");
#line 7 "..\..\Dashboard\Pages\_Paginator.cshtml"
if (_pager.TotalPageCount > 1)
{
#line default
#line hidden
WriteLiteral(" <div class=\"btn-group paginator\">\r\n");
#line 10 "..\..\Dashboard\Pages\_Paginator.cshtml"
foreach (var page in _pager.PagerItems)
{
switch (page.Type)
{
case Pager.ItemType.Page:
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 15 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(_pager.PageUrl(page.PageIndex));
#line default
#line hidden
WriteLiteral("\" class=\"btn btn-default ");
#line 15 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(_pager.CurrentPage == page.PageIndex ? "active" : null);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 16 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(page.PageIndex);
#line default
#line hidden
WriteLiteral(" \r\n </a>\r\n");
#line 18 "..\..\Dashboard\Pages\_Paginator.cshtml"
break;
case Pager.ItemType.NextPage:
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 20 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(_pager.PageUrl(page.PageIndex));
#line default
#line hidden
WriteLiteral("\" class=\"btn btn-default ");
#line 20 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(page.Disabled ? "disabled" : null);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 21 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(Strings.Paginator_Next);
#line default
#line hidden
WriteLiteral("\r\n </a>\r\n");
#line 23 "..\..\Dashboard\Pages\_Paginator.cshtml"
break;
case Pager.ItemType.PrevPage:
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 25 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(_pager.PageUrl(page.PageIndex));
#line default
#line hidden
WriteLiteral("\" class=\"btn btn-default ");
#line 25 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(page.Disabled ? "disabled" : null);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 26 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(Strings.Paginator_Prev);
#line default
#line hidden
WriteLiteral("\r\n </a>\r\n");
#line 28 "..\..\Dashboard\Pages\_Paginator.cshtml"
break;
case Pager.ItemType.MorePage:
#line default
#line hidden
WriteLiteral(" <a href=\"#\" class=\"btn btn-default disabled\">\r\n " +
" …\r\n </a>\r\n");
#line 33 "..\..\Dashboard\Pages\_Paginator.cshtml"
break;
}
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
WriteLiteral(" <div class=\"btn-toolbar-spacer\"></div>\r\n");
#line 38 "..\..\Dashboard\Pages\_Paginator.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n <div class=\"btn-toolbar-label\">\r\n ");
#line 41 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(Strings.Paginator_TotalItems);
#line default
#line hidden
WriteLiteral(": ");
#line 41 "..\..\Dashboard\Pages\_Paginator.cshtml"
Write(_pager.TotalRecordCount);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n</div>\r\n");
}
}
}
#pragma warning restore 1591
namespace Hangfire.Dashboard.Pages
{
partial class PerPageSelector
{
private readonly Pager _pager;
public PerPageSelector(Pager pager)
{
_pager = pager;
}
}
}
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard.Resources;
@inherits Hangfire.Dashboard.RazorPage
<div class="btn-group pull-right paginator">
@foreach (var count in new[] { 10, 20, 50, 100, 500 })
{
<a class="btn btn-sm btn-default @(count == _pager.RecordsPerPage ? "active" : null)"
href="@_pager.RecordsPerPageUrl(count)">@count</a>
}
</div>
<div class="btn-toolbar-spacer pull-right"></div>
<div class="btn-toolbar-label btn-toolbar-label-sm pull-right">
@Strings.PerPageSelector_ItemsPerPage:
</div>
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
using Hangfire.Dashboard.Resources;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class PerPageSelector : Hangfire.Dashboard.RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
WriteLiteral("\r\n <div class=\"btn-group pull-right paginator\">\r\n");
#line 6 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
foreach (var count in new[] { 10, 20, 50, 100, 500 })
{
#line default
#line hidden
WriteLiteral(" <a class=\"btn btn-sm btn-default ");
#line 8 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
Write(count == _pager.RecordsPerPage ? "active" : null);
#line default
#line hidden
WriteLiteral("\" \r\n href=\"");
#line 9 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
Write(_pager.RecordsPerPageUrl(count));
#line default
#line hidden
WriteLiteral("\">");
#line 9 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
Write(count);
#line default
#line hidden
WriteLiteral("</a> \r\n");
#line 10 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n <div class=\"btn-toolbar-spacer pull-right\"></div>\r\n <div class" +
"=\"btn-toolbar-label btn-toolbar-label-sm pull-right\">\r\n ");
#line 14 "..\..\Dashboard\Pages\_PerPageSelector.cshtml"
Write(Strings.PerPageSelector_ItemsPerPage);
#line default
#line hidden
WriteLiteral(":\r\n </div>\r\n");
}
}
}
#pragma warning restore 1591
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True TrimLeadingUnderscores : true *@
@using Hangfire.Dashboard
@inherits RazorPage
@if (Items.Any())
{
<div id="stats" class="list-group">
@foreach (var item in Items)
{
var itemValue = item(this);
<a href="@itemValue.Url" class="list-group-item @(itemValue.Active ? "active" : null)">
@itemValue.Text
<span class="pull-right">
@foreach (var metric in itemValue.GetAllMetrics())
{
@Html.InlineMetric(metric)
}
</span>
</a>
}
</div>
}
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Hangfire.Dashboard.Pages
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 2 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
using Hangfire.Dashboard;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class SidebarMenu : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 4 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
if (Items.Any())
{
#line default
#line hidden
WriteLiteral(" <div id=\"stats\" class=\"list-group\">\r\n");
#line 7 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
foreach (var item in Items)
{
var itemValue = item(this);
#line default
#line hidden
WriteLiteral(" <a href=\"");
#line 10 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
Write(itemValue.Url);
#line default
#line hidden
WriteLiteral("\" class=\"list-group-item ");
#line 10 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
Write(itemValue.Active ? "active" : null);
#line default
#line hidden
WriteLiteral("\">\r\n ");
#line 11 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
Write(itemValue.Text);
#line default
#line hidden
WriteLiteral("\r\n <span class=\"pull-right\">\r\n");
#line 13 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
foreach (var metric in itemValue.GetAllMetrics())
{
#line default
#line hidden
#line 15 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
Write(Html.InlineMetric(metric));
#line default
#line hidden
#line 15 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
}
#line default
#line hidden
WriteLiteral(" </span>\r\n </a>\r\n");
#line 19 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
#line 21 "..\..\Dashboard\Pages\_SidebarMenu.cshtml"
}
#line default
#line hidden
}
}
}
#pragma warning restore 1591
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment