#
#
# Portal
- (r'^testbeds/?$', portal.testbedlist.TestbedList.as_view()),
+ (r'^testbeds/(?P<slicename>[^/]+)/?$', portal.testbedlist.TestbedList.as_view()),
+ (r'^resources/(?P<slicename>[^/]+)/?$', portal.sliceview.SliceView.as_view()),
(r'^slice/(?P<slicename>[^/]+)/?$', portal.sliceview.SliceView.as_view()),
url(r'^portal/', include('portal.urls')),
]
template_name = "slice-view.html"
def get(self, request, slicename):
- return render_to_response(self.template, {"slice": slicename, "theme": self.theme, "username": request.user}, context_instance=RequestContext(request))
+ return render_to_response(self.template, {"slice": slicename, "theme": self.theme, "username": request.user, "section":"resources"}, context_instance=RequestContext(request))
}
/* HEADER */
div#header {
- height:100px;
+ height:85px;
background-color:white;
}
.btn.btn-default:hover {
font-weight: bold;
}
-
-
+/**/
+/* TABLE */
+table.table {
+ margin:0;
+}
+table.table thead {
+ padding:0;
+}
+table.table tbody {
+ padding:0;
+}
+table.table tr {
+ padding:0;
+}
+table.table td {
+ padding:0;
+}
/* INSTITUTION */
div#institution {
color:black;
font-style:italic;
}
+/* SLICE VIEW sections */
+.slice-sections, .slice-pending {
+ margin:0;
+ padding:0;
+}
+.slice-sections ul, .slice-pending ul {
+ margin:0;
+ padding:0;
+}
+.slice-pending ul {
+ width:400px;
+ margin:0 auto 15px auto;
+}
+.slice-sections li {
+ text-align:left;
+ margin:0;
+ padding:0;
+}
+.slice-pending li {
+ padding-right:15px;
+}
+.slice-sections li a, .slice-pending li a {
+ font-size:14px;
+ color:black;
+ padding:0;
+ margin-top:10px;
+}
+.slice-sections li.active a, .slice-pending li.active a {
+ color:#201E62;
+ background-color:#EFEFEF;
+ text-decoration:underline;
+ padding:0;
+}
+.slice-sections ul.nav-pills li a:hover, .slice-pending ul.nav-pills li a:hover {
+ text-decoration:underline;
+ background-color:#EFEFEF;
+ color:black;
+}
+.slice-sections ul.nav-pills li.active, .slice-pending ul.nav-pills li.active {
+
+}
+.slice-sections li:first-child, .slice-sections li:first-child a {
+ color:#201E62;
+ font-weight:bold;
+}
+.slice-experiment {
+ text-align:right;
+ padding:0;
+}
+.slice-experiment button {
+ margin:3px 0 0 0;
+ background-color:#CC4125;
+ color:white;
+}
+
+.slice-pending {
+}
+.slice-pending button {
+ font-size:9pt;
+ margin:8px 0 0 0;
+ padding:3px 5px;
+}
+.slice-pending button.apply {
+}
+.slice-pending button.clear {
+}
+
+/* */
+
/* TESTBED LIST */
div#testbed-list {
margin:25px auto;
});
- oTable.load("/list/resource", {}, function(data) {
+ oTable.load("/table/resource/", {'columns' : ['hostname','country','type'], 'filters' : { 'country' : 'France' } }, function(data) {
$(this).dataTable( {
- "bScrollInfinite": true,
+ "sScrollY": window.innerHeight - 275,
+ "sDom": "frtiS",
"bScrollCollapse": true,
- "sScrollY": "500px",
"bStateSave": true,
"bPaginate": false,
"bLengthChange": false,
- "bFilter": true,
+ "bFilter": false,
"bSort": true,
"bInfo": false,
- "bAutoWidth": false
+ "bAutoWidth": true,
+ "bAutoHeight": false
} );
});
} );
{% block unfold_main %}
<div id="slice-view">
<div class="col-md-2">
- <div id="select-platform" class="list-group"></div>
-
- <div class="list-group">
-
- <a href="#" class="list-group-item active">
- <span class="badge">14</span>
- Reserved
- </a>
- <a href="#" class="list-group-item">Available</a>
- </div>
+ <div id="select-platform" class="list-group">
+ </div>
<ul class="list-group">
<li class="list-group-item">Filter: CPU</li>
</div>
<div class="col-md-10">
- <ul class="nav nav-tabs">
- <li class="active"><a href="#">Resources</a></li>
- <li><a href="#"></a></li>
- <li><a href="#"></a></li>
- </ul>
- <table cellpadding="0" cellspacing="0" border="0" class="table table-bordered" id="objectList"></table>
+ <div class="row">
+ {% include theme|add:"_widget-slice-sections.html" %}
+ </div>
+ <div class="row slice-pending">
+ <ul class="nav nav-pills">
+ <li><a href="">Unreserved<span class="badge">42</span></a></li>
+ <li><a href="">Reserved</a></li>
+ <li><a href="">Pending</a></li>
+ <li>
+ <button type="button" class="btn btn-primary apply">Apply</button>
+ <button type="button" class="btn btn-default clear">Clear</button>
+ </li>
+ </ul>
+ </div>
+ <div class="row">
+ <ul class="nav nav-tabs">
+ <li class="active"><a href="#">Resources</a></li>
+ <li><a href="#"></a></li>
+ <li><a href="#"></a></li>
+ </ul>
+ </div>
+ <table cellpadding="0" cellspacing="0" border="0" class="table" id="objectList"></table>
</div>
</div>
{% endblock unfold_main %}
\ No newline at end of file
{% extends "layout-unfold1.html" %}
{% block unfold_main %}
-<div class="wrapper" id="testbed-list">
-<h1><img src="{{ STATIC_URL }}img/icon_testbed_small.png" alt="Open a Ticket" /> Testbeds</h1>
-
-<p>
-
-</p>
- <table cellpadding="0" cellspacing="0" border="0" class="table" id="testbedList"></table>
+<div id="testbed-list">
+ <div class="col-md-2"></div>
+ <div class="col-md-10">
+ <div class="row">
+ {% include theme|add:"_widget-slice-sections.html" %}
+ </div>
+ <div class="row">
+ <ul class="nav nav-tabs">
+ <li class="active"><a href="#">Testbeds</a></li>
+ <li><a href="#"></a></li>
+ <li><a href="#"></a></li>
+ </ul>
+ </div>
+ <table cellpadding="0" cellspacing="0" border="0" class="table" id="testbedList"></table>
+ </div>
</div>
{% endblock unfold_main %}
\ No newline at end of file
--- /dev/null
+<div class="col-md-8 slice-sections">
+ <ul class="nav nav-pills nav-justified">
+ <li><a href="/resources/{{ slice }}/">{{ slice }}</a></li>
+ <li {% if section == 'testbeds' %}class="active"{% endif %}><a href="/testbeds/{{ slice }}/">Testbeds</a></li>
+ <li {% if section == 'resources' %}class="active"{% endif %}><a href="/resources/{{ slice }}/">Resources</a></li>
+ <li {% if section == 'users' %}class="active">{% endif %}><a href="/users/{{ slice }}/">Users</a></li>
+ <li><a href="">Statistics</a></li>
+ <li><a href="">Measurements</a></li>
+ </ul>
+</div>
+<div class="col-md-4 slice-experiment">
+ <a href="/portal/experiment"><button type="button" class="btn btn-default">Experiment</button></a>
+</div>
\ No newline at end of file
class TestbedList (LoginRequiredView, ThemeView):
template_name = "testbed-list.html"
- def get(self, request):
- return render_to_response(self.template, {"theme": self.theme, "username": request.user}, context_instance=RequestContext(request))
+ def get(self, request, slicename):
+ return render_to_response(self.template, {"theme": self.theme, "username": request.user, "slice" : slicename, "section":"testbeds"}, context_instance=RequestContext(request))