GBrowse
view release on metacpan or search on metacpan
htdocs/js/controller.js view on Meta::CPAN
this.each_track(track_id,function(gbtrack) {
new Ajax.Request(Controller.url,{
method: 'post',
parameters: {
action: 'set_track_visibility',
visible: visible,
track_name: track_name
},
onSuccess: function(transport) {
if (visible && gbtrack.get_last_update_key() == null || gbtrack.get_last_update_key() < Controller.last_update_key) {
Controller.rerender_track(gbtrack.track_id);
}
}
});
});
},
// Kick-off Render Methods ****************************************
reload_panels: // called only to reload a snapshot
function (segment_info) {
if (segment_info != null) {
this.segment_info = segment_info;
}
new Ajax.Request(Controller.url,{
method: 'post',
parameters: {
action: 'render_panels'
},
onSuccess: function(transport) {
$('panels').innerHTML = transport.responseText;
$('panels').innerHTML.evalScripts();
var color = overviewObject.background;
var unit = overviewObject.unit;
var divider = overviewObject.divider;
['overview','region','detail'].each(function(e) {
var m = $(e+'SelectMenu');
if (m) m.remove();
});
this.initialize_page();
set_dragcolors(color);
set_dragunits(unit,divider);
}
});
}, //end render_panels()
update_coordinates:
function (action, snapshot) {
if (snapshot == null){
snapshot = false;
}
// submit search form if the detail panel doesn't exist
if ( null == $(detail_container_id) ){
document.searchform.force_submit.value = 1;
document.searchform.submit();
}
this.busy();
TrackPan.grey_out_markers();
$('ruler_handle').setOpacity(0.3);
$('detail_scale_scale').setOpacity(0.3);
//Grey out image
this.each_track(function(gbtrack) {
if ($(gbtrack.track_image_id) != null)
$(gbtrack.track_image_id).setOpacity(0.3);
// else
// alert('REPORT THIS BUG: element '+gbtrack.track_image_id+' should not be null');
});
new Ajax.Request(Controller.url, {
method: 'post',
parameters: {
action: 'navigate', // 'action' triggers an async call
navigate: action, // 'navigate' is an argument passed to the async routine
view_start: Math.round(TrackPan.get_start()),
view_stop: Math.round(TrackPan.get_stop()),
snapshot: snapshot // Is true when a snapshot is being loaded, and false otherwise
},
onSuccess: function(transport) {
var results = transport.responseJSON;
Controller.segment_info = results.segment_info;
var track_keys = results.track_keys;
var overview_scale_bar_hash = results.overview_scale_bar;
var region_scale_bar_hash = results.region_scale_bar;
var detail_scale_bar_hash = results.detail_scale_bar;
Controller.set_last_update_keys(track_keys);
if (overview_scale_bar_hash) {
Controller.update_scale_bar(overview_scale_bar_hash);
$('overview_panels').setStyle({width: overview_scale_bar_hash.width+'px'});
}
if (region_scale_bar_hash) {
Controller.update_scale_bar(region_scale_bar_hash);
$('region_panels').setStyle({width: region_scale_bar_hash.width+'px'});
}
if (detail_scale_bar_hash) {
Controller.update_scale_bar(detail_scale_bar_hash);
$('detail_panels').setStyle({width: detail_scale_bar_hash.view_width+'px'});
var detail_width = Controller.segment_info.detail_width;
var details_pixel_ratio = Controller.segment_info.details_pixel_ratio;
var scale_width = Math.round(detail_scale_bar_hash.scale_size / details_pixel_ratio) - 1;
var scale_left = Math.round((Controller.segment_info.overview_width - scale_width) / 2) - 30;
var scale_div = $("detail_scale_scale");
if (scale_div) {
scale_div.innerHTML = detail_scale_bar_hash.scale_label +
"<span style='display: inline-block; margin-left:5px; margin-bottom:4px; border-left: 1px solid black; border-right: 1px solid black; height:8px'>" +
"<span style='display: inline-block; border-bottom: 1px solid black; height: 4px; width:" + scale_width + "px'</span></span>";
$('ruler_handle').setOpacity(1);
scale_div.setOpacity(1);
scale_div.setStyle({ left: scale_left+'px' });
}
}
// Update the segment sections
Controller.update_sections( Controller.segment_observers.keys());
$('details_msg').innerHTML = results.details_msg;
Controller.get_multiple_tracks(track_keys);
TrackPan.make_details_draggable();
if (results.display_details == 0)
Controller.hide_detail_tracks();
} // end onSuccess
}); // end Ajax.Request
}, // end update_coordinates
refresh_tracks:
function (snapshot) {
// The snapshot flag indicates that a snapshot is being loaded and refreshes the tracks accordingly
Controller.update_coordinates('left 0', snapshot);
}, // end refresh_tracks
scroll:
function (direction,length_units) {
if (!TrackPan.scroll(direction,length_units)) {
var view_length = (parseInt(Controller.segment_info.detail_stop) - parseInt(Controller.segment_info.detail_start)) / parseFloat(Controller.segment_info.details_mult);
this.update_coordinates(direction + ' ' + Math.round(length_units*view_length));
}
}, // end scroll
add_track:
function(track_name, onSuccessFunc, force) {
var track_names = new Array(track_name);
this.add_tracks(track_names,onSuccessFunc,force);
},
add_tracks:
function(track_names, onSuccessFunc, force, onTop) {
if (force == null)
force = false;
var request_str = "action=add_tracks";
var found_track = false;
track_names.reverse();
for (var i = 0; i < track_names.length; i++) {
var track_name = track_names[i];
if ( force || !this.track_exists(track_name) ) {
request_str += "&track_names="+encodeURIComponent(track_name);
found_track = true;
}
}
//track_names.reverse();
if (!found_track) return false;
this.busy();
new Ajax.Request(Controller.url, {
method: 'post',
parameters: request_str,
onSuccess: function(transport) {
if (onSuccessFunc!=null)
onSuccessFunc();
var results = transport.responseJSON;
var track_data = results.track_data;
var track_keys = new Object();
var get_tracks = false;
// for (var i = 0; i < track_names.length; i++) {
// var ret_track_id = track_names[i];
for (var ret_track_id in track_data) {
if (Controller.gbtracks.get(ret_track_id) != null)
continue; //oops already know this one
var this_track_data = track_data[ret_track_id];
var ret_gbtrack = Controller.register_track (
ret_track_id,
this_track_data.track_name,
'standard',
this_track_data.track_section
);
Controller.set_last_update_key(ret_gbtrack)
var html = this_track_data.track_html;
var panel_id = this_track_data.panel_id;
//Controller.append_child_from_html(html,$(panel_id),onTop);
// force true - experimental
Controller.append_child_from_html(html,$(panel_id),true);
if (this_track_data.display_details == 0) {
$(ret_gbtrack.track_image_id).setOpacity(0);
} else {
track_keys[ret_track_id]=this_track_data.track_key;
get_tracks = true;
}
} // end for (var ret_track_name...
if( get_tracks)
Controller.get_multiple_tracks(track_keys);
else
Controller.idle();
}
});
return true;
},
busy:
function() {
var bi = $('busy_indicator');
var top = document.body.scrollTop||document.documentElement.scrollTop;
bi.style.top =5+"px";
bi.style.left =5+"px";
bi.show();
},
idle:
function() {
var bi = $('busy_indicator');
bi.hide();
},
rerender_track:
function(track_id,scroll_there,nocache) {
if (scroll_there == null)
scroll_there = false;
if (nocache == null)
nocache = false;
this.busy();
this.each_track(track_id,function(gbtrack) {
$(gbtrack.track_image_id).setOpacity(0.3);
Controller.set_last_update_key(gbtrack);
new Ajax.Request(Controller.url,{
method: 'post',
parameters: {
action: 'rerender_track',
track_id: gbtrack.track_id,
nocache: nocache ? 1 : 0
},
onSuccess: function(transport) {
var results = transport.responseJSON;
var track_keys = results.track_keys;
if (results.display_details == 0) {
$(gbtrack.track_image_id).setOpacity(0);
} else {
time_key = create_time_key();
for (var track_id in track_keys) {
Controller.retrieve_tracks.set(gbtrack.track_id,true);
Controller.ret_track_time_key.set(gbtrack.track_id,time_key);
} // end for
Controller.get_remaining_tracks(track_keys,1000,1.1,time_key);
}
if (scroll_there)
new Effect.ScrollTo(gbtrack.track_div_id,{queue: 'end'});
} // end onSuccess
}); // end Ajax.Request
}); //end each_track()
}, // end rerender_track
scroll_to_matching_track:
function scroll_to_matching_track(partial_name) {
var tracks = $$('span.titlebar');
var first_track = tracks.find(function(n) {
var result = n.id.include(partial_name)
&& n.visible();
return result;
});
if (first_track != null) {
new Effect.ScrollTo(first_track,
{ queue:'end' }
);
}
},
delete_track:
function(track_name) {
this.each_track(track_name,function(gb) {
Controller.unregister_track(gb.track_name);
actually_remove(gb.track_div_id);
});
}, // end delete_track
// Retrieve Rendered Track Methods ********************************
get_multiple_tracks:
function (track_keys) {
time_key = create_time_key();
$H(track_keys).keys().each(
function(track_id) {
Controller.retrieve_tracks.set(track_id,true);
Controller.ret_track_time_key.set(track_id,time_key);
}
);
this.get_remaining_tracks(track_keys,1000,1.1,time_key);
},
// Time key is there to make sure separate calls don't trounce each other
// Only Update if the tracks time_key matches the method's
get_remaining_tracks:
function (track_keys,time_out,decay,time_key){
var track_ids = [];
var finished = true;
var track_key_str = '';
this.busy();
this.retrieve_tracks.keys().each(
function(track_id) {
if(Controller.retrieve_tracks.get(track_id)){
if (Controller.ret_track_time_key.get(track_id) == time_key){
track_ids.push(track_id);
track_key_str += '&tk_'+escape(track_id)+"="+track_keys[track_id];
finished = false;
}
}
}
);
if (finished) {
this.idle();
return;
}
new Ajax.Request(Controller.url, {
method: 'post',
parameters: $H({
action: 'retrieve_multiple',
track_ids: track_ids
}).toQueryString() + track_key_str,
onSuccess: function(transport) {
var continue_requesting = false;
var results = transport.responseJSON;
var track_html_hash = results.track_html;
for (var track_id in track_html_hash) {
track_html = track_html_hash[track_id];
var gbtrack = Controller.gbtracks.get(track_id);
if (Controller.ret_track_time_key.get(track_id) == time_key){
track_div = document.getElementById(gbtrack.track_div_id);
if (track_html.substring(0,18) == "<!-- AVAILABLE -->"){
track_div.innerHTML = track_html;
gbtrack.track_resolved();
Controller.retrieve_tracks.set(track_id,false);
} else if (track_html.substring(0,16) == "<!-- EXPIRED -->") {
Controller.retrieve_tracks.set(track_id,false);
if (gbtrack.expired_count >= expired_limit){
$(gbtrack.track_image_id).setOpacity(0);
} else {
gbtrack.increment_expired_count();
Controller.rerender_track(track_id);
}
} else if (track_html.substring(0,14) == "<!-- ERROR -->") {
gbtrack.track_resolved();
Controller.retrieve_tracks.set(track_id,false);
track_div.innerHTML = track_html;
} else if (track_html.substring(0,16) == "<!-- DEFUNCT -->") {
gbtrack.track_resolved();
Controller.retrieve_tracks.set(track_id,false);
$(gbtrack.track_image_id).setOpacity(0);
} else {
continue_requesting = true;
}
}
}
if (continue_requesting) {
setTimeout( function() {
( run in 0.606 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )