view bts_webui/amancay/static/amancay_interface.js @ 144:c93c594f1f98 draft

toolbox: convert the toolbox into a template tag This is a *huge* improvement to how the code is organized right now. Specifically this gives us complete control over how stuff is loaded from the sidebar and makes more evident which are the paths taken by the code to actually do stuff. A concrete example is how loading of links happen. amancay_interface.js has been disabled to implement/move its functionality to other places.
author diegoe-guest
date Mon, 10 Aug 2009 23:42:03 +0000
parents 3f5b51f6f99b
children
line wrap: on
line source

function reload_current_view(evt) {
	var view = document.getElementById("current_view").value;
	load_bugs(evt,"/" + view + "_table/");
}

var items_changed = function(request) {
	var item_type = document.getElementById("item").name;
	var item_list = MochiKit.Async.evalJSONRequest(request)["item_list"];
	if (item_list.length == 0) {
		var dom_form = document.getElementById("item_selection");
		new_span = DIV({'class': 'toolbox_message'}, "No items selected");
		replaceChildNodes(dom_form, new_span);
	} else {
		var cells = new Array(item_list.length);
		for (var i=0; i < item_list.length; i++) {
			cells[i] = [ TD({"class":"item_select"}, INPUT({"type":"checkbox",
			"name":item_type+"_select", "id":"item_select", "value":
			item_list[i]}, null)), TD({"class":"item_name"}, item_list[i]) ];
		}
		var rows = map(partial(TR, null), cells);
		var dom_item_table = document.getElementById("item_list");
		if (! dom_item_table) {
			dom_item_table = TABLE({"id":"item_list"})
			dom_item_list = TBODY(null, null)
			replaceChildNodes(dom_item_table, dom_item_list);
			var dom_form = document.getElementById("item_selection");
			var dom_remove = DIV({"class":"toolbox_remove"},
			INPUT({"type":"submit", "value": "Remove", "class": "toolbox_remove"}))
	    	MochiKit.Signal.connect( dom_form, 'onsubmit', send_item_selected );
			replaceChildNodes(dom_form, dom_item_table, dom_remove)
		} else {
			dom_item_list = dom_item_table.getElementsByTagName("tbody")[0];
		}
		replaceChildNodes(dom_item_list, rows);
	}
	reload_current_view();
}


function loading_bugs() {
		new_span = SPAN({'class': 'loading'}, "Loading...");
		replaceChildNodes(document.getElementById("loading"), new_span);
}
function loading_finished() {
	new_span = SPAN();
	replaceChildNodes(document.getElementById("loading"), new_span);
}

var got_search_results = function(request) {
	place = document.getElementById("search_results");
	replace_content(request, place);
	pagerConnect();
}

var got_bugs = function(request) {
	place = document.getElementById("main_content");
	replace_content(request, place);
}

function replace_content(request, place) {
	if (strip(request.responseText) != "") {
		place.innerHTML = request.responseText;
	} 
	else {
		new_span = SPAN({'class': 'error'}, "No bugs found");
		replaceChildNodes(place, new_span);
	}
	loading_finished();
}

var failed_bugs = function(request) {
	new_span = SPAN({'class': 'error'}, "ERROR: bug list couldn't be loaded");
	replaceChildNodes(document.getElementById("main_content"), new_span);
	loading_finished();
}

var failed_search_results = function(request) {
	new_span = SPAN({'class': 'error'}, "ERROR: search results couldn't be loaded");
	replaceChildNodes(document.getElementById("search_results"), new_span);
	loading_finished();
}

function load_bugs(evt, url) {
	loading_bugs();
	var d = doXHR(url);
	d.addCallbacks(got_bugs, failed_bugs);
	evt.preventDefault();
}

function load_search_results(evt, url) {
	loading_bugs();
	var d = doXHR(url);
	d.addCallbacks(got_search_results, failed_search_results);
	evt.preventDefault();
}

function send_page(evt) {
	url = (evt.src() + "").replace(/search/, "search_table");
	load_search_results(evt,url);
	evt.preventDefault();
}

function pagerConnect() {
	var pager = document.getElementById("pager")
	if (pager) {
		var items = pager.getElementsByTagName("a")
		for (var i = 0; i < items.length; i++) {
			 MochiKit.Signal.connect( items[i], 'onclick', send_page );
		}
	}
}

function myLoadFunction()
{
	pagerConnect();

	if (buglogConnect)
		buglogConnect();

	var link;
	link = document.getElementById("submitted_bugs_link");
	if (link)
	    MochiKit.Signal.connect( link, 'onclick', get_submitted_bugs );

	link = document.getElementById("received_bugs_link");
	if (link)
    	MochiKit.Signal.connect( link, 'onclick', get_received_bugs );

	link = document.getElementById("package_bugs_link");
	if (link)
		MochiKit.Signal.connect( link, 'onclick', get_package_bugs );

	link = document.getElementById("selected_bugs_link");
	if (link)
    	MochiKit.Signal.connect( link, 'onclick', get_selected_bugs );

	link = document.getElementById("tagged_bugs_link");
	if (link)
    	MochiKit.Signal.connect( link, 'onclick', get_tagged_bugs );
}

/*connect our event handlers right off*/
MochiKit.DOM.addLoadEvent(myLoadFunction);