{
var query_ext = this.find_analyzed_query_ext(query_uuid);
query_ext.filters = $.grep(query_ext.filters, function(x) {
- return x == filter;
+ return x != filter;
});
this.apply_filters(query_uuid);
// FILTERS
case FILTER_ADDED:
+ console.log("FILTER ADDED", data);
/* Update internal record state */
manifold.query_store.add_filter(query_uuid, data);
break;
case FILTER_REMOVED:
+ console.log("FILTER REMOVED", data);
/* Update internal record state */
manifold.query_store.remove_filter(query_uuid, data);
<table id='{{domid}}__table' class='query-editor'>
<thead>
<tr>
- <th class='center'>Info</th>
+ <!--<th class='center'>Info</th> -->
<th class='center'>Field</th>
<!--
<th class='center'>Resource</th>
{% for field in fields %}
<tr>
- <td class='center'><span class='glyphicon glyphicon-chevron-right' style='cursor:pointer'></span></td>
+ <!--<td class='center'><span class='glyphicon glyphicon-chevron-right' style='cursor:pointer'></span></td> -->
<td class='center'>{{ field.name }}</td>
<!--
<td class='center'>{{ field.resource_type }}</td>
// ... and communicate the appropriate filters to the manager
// NOTE: we use the manifold namespace for internal filters
- if (self.prev_filter_status)
- manifold.raise_event(self.options.query_uuid, FILTER_REMOVED, self.prev_filter_status);
-
+ if (self.prev_filter_status) {
+ var filter = ['manifold:status', '==', self.prev_filter_status];
+ manifold.raise_event(self.options.query_uuid, FILTER_REMOVED, filter);
+ }
// XXX The datatables will be refreshed twice !
if (filter_status != 'all') {
// No filter for 'all'
<div id={{ domid }}>
- <span class="list-group-item-heading sl-resources">View:</span>
+ <span class="list-group-item-heading sl-resources" style='font-size:inherit;'>View:</span>
<a href="#"
class="list-group-item sl-resources active"
- style='display: inline-block !important;'
+ style='display: inline-block !important; font-size: inherit;'
id="{{ domid }}__all"
data-status="all"
title="View resources that are available to be reserved."
<a href="#"
class="list-group-item sl-resources"
- style='display: inline-block !important;'
+ style='display: inline-block !important; font-size: inherit;'
id="{{ domid }}__reserved"
data-status="reserved"
title="View resources that you have previously reserved for the slice."
</a>
<a href="#" class="list-group-item sl-resources"
- style='display: inline-block !important;'
+ style='display: inline-block !important; font-size: inherit; width:130px;'
id="{{ domid }}__unconfigured"
data-status="unconfigured"
title="View resources that you have selected to add to your slice, that require configuration before they can be reserved. Hover you mouse over the symbol next to the checkbox for more details."
</a>
<a href="#" class="list-group-item sl-resources"
- style='display: inline-block !important;'
+ style='display: inline-block !important; font-size: inherit;'
id="{{ domid }}__pending"
data-status="pending"
title="View pending changes to your slice: resources that you have selected to add, and resources that you have selected to remove. Click on the Apply button to apply those changes, or on the Cancel button to cancel them."
\r
$scope.select = function(index, model_lease, model_resource)\r
{\r
- var data;\r
+ var data, resource_granularity;\r
+\r
+ //resource_granularity = model_resource.granularity === undefined ? RESOURCE_DEFAULT_GRANULARITY : model_resource.granularity;\r
\r
console.log("Selected", index, model_lease, model_resource);\r
\r
var day_timestamp = SchedulerDateSelected.getTime() / 1000;\r
- var start_time = day_timestamp + index * model_resource.granularity;\r
- var end_time = day_timestamp + (index + 1) * model_resource.granularity;\r
+ var start_time = day_timestamp + index * model_resource.granularity; // XXX resource_granularity\r
+ var end_time = day_timestamp + (index + 1) * model_resource.granularity; //\r
var start_date = new Date(start_time * 1000);\r
var end_date = new Date(end_time * 1000);\r
\r
var resource = jQuery.extend(true, {}, record);\r
\r
// Fix granularity\r
- resource.granularity = typeof(resource.granularity) == "number" ? resource.granularity : RESOURCE_DEFAULT_GRANULARITY;\r
+ //resource_granularity = ((resource.granularity === undefined) || (typeof(resource.granularity) != "number")) ? RESOURCE_DEFAULT_GRANULARITY : resource.granularity;\r
+ if (typeof(resource.granularity) != "number")\r
+ resource.granularity = RESOURCE_DEFAULT_GRANULARITY;\r
resource.leases = []; // a list of occupied timeslots\r
\r
self.scope_resources_by_key[resource['urn']] = resource;\r
/* Limit the display to the current day */\r
id_end = this._all_slots.length / colspan_lease\r
}\r
+ lease_status = manifold.query_store.get_record_state(this.options.query_lease_uuid, lease_key, STATE_SET);\r
+ // the same slots might be affected multiple times.\r
+ // PENDING_IN + PENDING_OUT => IN \r
+ //\r
+ // RESERVED vs SELECTED !\r
+ //\r
+ // PENDING !!\r
+ switch(lease_status) {\r
+ case STATE_SET_IN:\r
+ lease_class = 'selected'; // my leases\r
+ lease_success = '';\r
+ break;\r
+ case STATE_SET_IN_SUCCESS:\r
+ lease_class = 'selected'; // my leases\r
+ lease_success = 'success';\r
+ case STATE_SET_OUT_FAILURE:\r
+ lease_class = 'selected'; // my leases\r
+ lease_success = 'failure';\r
+ break;\r
+ case STATE_SET_OUT:\r
+ lease_class = 'reserved'; // other leases\r
+ lease_success = '';\r
+ break;\r
+ case STATE_SET_OUT_SUCCESS:\r
+ lease_class = 'free'; // other leases\r
+ lease_success = 'success';\r
+ break;\r
+ case STATE_SET_IN_FAILURE:\r
+ lease_class = 'free'; // other leases\r
+ lease_success = 'failure';\r
+ break;\r
+ case STATE_SET_IN_PENDING:\r
+ lease_class = 'pendingin';\r
+ lease_success = '';\r
+ break;\r
+ case STATE_SET_OUT_PENDING:\r
+ // pending_in & pending_out == IN == replacement\r
+ if (resource.leases[i].status == 'pendingin')\r
+ lease_class = 'pendingin'\r
+ else\r
+ lease_class = 'pendingout';\r
+ lease_success = '';\r
+ break;\r
+ \r
+ }\r
\r
for (i = id_start; i < id_end; i++) {\r
- // the same slots might be affected multiple times.\r
- // PENDING_IN + PENDING_OUT => IN \r
- //\r
- // RESERVED vs SELECTED !\r
- //\r
- // PENDING !!\r
- lease_status = manifold.query_store.get_record_state(this.options.query_lease_uuid, lease_key, STATE_SET);\r
- switch(lease_status) {\r
- case STATE_SET_IN:\r
- lease_class = 'selected'; // my leases\r
- lease_success = '';\r
- break;\r
- case STATE_SET_IN_SUCCESS:\r
- lease_class = 'selected'; // my leases\r
- lease_success = 'success';\r
- case STATE_SET_OUT_FAILURE:\r
- lease_class = 'selected'; // my leases\r
- lease_success = 'failure';\r
- break;\r
- case STATE_SET_OUT:\r
- lease_class = 'reserved'; // other leases\r
- lease_success = '';\r
- break;\r
- case STATE_SET_OUT_SUCCESS:\r
- lease_class = 'free'; // other leases\r
- lease_success = 'success';\r
- break;\r
- case STATE_SET_IN_FAILURE:\r
- lease_class = 'free'; // other leases\r
- lease_success = 'failure';\r
- break;\r
- case STATE_SET_IN_PENDING:\r
- lease_class = 'pendingin';\r
- lease_success = '';\r
- break;\r
- case STATE_SET_OUT_PENDING:\r
- // pending_in & pending_out == IN == replacement\r
- if (resource.leases[i].status == 'pendingin')\r
- lease_class = 'pendingin'\r
- else\r
- lease_class = 'pendingout';\r
- lease_success = '';\r
- break;\r
- \r
- }\r
resource.leases[i].status = lease_class;\r
resource.leases[i].success = lease_success;\r
}\r
init_cell = (new Date().getHours() - 1) * 3600 / self._granularity;\r
if (init_cell > num_hidden_cells)\r
init_cell = num_hidden_cells;\r
- \r
+\r
$('#tblSlider').slider({\r
min: 0,\r
max: num_hidden_cells,\r
id="testbeds-filter_{[{ testbed.network_hrn }]}"
data-platform="{[{ testbed.network_hrn }]}">
<span class="list-group-item-heading">{[{ testbed.platform }]}</span>
- <p class="list-group-item-heading">{[{ testbed.network_hrn }]}</p></a>
+ <!--<p class="list-group-item-heading">{[{ testbed.network_hrn }]}</p>-->
+ </a>
</div>
</div>
def get_context_data(self, **kwargs):
self.template_name = self.template
page = Page(self.request)
+ metadata = page.get_metadata()
+ page.expose_js_metadata()
+
page.add_js_files ( [ "js/jquery.validate.js", "js/my_account.register.js", "js/my_account.edit_profile.js","js/jquery-ui.js" ] )
page.add_css_files ( [ "css/onelab.css", "css/account_view.css","css/plugin.css" ] )
-
user_query = Query().get('local:user').select('config','email','status')
user_details = execute_query(self.request, user_query)
"""
"""
errors = []
-
+ authority_hrn = None
authorities_query = Query.get('authority').select('name', 'authority_hrn')
authorities = execute_admin_query(wsgi_request, authorities_query)
if authorities is not None:
current_site = Site.objects.get_current()
current_site = current_site.domain
- authorities_query = Query.get('authority').select('name', 'authority_hrn')
- authorities = execute_admin_query(wsgi_request, authorities_query)
-
for authority in authorities:
if authority['name'] == wsgi_request.POST.get('org_name', ''):
authority_hrn = authority['authority_hrn']
+ # Handle the case when the template uses only hrn and not name
+ if authority_hrn is None:
+ authority_hrn = wsgi_request.POST.get('org_name', '')
+
post_email = wsgi_request.POST.get('email','').lower()
salt = randint(1,100000)
email_hash = md5(str(salt)+post_email).hexdigest()
slice_name =''
purpose=''
exp_url=''
+ authority_hrn = None
# Retrieve the list of authorities
authorities_query = Query.get('authority').select('name', 'authority_hrn')
authorities = execute_admin_query(wsgi_request, authorities_query)
page = Page(wsgi_request)
page.add_js_files ( [ "js/jquery.validate.js", "js/jquery-ui.js" ] )
page.add_css_files ( [ "https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] )
+ page.expose_js_metadata()
if method == 'POST':
# The form has been submitted
current_site = current_site.domain
# getting the authority_hrn from the selected organization
- authority_hrn = ''
for authority in authorities:
if authority['name'] == wsgi_request.POST.get('org_name', ''):
authority_hrn = authority['authority_hrn']
-
+ # Handle the case when the template uses only hrn and not name
+ if authority_hrn is None:
+ authority_hrn = wsgi_request.POST.get('org_name', '')
slice_request = {
'type' : 'slice',
'exp_url': exp_url,
'pi': pi,
'authority_name': authority_name,
+ 'authority_hrn': user_authority,
'cc_myself': True,
'authorities': authorities,
'theme': self.theme,
#page.enqueue_query(query_resource_all)
# leases query
- lease_md = metadata.details_by_object('lease')
- lease_fields = [column['name'] for column in lease_md['column']]
+ #lease_md = metadata.details_by_object('lease')
+ #lease_fields = [column['name'] for column in lease_md['column']]
- query_lease_all = Query.get('lease').select(lease_fields)
- page.enqueue_query(query_lease_all)
+ #query_lease_all = Query.get('lease').select(lease_fields)
+ #page.enqueue_query(query_lease_all)
# --------------------------------------------------------------------------
# ALL RESOURCES LIST
padding:2px 4px;
-moz-border-radius: 4px;
border-radius: 4px;
+ width:125px;
+ text-align: center;
}
a.sl-resources.active, a.sl-resources.active:hover, a.sl-resources.active:focus {
border:0;
color:white;
padding-top:60px;
text-shadow: 1px 1px #013540;
-}
\ No newline at end of file
+}
{% endfor %}
</p>
</div>
-<script>$(document).ready(function() {$('#authority_name').text('{{authority.name}}')});</script>
\ No newline at end of file
+<script>$(document).ready(function() {
+{% if authority.name %}
+ auth_name = "{{authority.name}}";
+{% else %}
+ auth_name = "{{authority.authority_hrn}}";
+{% endif %}
+ $('#authority_name').text(auth_name);
+});
+</script>
</div>
<div class="row">
- <div class="col-md-4">
+ <div class="col-md-6">
{{ filter_status }}
</div>
<div class="col-md-2">
console.log(slice_users);
}
});
- }); // post rest/user
- }
+ }); // post rest/use
+
+ $('button#addusers').click(function() {
+ $.post("/update/slice/",{'filters':{'slice_hrn':'{{slice}}'},'params':{'users':slice_users}}, function(data) {
+ if(data.success){
+ // TODO: highlight row after success
+ //$('tr[id="'+record_id+'"]').highlight();
+ mysliceAlert('Success: slice updated','success', true);
+ }else{
+ mysliceAlert('Rest Error for: '+data.error,'warning', true);
+ }
+ }); // post update slice
+
+ // TODO: refresh table
+ //window.location="/portal/institution#slices";
+ }); // button#addusers click
+
+ } // get_users_in_slice
$(document).ready(function() {
// TODO: Add a filter based on the list of authorities
get_users_in_slice("{{user_details.parent_authority}}");
- $('button#addusers').click(function() {
- $.post("/update/slice/",{'filters':{'slice_hrn':'{{slice}}'},'params':{'users':slice_users}}, function(data) {
- if(data.success){
- // TODO: highlight row after success
- //$('tr[id="'+record_id+'"]').highlight();
- mysliceAlert('Success: slice updated','success', true);
- }else{
- mysliceAlert('Rest Error for: '+data.error,'warning', true);
- }
- }); // post update slice
-
- // TODO: refresh table
- //window.location="/portal/institution#slices";
-
- }); // button#addusers click
$('[title!=""]').qtip();
}); // document ready
</script>
# for asynchronous management of topmenu
def topmenu_items_live (current, page):
request=page.request
- query_pi_auths = Query.get('user').filter_by('user_hrn', '==', '$user_hrn' ).select('pi_authorities')
+ # XXX TODO This should be triggered only when user is logged in
+ # We might use local storage instead
+ query_pi_auths = Query.get('user').filter_by('user_hrn', '==', '$user_hrn' ).select('user_hrn','pi_authorities')
page.enqueue_query(query_pi_auths)
# # even though this plugin does not have any html materialization, the corresponding domid
# # must exist because it is searched at init-time to create the JS plugin