2014-04-21 20:36:50 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
2014-05-01 14:40:31 +00:00
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
2014-06-05 19:38:22 +00:00
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=0.7, user-scalable=no">
|
2014-04-21 20:36:50 +00:00
|
|
|
<title>Consul</title>
|
|
|
|
<link rel="stylesheet" href="static/bootstrap.min.css">
|
2014-04-22 18:11:54 +00:00
|
|
|
<link rel="stylesheet" href="static/base.css">
|
2014-07-22 16:42:24 +00:00
|
|
|
<link rel="shortcut icon" href="static/favicon.png">
|
2014-04-21 20:36:50 +00:00
|
|
|
</head>
|
|
|
|
<body>
|
2014-04-23 18:01:42 +00:00
|
|
|
|
|
|
|
<div class="container">
|
|
|
|
<div class="col-md-12">
|
|
|
|
<div id="app">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2014-04-21 20:36:50 +00:00
|
|
|
<script type="text/x-handlebars">
|
|
|
|
{{outlet}}
|
|
|
|
</script>
|
|
|
|
|
2014-05-01 14:24:41 +00:00
|
|
|
<script type="text/x-handlebars" data-template-name="error">
|
2014-04-30 21:31:40 +00:00
|
|
|
<div class="row">
|
2014-05-01 02:47:38 +00:00
|
|
|
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
|
2014-05-01 14:40:31 +00:00
|
|
|
<div class="text-center vertical-center">
|
2014-05-01 14:24:41 +00:00
|
|
|
{{#if controller.model.statusText }}
|
|
|
|
<p class="bold">HTTP error code from Consul: <code>{{controller.model.status}} {{controller.model.statusText}}</code></p>
|
|
|
|
{{/if}}
|
2014-05-01 02:47:38 +00:00
|
|
|
<p>This is an error page for the Consul web UI. You may have visited a URL that is loading an
|
2014-05-01 14:24:41 +00:00
|
|
|
unknown resource, so you can try going back to the <a href="#">root</a>.</p>
|
2014-05-01 02:47:38 +00:00
|
|
|
<p>Otherwise, please report any unexpected
|
2014-05-01 14:24:41 +00:00
|
|
|
issues on the <a href="https://github.com/hashicorp/consul">GitHub page</a>.</p>
|
2014-04-30 21:31:40 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-08-21 21:44:17 +00:00
|
|
|
<script type="text/x-handlebars" data-template-name="dc/unauthorized">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
|
|
|
|
<div class="text-center vertical-center">
|
|
|
|
<p class="bold">Access Denied</p>
|
|
|
|
<p>Your ACL token, <code>foobarbaz</code>, does not
|
|
|
|
have the appropriate permissions to perform the expected action.</p>
|
|
|
|
<p>Learn more in the <a href="http://www.consul.io/docs/internals/acl.html">ACL documentation</a>.</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type="text/x-handlebars" data-template-name="dc/aclsdisabled">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
|
|
|
|
<div class="text-center vertical-center">
|
|
|
|
<p class="bold">ACLs Disabled</p>
|
2014-08-21 23:00:37 +00:00
|
|
|
<p>ACLs are disabled in this Consul cluster. This is the default behavior, as you have to implictly enable them.</p>
|
2014-08-21 21:44:17 +00:00
|
|
|
</p>Learn more in the <a href="http://www.consul.io/docs/internals/acl.html">ACL documentation</a>.</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-05-01 15:56:56 +00:00
|
|
|
<script type="text/x-handlebars" data-template-name="loading">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
|
|
|
|
<div class="text-center vertical-center">
|
|
|
|
<img src="static/loading-cylon-purple.svg" width="384" height="48">
|
|
|
|
<p><small>Loading...</small></p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-06-02 14:35:46 +00:00
|
|
|
<script type="text/x-handlebars" id="actionbar">
|
|
|
|
<div class="row">
|
2014-06-02 15:49:01 +00:00
|
|
|
<div class="action-bar">
|
2014-08-22 19:25:10 +00:00
|
|
|
<div {{ bind-attr class="searchBar:col-md-12:col-md-5" }} >
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="form-group">
|
2014-08-22 19:25:10 +00:00
|
|
|
{{ input type="text" value=filter class="form-control form-control-mini" placeholder=filterText}}
|
2014-06-03 15:32:22 +00:00
|
|
|
</div>
|
2014-06-02 15:49:01 +00:00
|
|
|
</div>
|
2014-08-22 19:25:10 +00:00
|
|
|
{{#if statuses}}
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="col-md-5">
|
|
|
|
<div class="form-group">
|
2014-06-04 19:44:17 +00:00
|
|
|
{{view Ember.Select content=statuses value=status class="form-control form-control-mini"}}
|
2014-06-03 15:32:22 +00:00
|
|
|
</div>
|
2014-06-02 16:40:52 +00:00
|
|
|
</div>
|
2014-08-22 19:25:10 +00:00
|
|
|
{{/if}}
|
|
|
|
{{#if hasExpanded }}
|
2014-06-05 19:38:22 +00:00
|
|
|
<div class="col-md-2 hidden-xs hidden-sm">
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="form-group">
|
2014-06-04 19:56:00 +00:00
|
|
|
<button {{ bind-attr class=":btn :btn-mini :pull-right condensed:btn-default:btn-primary" }} {{action toggleCondensed }}>Expand</button>
|
2014-06-02 15:49:01 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2014-08-22 19:25:10 +00:00
|
|
|
{{/if}}
|
2014-06-02 14:35:46 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-04-25 17:25:12 +00:00
|
|
|
<script type="text/x-handlebars" data-template-name="dc">
|
2014-04-23 18:01:42 +00:00
|
|
|
<div class="row">
|
2014-08-22 23:03:46 +00:00
|
|
|
<div {{ bind-attr class=":col-md-12 :col-sm-12 :col-xs-12 :topbar" }}>
|
2014-04-23 18:01:42 +00:00
|
|
|
|
2014-08-21 23:00:37 +00:00
|
|
|
<div class="col-md-1 col-sm-2 col-xs-8 col-sm-offset-0 col-xs-offset-1">
|
2014-04-23 18:01:42 +00:00
|
|
|
<a href="#"><div class="top-brand"></div></a>
|
|
|
|
</div>
|
2014-08-21 23:00:37 +00:00
|
|
|
<div class="col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1">
|
2014-08-22 19:57:38 +00:00
|
|
|
{{#link-to 'services' class='btn btn-default col-xs-12'}}Services{{/link-to}}
|
2014-04-23 18:01:42 +00:00
|
|
|
</div>
|
2014-04-24 17:47:14 +00:00
|
|
|
|
2014-08-21 23:00:37 +00:00
|
|
|
<div class="col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1">
|
2014-08-22 19:57:38 +00:00
|
|
|
{{#link-to 'nodes' class='btn btn-default col-xs-12'}}Nodes{{/link-to}}
|
2014-04-23 18:01:42 +00:00
|
|
|
</div>
|
2014-04-24 17:47:14 +00:00
|
|
|
|
2014-08-21 23:00:37 +00:00
|
|
|
<div class="col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1">
|
2014-04-28 15:56:07 +00:00
|
|
|
{{#link-to 'kv' class='btn btn-default col-xs-12'}}Key/Value{{/link-to}}
|
2014-04-23 18:01:42 +00:00
|
|
|
</div>
|
|
|
|
|
2014-08-21 23:00:37 +00:00
|
|
|
<div class="col-md-2 col-sm-2 col-xs-8 col-md-offset-0 col-sm-offset-2 col-xs-offset-1">
|
|
|
|
{{#link-to 'acls' class='btn btn-default col-xs-12'}}ACL{{/link-to}}
|
|
|
|
</div>
|
|
|
|
|
2014-08-22 19:57:38 +00:00
|
|
|
<div class="col-md-2 col-sm-2 col-xs-6 col-sm-offset-0 col-xs-offset-1">
|
2014-08-22 19:25:10 +00:00
|
|
|
<a {{bind-attr class=":col-xs-12 :btn isDropDownVisible:btn-primary:btn-default"}} {{action "toggle"}}> <span class="elip-overflow">{{model}} <span class="caret"></span></span> </a>
|
2014-04-25 20:24:36 +00:00
|
|
|
|
|
|
|
{{#if isDropdownVisible}}
|
2014-05-01 14:40:31 +00:00
|
|
|
<ul class="dropdown-menu col-xs-8" style="display:block;">
|
2014-04-25 20:24:36 +00:00
|
|
|
{{#each dc in dcs}}
|
2014-05-01 16:21:32 +00:00
|
|
|
<li {{action "hideDrop"}}>{{#link-to 'services' dc}}{{dc}}{{/link-to}}</li>
|
2014-04-25 20:24:36 +00:00
|
|
|
{{/each}}
|
|
|
|
</ul>
|
|
|
|
{{/if}}
|
|
|
|
|
2014-04-23 18:01:42 +00:00
|
|
|
</div>
|
2014-08-22 19:57:38 +00:00
|
|
|
|
|
|
|
<div class="col-md-1 col-sm-2 col-xs-8 col-md-offset-0 col-sm-offset-2 col-xs-offset-1">
|
2014-08-22 23:03:46 +00:00
|
|
|
{{#link-to 'settings' class='btn btn-default col-xs-6 icon'}}<span class="wrap">⚙</span>{{/link-to}}
|
2014-08-22 19:57:38 +00:00
|
|
|
</div>
|
2014-04-23 18:01:42 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2014-04-25 17:25:12 +00:00
|
|
|
{{outlet}}
|
2014-04-23 18:01:42 +00:00
|
|
|
</script>
|
|
|
|
|
2014-04-29 17:06:26 +00:00
|
|
|
<script type="text/x-handlebars" data-template-name="kv/show">
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="row">
|
2014-06-04 20:57:37 +00:00
|
|
|
<div class="col-md-6 col-lg-5 padded-right-middle">
|
2014-06-03 15:32:22 +00:00
|
|
|
<h4 class="breadcrumbs"><a href="" {{action 'linkToKey' grandParentKey }}>{{parentKey}}</a> <a href="" {{action 'linkToKey' parentKey }}>+</a></h4>
|
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-28 22:23:01 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="row">
|
2014-06-04 20:57:37 +00:00
|
|
|
<div class="col-md-6 col-lg-5 padded-right-middle">
|
2014-04-29 20:32:38 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
{{#each item in model }}
|
|
|
|
{{#link-to item.linkToRoute item.Key tagName="div" href=false class="list-group-item list-condensed-link" }}
|
|
|
|
<div {{bind-attr class="item.isFolder:bg-gray:bg-light-gray :list-bar-horizontal"}}></div>
|
|
|
|
<div class="name">
|
2014-04-30 19:02:31 +00:00
|
|
|
{{item.keyWithoutParent}}
|
2014-06-03 15:32:22 +00:00
|
|
|
</div>
|
|
|
|
{{/link-to}}
|
2014-04-29 17:06:26 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
{{/each}}
|
2014-04-28 22:23:01 +00:00
|
|
|
</div>
|
|
|
|
|
2014-04-30 14:49:07 +00:00
|
|
|
<div class="border-left hidden-xs hidden-sm">
|
|
|
|
</div>
|
2014-04-30 14:09:41 +00:00
|
|
|
|
2014-06-05 19:44:36 +00:00
|
|
|
<div class="visible-xs visible-sm">
|
|
|
|
<hr>
|
|
|
|
</div>
|
|
|
|
|
2014-06-04 20:08:34 +00:00
|
|
|
<div class="col-md-6 col-lg-7 border-left">
|
2014-06-05 19:44:36 +00:00
|
|
|
<div class="padded-border">
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="panel">
|
|
|
|
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-light-gray" }}></div>
|
|
|
|
<div class="panel-heading">
|
2014-06-06 16:21:36 +00:00
|
|
|
<h4 class="panel-title">
|
2014-06-03 15:32:22 +00:00
|
|
|
Create Key
|
2014-06-06 19:14:33 +00:00
|
|
|
</h4>
|
2014-06-03 15:32:22 +00:00
|
|
|
</div>
|
2014-04-30 14:09:41 +00:00
|
|
|
|
2014-06-04 20:57:37 +00:00
|
|
|
<div class="panel-body panel-form">
|
2014-06-03 15:32:22 +00:00
|
|
|
<form class="form">
|
2014-05-05 13:51:42 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="form-group">
|
|
|
|
<p>{{errorMessage}}</p>
|
|
|
|
</div>
|
2014-05-05 13:51:42 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div {{ bind-attr class=":form-group newKey.keyValid:valid" }}>
|
|
|
|
<div class="input-group">
|
|
|
|
<span class="input-group-addon">{{parentKey}}</span>
|
|
|
|
{{ input value=newKey.Key class="form-control" required=true }}
|
|
|
|
</div>
|
|
|
|
<span class="help-block">To create a folder, end the key with <code>/</code></span>
|
2014-04-30 15:43:04 +00:00
|
|
|
</div>
|
2014-04-30 14:10:46 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
{{#if newKey.isFolder }}
|
|
|
|
<p>No value needed for nested keys.</p>
|
|
|
|
{{else}}
|
|
|
|
<div class="form-group">
|
|
|
|
{{ textarea value=newKey.Value class="form-control"}}
|
|
|
|
<span class="help-block">Value can be any format and length</span>
|
|
|
|
</div>
|
|
|
|
{{/if}}
|
2014-04-30 14:10:46 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<button {{ action "createKey"}} {{bind-attr disabled=newKey.isInvalid }} {{ bind-attr class=":btn newKey.isValid:btn-success:btn-default" }}>Create</button>
|
|
|
|
<button {{ action "deleteFolder"}} {{ bind-attr class=":btn :pull-right isLoading:btn-warning:btn-danger isRoot:hidden" }}>Delete folder</button>
|
|
|
|
</form>
|
|
|
|
</div>
|
2014-04-30 15:43:04 +00:00
|
|
|
</div>
|
2014-06-03 15:32:22 +00:00
|
|
|
</div>
|
2014-04-30 15:43:04 +00:00
|
|
|
</div>
|
2014-04-29 17:06:26 +00:00
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type="text/x-handlebars" data-template-name="kv/edit">
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="row">
|
2014-06-04 20:57:37 +00:00
|
|
|
<div class="col-md-6 col-lg-5 padded-right-middle">
|
2014-05-16 20:38:45 +00:00
|
|
|
<h4 class="breadcrumbs"><a href="" {{action 'linkToKey' grandParentKey }}>{{parentKey}}</a> <a href="" {{action 'linkToKey' parentKey }}>+</a></h4>
|
2014-05-01 02:16:12 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-29 17:06:26 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="row">
|
2014-06-04 20:57:37 +00:00
|
|
|
<div class="col-md-6 col-lg-5 padded-right-middle">
|
2014-04-29 17:34:13 +00:00
|
|
|
{{#each item in siblings }}
|
2014-06-03 15:32:22 +00:00
|
|
|
{{#link-to item.linkToRoute item.Key tagName="div" href=false class="list-group-item list-condensed-link" }}
|
|
|
|
<div {{bind-attr class="item.isFolder:bg-gray:bg-light-gray :list-bar-horizontal"}}></div>
|
|
|
|
<div class="name">
|
|
|
|
{{item.keyWithoutParent}}
|
2014-04-29 17:34:13 +00:00
|
|
|
</div>
|
2014-04-29 20:32:38 +00:00
|
|
|
{{/link-to}}
|
2014-04-29 17:34:13 +00:00
|
|
|
{{/each}}
|
2014-04-30 14:49:07 +00:00
|
|
|
</div>
|
2014-04-29 17:34:13 +00:00
|
|
|
|
2014-06-06 18:26:30 +00:00
|
|
|
<div class="border-left hidden-xs hidden-sm">
|
|
|
|
</div>
|
2014-04-29 19:24:32 +00:00
|
|
|
|
2014-06-06 18:26:30 +00:00
|
|
|
<div class="visible-xs visible-sm">
|
|
|
|
<hr>
|
|
|
|
</div>
|
2014-06-05 19:44:36 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="col-md-6 col-lg-7 border-left">
|
2014-06-05 19:44:36 +00:00
|
|
|
<div class="padded-border">
|
2014-06-06 18:26:30 +00:00
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="panel">
|
2014-06-06 16:21:36 +00:00
|
|
|
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-green isLocked:bg-light-gray" }}></div>
|
2014-06-06 18:26:30 +00:00
|
|
|
<div class="panel-heading">
|
|
|
|
<h4 {{bind-attr class=":panel-title isLocked:locked"}}>
|
|
|
|
{{model.Key}}
|
|
|
|
{{#if model.isLocked}}
|
|
|
|
<small class="pull-right">
|
|
|
|
KEY LOCKED
|
|
|
|
</small>
|
|
|
|
{{/if}}
|
|
|
|
</h4>
|
|
|
|
</div>
|
2014-06-03 15:32:22 +00:00
|
|
|
|
2014-06-06 18:26:30 +00:00
|
|
|
<div class="panel-body panel-form">
|
|
|
|
<div class="form-group">
|
|
|
|
{{errorMessage}}
|
|
|
|
</div>
|
|
|
|
<form class="form">
|
2014-04-30 15:43:04 +00:00
|
|
|
<div class="form-group">
|
2014-06-06 18:26:30 +00:00
|
|
|
{{ textarea value=model.valueDecoded class="form-control" disabled=model.isLocked}}
|
2014-04-30 15:43:04 +00:00
|
|
|
</div>
|
2014-06-06 18:26:30 +00:00
|
|
|
<button {{action "updateKey"}} {{bind-attr disabled=isLoading}} {{bind-attr class=":btn isLoading:btn-warning:btn-success"}} {{bind-attr disabled=isLocked}}>Update</button>
|
|
|
|
<button {{action "cancelEdit"}} {{bind-attr disabled=isLoading}} {{bind-attr class=":btn isLoading:btn-warning:btn-default"}}>Cancel</button>
|
|
|
|
<button {{action "deleteKey"}} {{bind-attr disabled=isLoading}} {{bind-attr class=":btn :pull-right isLoading:btn-warning:btn-danger"}} {{bind-attr disabled=isLocked}}>Delete key</button>
|
|
|
|
</form>
|
2014-04-30 15:43:04 +00:00
|
|
|
</div>
|
2014-06-06 18:26:30 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
{{#if model.isLocked}}
|
|
|
|
<h5>Lock Session</h5>
|
|
|
|
|
|
|
|
{{#link-to 'nodes.show' model.session.Node tagName="div" href=false class="list-group-item list-condensed-link" }}
|
|
|
|
<div class="bg-light-gray list-bar-horizontal"></div>
|
|
|
|
<div class="name">
|
2014-06-19 20:59:57 +00:00
|
|
|
{{ sessionName session }}
|
2014-06-06 18:26:30 +00:00
|
|
|
<small class="pull-right">
|
2014-06-19 20:59:57 +00:00
|
|
|
{{session.Node}}
|
2014-06-06 18:26:30 +00:00
|
|
|
</small>
|
|
|
|
</div>
|
|
|
|
{{/link-to}}
|
|
|
|
{{/if}}
|
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
</div>
|
2014-04-30 15:43:04 +00:00
|
|
|
</div>
|
2014-06-06 18:26:30 +00:00
|
|
|
|
2014-04-28 22:23:01 +00:00
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-05-01 16:00:29 +00:00
|
|
|
<script type="text/x-handlebars" data-template-name="item/loading">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
|
|
|
|
<div class="text-center vertical-center">
|
|
|
|
<img src="static/loading-cylon-purple.svg" width="384" height="48">
|
|
|
|
<p><small>Loading...</small></p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-04-23 18:01:42 +00:00
|
|
|
<script type="text/x-handlebars" id="services">
|
2014-06-02 14:35:46 +00:00
|
|
|
<div class="row">
|
2014-06-05 17:24:03 +00:00
|
|
|
<div {{ bind-attr class=":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" }}>
|
2014-06-02 14:35:46 +00:00
|
|
|
{{view App.ActionBarView }}
|
2014-05-01 03:39:41 +00:00
|
|
|
|
2014-06-02 16:40:52 +00:00
|
|
|
{{#if filteredContent}}
|
2014-04-24 17:47:14 +00:00
|
|
|
|
2014-06-04 19:56:00 +00:00
|
|
|
{{#if condensed }}
|
2014-04-23 18:01:42 +00:00
|
|
|
|
2014-06-04 19:44:17 +00:00
|
|
|
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
|
|
|
|
{{#link-to 'services.show' Name tagName="div" href=false class="list-group-item list-condensed-link" }}
|
|
|
|
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar-horizontal"}}></div>
|
|
|
|
<div class="name">
|
|
|
|
{{Name}}
|
|
|
|
<small class="pull-right">
|
|
|
|
{{ checkMessage }}
|
|
|
|
</small>
|
|
|
|
</div>
|
|
|
|
{{/link-to}}
|
|
|
|
{{/collection}}
|
2014-06-02 16:40:52 +00:00
|
|
|
|
|
|
|
{{else}}
|
|
|
|
|
2014-06-04 20:22:25 +00:00
|
|
|
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
|
2014-06-04 19:44:17 +00:00
|
|
|
{{#link-to 'services.show' Name tagName="div" href=false class="list-group-item list-link" }}
|
|
|
|
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar"}}></div>
|
|
|
|
<h4 class="list-group-item-heading">
|
|
|
|
{{#link-to 'services.show' Name class='subtle'}}{{Name}}{{/link-to}}
|
|
|
|
<div class="heading-helper">
|
|
|
|
<a class="subtle" href="#">{{checkMessage}}</a>
|
|
|
|
</div>
|
|
|
|
</h4>
|
|
|
|
<ul class="list-inline">
|
|
|
|
{{#each node in nodes }}
|
|
|
|
<li class="bold">{{node}}</li>
|
|
|
|
{{/each}}
|
|
|
|
</ul>
|
|
|
|
{{/link-to}}
|
|
|
|
{{/collection}}
|
2014-06-02 16:40:52 +00:00
|
|
|
|
|
|
|
{{/if}}
|
2014-06-02 14:35:46 +00:00
|
|
|
|
2014-06-02 16:40:52 +00:00
|
|
|
{{else}}
|
2014-06-03 15:32:22 +00:00
|
|
|
<p class="light">There are no services to show.</p>
|
2014-06-02 16:40:52 +00:00
|
|
|
{{/if}}
|
2014-04-23 18:01:42 +00:00
|
|
|
|
2014-04-30 14:49:07 +00:00
|
|
|
</div>
|
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="border-left hidden-xs hidden-sm">
|
2014-06-02 14:35:46 +00:00
|
|
|
</div>
|
2014-05-01 03:39:41 +00:00
|
|
|
|
2014-06-05 18:28:40 +00:00
|
|
|
<div class="visible-xs visible-sm">
|
|
|
|
<hr>
|
|
|
|
</div>
|
|
|
|
|
2014-06-06 19:11:26 +00:00
|
|
|
<div class="col-md-6 col-lg-7 border-left scrollable">
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="row padded-border">
|
2014-06-02 14:35:46 +00:00
|
|
|
{{outlet}}
|
|
|
|
</div>
|
2014-04-25 17:25:12 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type="text/x-handlebars" id="service">
|
2014-06-05 17:24:03 +00:00
|
|
|
<div class="col-xs-12 col-sm-12 visible-xs visible-sm">
|
|
|
|
{{#link-to "services" class="btn btn-default btn-block" }}Back to all services{{/link-to}}
|
|
|
|
<hr>
|
|
|
|
</div>
|
|
|
|
|
2014-06-03 17:53:22 +00:00
|
|
|
<h3 class="no-margin">{{ model.0.Service.Service }}</h3>
|
2014-04-25 17:32:41 +00:00
|
|
|
<hr>
|
|
|
|
|
2014-06-11 20:54:03 +00:00
|
|
|
<h5>Tags</h5>
|
2014-06-11 21:14:20 +00:00
|
|
|
{{#if tags}}
|
|
|
|
<p>{{tags}}</p>
|
|
|
|
{{else}}
|
|
|
|
<p>No tags</p>
|
|
|
|
{{/if}}
|
|
|
|
|
2014-04-25 17:32:41 +00:00
|
|
|
<h5>Nodes</h5>
|
|
|
|
|
|
|
|
{{#each node in model }}
|
|
|
|
|
2014-06-05 18:28:40 +00:00
|
|
|
{{#link-to 'nodes.show' node.Node.Node tagName="div" href=false class="panel panel-link panel-list" }}
|
|
|
|
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :panel-bar-horizontal"}}></div>
|
|
|
|
|
2014-04-25 17:32:41 +00:00
|
|
|
<div class="panel-heading">
|
|
|
|
<h3 class="panel-title">
|
2014-04-30 18:02:20 +00:00
|
|
|
{{node.Node.Node}}
|
|
|
|
<small>{{node.Node.Address}}</small>
|
2014-04-25 17:32:41 +00:00
|
|
|
<span class="panel-note">{{node.checkMessage}}</span>
|
|
|
|
</h3>
|
|
|
|
</div>
|
2014-04-24 17:47:14 +00:00
|
|
|
|
2014-06-05 18:28:40 +00:00
|
|
|
<ul class="list-unstyled">
|
|
|
|
{{#each check in node.Checks }}
|
|
|
|
<li class="list-group-item list-condensed-link">
|
|
|
|
{{listBar check.Status}}
|
|
|
|
<div class="name">
|
|
|
|
{{check.Name}}
|
|
|
|
<small>{{ check.CheckID }}</small>
|
|
|
|
<small class="pull-right">
|
|
|
|
{{check.Status}}
|
|
|
|
</small>
|
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
{{/each}}
|
|
|
|
</ul>
|
|
|
|
|
2014-04-25 17:52:52 +00:00
|
|
|
{{/link-to}}
|
2014-04-24 17:47:14 +00:00
|
|
|
|
2014-04-25 17:32:41 +00:00
|
|
|
{{/each}}
|
2014-04-23 18:01:42 +00:00
|
|
|
</script>
|
|
|
|
|
2014-04-24 19:18:11 +00:00
|
|
|
<script type="text/x-handlebars" id="nodes">
|
2014-06-02 14:35:46 +00:00
|
|
|
<div class="row">
|
2014-06-05 17:24:03 +00:00
|
|
|
<div {{ bind-attr class=":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" }}>
|
2014-06-02 14:35:46 +00:00
|
|
|
{{view App.ActionBarView }}
|
2014-04-24 19:18:11 +00:00
|
|
|
|
2014-06-02 16:40:52 +00:00
|
|
|
{{#if filteredContent}}
|
2014-05-30 18:26:11 +00:00
|
|
|
|
2014-06-04 19:56:00 +00:00
|
|
|
{{#if condensed }}
|
2014-06-04 19:44:17 +00:00
|
|
|
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
|
|
|
|
{{#link-to 'nodes.show' Node tagName="div" href=false class="list-group-item list-condensed-link" }}
|
|
|
|
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar-horizontal"}}></div>
|
|
|
|
<div class="name">
|
|
|
|
{{Node}}
|
|
|
|
<small class="pull-right">
|
|
|
|
{{ numServices }} services
|
|
|
|
</small>
|
|
|
|
</div>
|
|
|
|
{{/link-to}}
|
|
|
|
{{/collection}}
|
|
|
|
|
|
|
|
{{else}}
|
|
|
|
|
|
|
|
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
|
|
|
|
{{#link-to 'nodes.show' Node tagName="div" href=false class="list-group-item list-link" }}
|
|
|
|
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar"}}></div>
|
|
|
|
<h4 class="list-group-item-heading">
|
|
|
|
{{Node}}
|
|
|
|
<small>{{Address}}</small>
|
|
|
|
<div class="heading-helper">
|
|
|
|
<a class="subtle" href="#">{{checkMessage}}</a>
|
|
|
|
</div>
|
|
|
|
</h4>
|
|
|
|
<ul class="list-inline">
|
|
|
|
{{#each service in services}}
|
|
|
|
<li class="bold">{{service.Service}}</li>
|
|
|
|
{{/each}}
|
|
|
|
</ul>
|
|
|
|
{{/link-to}}
|
|
|
|
{{/collection}}
|
|
|
|
|
|
|
|
{{/if}}
|
2014-06-02 16:40:52 +00:00
|
|
|
|
|
|
|
{{else}}
|
2014-06-03 15:32:22 +00:00
|
|
|
<p class="light">There are no nodes to show.</p>
|
2014-06-02 16:40:52 +00:00
|
|
|
{{/if}}
|
2014-04-30 14:49:07 +00:00
|
|
|
</div>
|
|
|
|
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="border-left hidden-xs hidden-sm">
|
2014-06-02 14:35:46 +00:00
|
|
|
</div>
|
2014-05-01 03:39:41 +00:00
|
|
|
|
2014-06-06 19:11:26 +00:00
|
|
|
<div class="col-md-6 col-lg-7 border-left scrollable">
|
2014-06-03 15:32:22 +00:00
|
|
|
<div class="row padded-border">
|
2014-06-02 14:35:46 +00:00
|
|
|
{{outlet}}
|
|
|
|
</div>
|
2014-04-24 19:18:11 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-04-25 17:32:41 +00:00
|
|
|
<script type="text/x-handlebars" id="node">
|
2014-06-05 17:24:03 +00:00
|
|
|
<div class="col-xs-12 col-sm-12 visible-xs visible-sm">
|
2014-08-21 21:44:17 +00:00
|
|
|
{{#link-to "nodes" class="btn btn-default btn-block" }}Back to all nodes{{/link-to}}
|
|
|
|
<hr>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3 class="no-margin">{{ model.Node }} <small> {{ model.Address }}</small></h3>
|
|
|
|
<hr>
|
|
|
|
|
|
|
|
<h5>Services</h5>
|
|
|
|
|
|
|
|
{{#each service in model.Services }}
|
|
|
|
{{#link-to 'services.show' service.Service tagName="div" href=false class="list-group-item list-condensed-link double-line" }}
|
|
|
|
<div class="list-bar-horizontal bg-light-gray"></div>
|
|
|
|
<div class="name">
|
|
|
|
{{service.Service}}
|
|
|
|
<small class="pull-right">
|
|
|
|
:{{service.Port}}
|
|
|
|
</small>
|
|
|
|
</div>
|
|
|
|
<ul class="list-inline sub">
|
|
|
|
{{#each tag in service.Tags}}
|
|
|
|
<li>{{tag}}</li>
|
|
|
|
{{/each}}
|
|
|
|
{{serviceTagMessage service.Tags}}
|
|
|
|
</ul>
|
|
|
|
{{/link-to}}
|
|
|
|
|
|
|
|
{{/each}}
|
|
|
|
|
|
|
|
<h5>Checks</h5>
|
|
|
|
|
|
|
|
{{#each check in model.Checks }}
|
|
|
|
|
|
|
|
<div class="panel">
|
|
|
|
{{ panelBar check.Status }}
|
|
|
|
<div class="panel-heading">
|
|
|
|
<h3 class="panel-title">
|
|
|
|
{{check.Name}}
|
|
|
|
<small>{{check.CheckID}}</small>
|
|
|
|
<span class="panel-note">{{check.Status}}</span>
|
|
|
|
</h3>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="panel-body">
|
|
|
|
<h5>Notes</h5>
|
|
|
|
<p>{{ check.Notes }}</p>
|
|
|
|
<h5>Output</h5>
|
|
|
|
<pre>{{check.Output}}</pre>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
{{/each}}
|
|
|
|
|
|
|
|
<h5>Lock Sessions</h5>
|
|
|
|
|
|
|
|
{{#if sessions }}
|
|
|
|
{{errorMessage}}
|
|
|
|
|
|
|
|
{{#each session in sessions }}
|
|
|
|
<div class="list-group-item list-condensed double-line">
|
|
|
|
<div class="bg-light-gray list-bar-horizontal"></div>
|
|
|
|
<div class="name">
|
|
|
|
{{ sessionName session }}
|
|
|
|
<button {{ action "invalidateSession" session.ID }} {{ bind-attr class=":btn :btn-danger :pull-right :btn-list isLoading:btn-warning" }}>Invalidate</button>
|
|
|
|
</div>
|
|
|
|
<ul class="list-inline sub">
|
|
|
|
{{#each check in session.Checks}}
|
|
|
|
<li class="bold">{{check}}</li>
|
|
|
|
{{/each}}
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
{{/each}}
|
|
|
|
|
|
|
|
{{else}}
|
|
|
|
<p class="light small">No sessions</p>
|
|
|
|
{{/if}}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type="text/x-handlebars" id="acls">
|
|
|
|
<div class="row">
|
|
|
|
<div {{ bind-attr class=":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" }}>
|
|
|
|
{{view App.ActionBarView }}
|
|
|
|
|
|
|
|
{{#if filteredContent}}
|
2014-08-22 19:25:10 +00:00
|
|
|
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
|
|
|
|
{{#link-to 'acls.show' ID tagName="div" href=false class="list-group-item list-condensed-link" }}
|
|
|
|
<div class="bg-light-gray list-bar-horizontal"></div>
|
|
|
|
<div class="name">
|
|
|
|
{{ aclName Name ID }}
|
|
|
|
</div>
|
|
|
|
{{/link-to}}
|
|
|
|
{{/collection}}
|
2014-08-21 21:44:17 +00:00
|
|
|
{{else}}
|
2014-08-22 19:25:10 +00:00
|
|
|
<p class="light">There are no ACLs to show.</p>
|
2014-08-21 21:44:17 +00:00
|
|
|
{{/if}}
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="border-left hidden-xs hidden-sm">
|
|
|
|
</div>
|
|
|
|
|
2014-08-22 23:46:32 +00:00
|
|
|
{{#if isShowingItem}}
|
2014-08-21 21:44:17 +00:00
|
|
|
<div class="col-md-6 col-lg-7 border-left scrollable">
|
|
|
|
<div class="row padded-border">
|
|
|
|
{{outlet}}
|
|
|
|
</div>
|
|
|
|
</div>
|
2014-08-22 23:46:32 +00:00
|
|
|
{{else}}
|
|
|
|
<div class="col-md-6 col-lg-7 border-left">
|
|
|
|
<div class="row padded-border">
|
|
|
|
<div class="panel">
|
|
|
|
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-light-gray" }}></div>
|
|
|
|
<div class="panel-heading">
|
|
|
|
<h4 class="panel-title">
|
|
|
|
Create ACL
|
|
|
|
</h4>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="panel-body panel-form">
|
|
|
|
<div class="form-group"></div>
|
|
|
|
|
|
|
|
<form class="form">
|
|
|
|
<div class="form-group">
|
|
|
|
{{ input value=newAcl.Name class="form-control" }}
|
|
|
|
<span class="help-block">Set the optional name for the ACL.</span>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
{{view Ember.Select content=types value=newAcl.Type class="form-control form-control-mini"}}
|
|
|
|
<span class="help-block">The type of ACL this is.</span>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
<label>Rules</label>
|
|
|
|
{{ textarea value=newAcl.Rules class="form-control" }}
|
|
|
|
<span class="help-block">For more information on rules, visit the <a href="http://www.consul.io/docs/internals/acl.html">ACL documentation.</a></span>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<button {{ action "createAcl"}} {{ bind-attr class=":btn :btn-success" }}>Create</button>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{{/if}}
|
2014-08-21 21:44:17 +00:00
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type="text/x-handlebars" id="acl">
|
|
|
|
<div class="col-xs-12 col-sm-12 visible-xs visible-sm">
|
2014-08-22 19:25:10 +00:00
|
|
|
{{#link-to "acls" class="btn btn-default btn-block" }}Back to all ACLs{{/link-to}}
|
2014-06-05 17:24:03 +00:00
|
|
|
<hr>
|
|
|
|
</div>
|
|
|
|
|
2014-08-22 23:46:32 +00:00
|
|
|
<div class="panel">
|
|
|
|
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-light-gray" }}></div>
|
|
|
|
<div class="panel-heading">
|
|
|
|
<h4 class="panel-title">
|
|
|
|
{{ aclName "Update ACL" model.ID }}
|
|
|
|
</h4>
|
|
|
|
</div>
|
2014-04-25 17:32:41 +00:00
|
|
|
|
2014-08-22 23:46:32 +00:00
|
|
|
<div class="panel-body panel-form">
|
|
|
|
<div class="form-group"></div>
|
2014-06-06 19:11:26 +00:00
|
|
|
|
2014-08-22 23:46:32 +00:00
|
|
|
<form class="form">
|
|
|
|
<div class="form-group">
|
|
|
|
{{ input value=model.Name class="form-control" }}
|
|
|
|
<span class="help-block">Set the optional name for the ACL.</span>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
{{view Ember.Select content=types value=model.Type class="form-control form-control-mini"}}
|
|
|
|
<span class="help-block">The type of ACL this is.</span>
|
|
|
|
</div>
|
2014-08-22 19:25:10 +00:00
|
|
|
|
2014-08-22 23:46:32 +00:00
|
|
|
<div class="form-group">
|
|
|
|
<label>Rules</label>
|
|
|
|
{{ textarea value=model.Rules class="form-control" }}
|
|
|
|
<span class="help-block">For more information on rules, visit the <a href="http://www.consul.io/docs/internals/acl.html">ACL documentation.</a></span>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<button {{ action "updateAcl"}} {{ bind-attr class=":btn :btn-success" }}>Update</button>
|
|
|
|
<button {{ action "clone" }} {{ bind-attr class=":btn :btn-default" }}>Clone</button>
|
|
|
|
<button {{ action "set" }} {{ bind-attr class=":btn :btn-default" }}>Use Token</button>
|
|
|
|
{{# if model.isNotAnon }}
|
|
|
|
<button {{ action "delete"}} {{ bind-attr class=":btn isLoading:btn-warning:btn-danger :pull-right" }}>Delete</button>
|
|
|
|
{{/if}}
|
|
|
|
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<hr>
|
2014-04-25 17:32:41 +00:00
|
|
|
</script>
|
|
|
|
|
2014-04-21 20:36:50 +00:00
|
|
|
<script type="text/x-handlebars" id="index">
|
2014-05-01 14:40:31 +00:00
|
|
|
<div class="col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 col-xs-12 col-sm-12 vertical-center">
|
2014-05-01 16:48:29 +00:00
|
|
|
<h5>Select a datacenter</h5>
|
2014-04-23 18:01:42 +00:00
|
|
|
{{#each item in model}}
|
2014-04-25 20:24:36 +00:00
|
|
|
{{#link-to 'services' item }}
|
|
|
|
<div class="panel panel-link panel-short">
|
2014-05-01 16:48:29 +00:00
|
|
|
<div class="panel-bar bg-light-gray"></div>
|
2014-04-23 18:01:42 +00:00
|
|
|
<div class="panel-heading">
|
|
|
|
<h3 class="panel-title">
|
|
|
|
{{item}}
|
2014-05-01 16:48:29 +00:00
|
|
|
<span class="panel-note"></span>
|
2014-04-23 18:01:42 +00:00
|
|
|
</h3>
|
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-25 17:35:21 +00:00
|
|
|
{{/link-to}}
|
2014-04-23 18:01:42 +00:00
|
|
|
{{/each}}
|
|
|
|
</div>
|
2014-04-21 20:36:50 +00:00
|
|
|
</script>
|
|
|
|
|
2014-08-22 23:03:46 +00:00
|
|
|
<script type="text/x-handlebars" id="settings">
|
|
|
|
<div class="col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 col-xs-12 col-sm-12">
|
|
|
|
<h3>Settings</h3>
|
|
|
|
<p>These settings allow you to configure your browser for the Consul Web UI. Everything is saved to localstorage,
|
|
|
|
and should persist through visits and browser usage.</p>
|
|
|
|
<p>Settings are automatically persisted upon modification, so no manual save is required.</p>
|
|
|
|
<h5>Access Token</h5>
|
|
|
|
<div class="form-group">
|
|
|
|
{{ input type="text" value=model.token class="form-control form-mono" placeholder="token"}}
|
|
|
|
<span class="help-block">The token is sent with requests as the <code>?token</code> parameter. This is used to control the ACL for the
|
|
|
|
web UI.</span>
|
|
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
|
|
<button {{ action "reset" }} {{ bind-attr class=":btn :btn-danger" }}>Reset Defaults</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
2014-06-04 19:56:00 +00:00
|
|
|
<script>
|
|
|
|
// Enable query params, must be loaded before ember is
|
|
|
|
EmberENV = {FEATURES: {'query-params-new': true}};
|
|
|
|
</script>
|
|
|
|
|
2014-05-01 15:31:56 +00:00
|
|
|
<!-- ASSETS -->
|
2014-05-04 10:29:22 +00:00
|
|
|
<script src="javascripts/libs/jquery-1.10.2.min.js"></script>
|
2014-06-04 20:03:55 +00:00
|
|
|
<script src="javascripts/libs/handlebars-1.3.0.min.js"></script>
|
2014-06-04 19:56:00 +00:00
|
|
|
<script src="javascripts/libs/ember-debug.min.js"></script>
|
2014-05-04 10:29:22 +00:00
|
|
|
<script src="javascripts/libs/ember-validations.min.js"></script>
|
2014-06-04 19:39:09 +00:00
|
|
|
<script src="javascripts/libs/list-view.min.js"></script>
|
2014-08-22 23:03:46 +00:00
|
|
|
<script src="javascripts/libs/classie.js"></script>
|
|
|
|
<script src="javascripts/libs/notificationFx.js"></script>
|
2014-04-23 18:01:42 +00:00
|
|
|
<script src="javascripts/fixtures.js"></script>
|
2014-04-25 17:49:36 +00:00
|
|
|
<script src="javascripts/app/router.js"></script>
|
|
|
|
<script src="javascripts/app/routes.js"></script>
|
|
|
|
<script src="javascripts/app/models.js"></script>
|
|
|
|
<script src="javascripts/app/views.js"></script>
|
|
|
|
<script src="javascripts/app/controllers.js"></script>
|
2014-05-01 17:15:33 +00:00
|
|
|
<script src="javascripts/app/helpers.js"></script>
|
2014-04-21 20:36:50 +00:00
|
|
|
<!-- to activate the test runner, add the "?test" query string parameter -->
|
|
|
|
<script src="tests/runner.js"></script>
|
2014-05-01 15:32:40 +00:00
|
|
|
<!-- <script src="static/application.min.js"></script> -->
|
2014-05-01 15:31:56 +00:00
|
|
|
<!-- /ASSETS -->
|
|
|
|
|
2014-04-21 20:36:50 +00:00
|
|
|
</body>
|
|
|
|
</html>
|