blob: 98f23f5ed3ed18875564922909c1d187f283c87a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* The Controller object
* This is used to wire up the view and model with actions
*/
var Controller = {
contextPath: 'wookie',
init:function() {
var pathArray = window.location.pathname.split( '/' );
this.contextPath = pathArray[1];
Controller.update();
},
update:function() {
$.ajax({ type: 'GET', url: '/' + this.contextPath+'/warp', dataType: 'xml', success: Controller.parseTopLevel});
},
// Parse the complete policy list for all Widgets
// and construct a list of widgets with a count of the
// number of policies that apply to them
parseTopLevel: function(xml){
var widgets = new Array();
$(xml).find("policy").each(function(){
var widget = {};
widget.id = $(this).attr("widget");
widget.title = $(this).attr("widget_title");
widget.count = 1;
var exists = false;
for(var i=0;i<widgets.length;i++){
if (widgets[i].id == widget.id){
widgets[i].count++;
exists = true;
}
}
if (!exists){
widgets.push(widget);
}
});
Controller.widgets = widgets;
Controller.updateListView(widgets);
},
// Update the list of widgets and the number of policies that they have
// and attach an OnClick even to view that widget
updateListView: function(widgets){
var index = $('#widgets-listview');
index.empty();
for(var i=0;i<widgets.length;i++){
var widget = widgets[i];
index.append($("<li/>")
.append($("<a/>")
.attr("onClick", "Controller.viewWidget(" + widget.id + ")")
.text(widget.title)
)
.append($("<span/>")
.attr("class","ui-li-count")
.text(widget.count)
));
index.listview("refresh");
}
},
// At Widget level we can see the list of policies
// Set the current widget, and load its policies from the server
viewWidget: function(widget_id){
var widget = Controller.getWidget(widget_id);
Controller.widget = widget;
$(".widget-title").text(widget.title);
$.mobile.changePage("#widget");
$.ajax({ type: 'GET', url: '/' + this.contextPath+'/warp?widgetId='+widget.id, dataType: 'xml', success: Controller.parseWidgetLevel});
},
// Refresh the list view of policies for the current Widget
parseWidgetLevel: function(xml){
var index = $('#policies-listview');
index.empty();
$(xml).find("policy").each(
function(){
var id = $(this).attr("id");
var origin = $(this).attr("origin");
var granted = $(this).attr("granted");
var theme = "";
var decorator = "";
if (granted == "false") theme = "e";
if (granted == "false") decorator = "(not granted)";
index.append( $("<li/>")
.attr("data-theme", theme)
.append($("<a/>")
.text(origin)
.attr("onClick", "Controller.policy = Controller.viewPolicy("+id+",\""+granted+"\",\""+origin+"\")")
)
.append($("<p/>").attr("class", "ul-li-aside").text(decorator))
)
});
index.listview('refresh');
},
// Utility method for getting the cached widget from its id
getWidget: function(id){
if (!Controller.widgets) return null;
for (var i=0;i<Controller.widgets.length;i++){
if (Controller.widgets[i].id == id) return Controller.widgets[i];
}
},
// At Policy level we can grant/revoke
// Set the current policy id, and update the form
// buttons to reflect its status. Finally, re-bind
// an onChange event to the status radio buttons
viewPolicy: function(id, granted, origin){
Controller.policy_id = id;
$("#policy-origin").text(origin);
// Remove any existing change event bound to this control before
// we change its value
$("input[name='radio-view']").unbind("change");
$("input[name='radio-view']:checked").removeAttr("checked");
if (granted == "true"){
$("input[name='radio-view']:eq(0)").attr("checked","checked");
$("input[name='radio-view']:eq(1)").removeAttr("checked");
} else {
$("input[name='radio-view']:eq(0)").removeAttr("checked");
$("input[name='radio-view']:eq(1)").attr("checked","checked");
}
$("input[name='radio-view']").change(function(){
if ($("input[name='radio-view']:checked").val() == 'granted')
Controller.put("true");
else
Controller.put("false");
});
$.mobile.changePage("#policy");
$("input[name='radio-view']").checkboxradio("refresh");
},
// Set the status of a policy (granted or not granted)
// When complete, refreshes the policy list
put: function(state){
$.ajax({
type: "PUT",
url: '/' + this.contextPath + '/warp/' + Controller.policy_id + '?granted=' + state,
datatype:'json',
success: function(msg) {
$.ajax({ type: 'GET', url: '/' + this.contextPath + '/warp?widgetId='+Controller.widget.id, dataType: 'xml', success: Controller.parseWidgetLevel});
}
});
}
}