1 {% extends "layout-unfold1.html" %}
\r
4 {{ wizard.form.media }}
\r
7 {% block unfold_main %}
\r
9 <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/onelab.css" />
\r
11 <!-- Reputation Specific -->
\r
12 <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}reputation_static/css/main.css" />
\r
14 <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}reputation_static/css/jquery-ui-1.9.2.custom.min.css" />
\r
16 <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}reputation_static/css/jquery.rating.css" />
\r
18 <script src="{{STATIC_URL}}reputation_static/js/jquery-1.9.0.min.js" type="text/javascript"></script>
\r
19 <script type="text/javascript" src="{{STATIC_URL}}reputation_static/js/ui/jquery-ui-1.9.2.custom.min.js"></script>
\r
20 <script type="text/javascript" src="{{STATIC_URL}}reputation_static/js/jquery.raty.min.js"></script>
\r
23 color: rgb(96, 96, 216);
\r
24 width:75% !important;
\r
27 .ui-accordion-header, .ui-accordion-content {
\r
28 width:120% !important;
\r
44 #slicelist li:last-child {
\r
58 #scoreform > ol > li > div > input:first-child {
\r
59 margin: 4px 3px 0 0;
\r
61 #scoreform > ol > li > div > input:last-child {
\r
62 margin: 4px 3px 0 10px;
\r
66 <div id='rep-container' align="center" style="text-align:left;margin-left:1%;">
\r
71 <li><a href="#tabs-1">Testbeds' Reputation</a></li>
\r
72 <li><a href="#tabs-2">Evaluate your experiments</a></li>
\r
77 <table class="reptable table table-bordered table-hover">
\r
80 {% for service in rep_serv %}
\r
81 <th id='service{{forloop.counter}}' class='{{service}}-class'>Service: {{ service}} </th>
\r
86 {% for testbed_rep in reputation %}
\r
87 <tr class="border_bottom">
\r
89 <span> {{ testbed_rep.testbed }} </span>
\r
92 {% for tb_serv in testbed_rep.services %}
\r
105 <h1>Experiment Evaluation</h1>
\r
106 <p><b>List of your unrated experiments</b></p>
\r
107 <div style=" width: 70% !important" id="slicelist">
\r
109 {% for aslice in slicelist %}
\r
110 <h3>Slice <b>{{ aslice.slice_hrn }}</b></h3>
\r
111 <div style="padding-bottom:0;padding-top:0;">
\r
113 experiment from <b>{{ aslice.start_t }}</b> to <b>{{ aslice.end_t }}</b> | <a href="#" class="rate_button" data-resid={{ aslice.id }}>Rate it</a>
\r
127 <div id="scoreform" style="display:none">
\r
130 <span>How was your overall experience with this Testbed?</span>
\r
135 Did you experience any problems during the experiment?
\r
137 <input type="radio" name="q2" value="1" />Yes
\r
138 <input type="radio" name="q2" value="0" />No
\r
143 How would you rate the provided user support (instructions, tutorials, email support)?
\r
148 Would you use this testbed again?
\r
150 <input type="radio" name="q4" value="1" />Yes
\r
151 <input type="radio" name="q4" value="0" />No
\r
155 Would you be willing to pay for this service?
\r
157 <input type="radio" name="q5" value="1" />Yes
\r
158 <input type="radio" name="q5" value="0" />No
\r
162 How would you rate the Node Availability in the experiment?
\r
167 How would you rate the Link Quality regarding PDR in the experiment (1:Very Low, 5:Very High )?
\r
172 Rate your level of certainty regarding your answers above?
\r
179 <a href="#">Submit »</a>
\r
187 <div id='temp_log' style="display: none;">
\r
189 <table class="mytable table table-bordered table-hover">
\r
191 <th>User Email</th>
\r
199 {% for slice in slices_users %}
\r
200 <tr class="border_bottom">
\r
202 <a href="/portal/user/{{slice.user}}"><span class="glyphicon glyphicon-search"></span></a>
\r
205 <td class="odd"> {{ slice.user_hrn }} </td>
\r
206 <td class="even"> {{ slice.slice_hrn }} </td>
\r
207 <td class="even"> {{ slice.resource }} </td>
\r
208 <td class="even"> {{ slice.lease }} </td>
\r
215 <div id='logging_out'>{{ logging_test }}</div>
\r
219 <!-- END of Reputation Specific -->
\r
222 <div class="onelab-title well-lg">
\r
223 <h2>Onelab Support</h2>
\r
224 <h4>If you have already registered, then please send an <a href="mailto:support@myslice.info">e-mail</a>
\r
225 or <a href="http://trac.myslice.info/" >visit us</a></h4>
\r
229 <!-- Reputation Specific -->
\r
231 <script type="text/javascript">
\r
233 serv_per_tb = jQuery.parseJSON('{{ serv_per_tb|safe }}');
\r
236 $( "#tabs" ).tabs();
\r
239 var data = jQuery.parseJSON('{{ json_data|safe }}');
\r
251 function initDialog() {
\r
254 $("input:radio").removeAttr("checked");
\r
255 $("#submit > a").click(function() {
\r
256 if ($("#q2 input:checked").val()) {
\r
257 q2 = $("#q2 input:checked").val();
\r
259 if ($("#q4 input:checked").val()) {
\r
260 q4 = $("#q4 input:checked").val();
\r
262 if ($("#q5 input:checked").val()) {
\r
263 q5 = $("#q5 input:checked").val();
\r
266 $("a[data-resid='"+resid+"']").css("text-decoration", "line-through").unbind("click").removeAttr("href");
\r
268 //TODO: validate input before submitting
\r
270 sum = q1 + q2 + q3 + q4 + q5 + q6 + q7 +q8;
\r
273 alert("Please provide at least one rating to submit");
\r
276 $("#scoreform").dialog("close");
\r
278 for(var event in data){
\r
279 if ((data[event]).id == resid) {
\r
280 slicedata = (data[event]);
\r
284 slicedata["user_eval"] = {'overall':q1, 'problems':q2, 'support':q3, 'reuse':q4, 'pay':q5, 'availability':q6, 'link_quality':q7, 'quality':q8};
\r
285 testbeds_str = JSON.stringify(slicedata['testbeds'])
\r
286 delete slicedata['testbeds'];
\r
287 //console.log(JSON.stringify(slicedata))
\r
291 url: "reputation/submit_eval",
\r
292 data: {slicedata: slicedata, testbeds: testbeds_str},
\r
293 accepts: "application/json",
\r
294 success: function (data) {
\r
295 var json = $.parseJSON(data);
\r
298 error: function(xhr,errmsg,err) {
\r
299 alert(" X " + errmsg + " X " + err+ ": " + xhr.responseText);
\r
309 starOn: 'static/reputation_static/img/star-on.png',
\r
310 starOff: 'static/reputation_static/img/star-off.png',
\r
311 click: function(score, evt) {
\r
318 starOn: 'static/reputation_static/img/star-on.png',
\r
319 starOff: 'static/reputation_static/img/star-off.png',
\r
320 click: function(score, evt) {
\r
327 starOn: 'static/reputation_static/img/star-on.png',
\r
328 starOff: 'static/reputation_static/img/star-off.png',
\r
329 click: function(score, evt) {
\r
336 starOn: 'static/reputation_static/img/star-on.png',
\r
337 starOff: 'static/reputation_static/img/star-off.png',
\r
338 click: function(score, evt) {
\r
345 starOn: 'static/reputation_static/img/star-on.png',
\r
346 starOff: 'static/reputation_static/img/star-off.png',
\r
347 click: function(score, evt) {
\r
354 vars with answers to questions
\r
357 $("#slicelist").accordion({
\r
358 heightStyle: "content"
\r
363 clone = $("#scoreform").clone(true);
\r
365 $(".rate_button").click(function() {
\r
374 resid = $(this).attr("data-resid");
\r
377 for(var event in data){
\r
378 if ((data[event]).id == resid) {
\r
379 slicedata = (data[event]);
\r
384 for (var tb in slicedata["testbeds"]){
\r
385 for (var srv in serv_per_tb[tb]){
\r
386 if (srv != 'equals') {
\r
387 //console.log(serv_per_tb[tb][srv]);
\r
388 srv_arr.push(serv_per_tb[tb][srv])
\r
394 cq6 = "availability";
\r
395 cq7 = "link_quality";
\r
399 if ($.inArray(cq1, srv_arr) == -1 ){
\r
400 $("#scoreform > ol").children(':eq('+0+')').remove();
\r
402 if ($.inArray(cq6, srv_arr) == -1 ){
\r
403 $("#scoreform > ol").children(':eq('+5+')').remove();
\r
405 if ($.inArray(cq7, srv_arr) == -1 ){
\r
406 $("#scoreform > ol").children(':eq('+6+')').remove();
\r
409 $("#scoreform").dialog({
\r
410 title: "Rate experiment",
\r
416 close : function() {
\r
417 $(this).dialog("destroy");
\r
418 $("#scoreform").remove();
\r
419 $("body").append(clone);
\r
430 <!-- END of Reputation Specific -->
\r