// snapshotManager.js // *** Snapshot functions *** GBrowseController.addMethods({ killSnapshot: function(snapshot){ var snapshot_row = document.getElementById(snapshot); // Stops displaying the selecting snapshot before actually deleting it snapshot_row.style.display="none"; // An asynchronous request is made to delete the snapshot from the session new Ajax.Request(document.URL, { method: 'POST', asynchronous:true, parameters: { action: 'delete_snapshot', name: snapshot, }}); // Removes the snapshot from the pages title if it was the last one set if($('snapshot_page_title').innerHTML == 'Snapshot : ' + snapshot){ $('snapshot_page_title').innerHTML = 'Snapshot : '; $('snapshot_page_title').hide(); } }, saveSnapshot: function(alternate){ var sessionName; if(alternate){ sessionName = 'snap_' + $('snapshot_name_2').value; } else { sessionName = 'snap_' + $('snapshot_name').value; } if(Controller.snapshotExists(sessionName)){ return; } // If a value was entered for the name of the snapshot then it is saved else if(sessionName){ $('busy_indicator').show(); $('snapshot_page_title').update('Saving Snapshot...'); $('snapshot_page_title').style.color = 'red'; $('snapshot_page_title').show(); // An asynchronous request is made to save a snapshot of the session new Ajax.Request(document.URL, { method: 'POST', asynchronous:true, parameters: { action: 'save_snapshot', name: sessionName, }}); // A timer is used to ensure that the snapshot table is recreated only after the information has been updated setTimeout(function(){ // The snapshot table is updated var sections = new Array(snapshot_table_id); Controller.update_sections(sections); // Another timeout is used to end the busy indicator after the table has been created setTimeout(function(){ Sortable.create('snapshotTable',{tag:'div',only:'draggable'}); $('busy_indicator').hide(); // The page title is updated to reflect the current snapshot //$('snapshot_page_title').update('Snapshot : ' + sessionName); //$('snapshot_page_title').style.color = 'navy'; $('snapshot_page_title').hide(); },1500) },2500) } else { alert("Please enter a name for the snapshot. The snapshot was not saved."); } }, setSnapshot: function(sessionName){ $('busy_indicator').show(); $('snapshot_page_title').update('Loading Snapshot...'); $('snapshot_page_title').style.color = 'red'; $('snapshot_page_title').show(); var active = new Array(); // A request is made to update the current session new Ajax.Request(document.URL, { method: 'POST', asynchronous:true, parameters: { action: 'set_snapshot', name: sessionName, }, onSuccess: function(transport) { var results = transport.responseJSON; Controller.reload_panels(results.segment_info); Controller.update_sections(new Array(track_listing_id)); TrackPan.make_details_draggable(); console.log(results.segment_info.detail_start); Controller.select_tab('main_page'); $('snapshot_page_title').hide(); } }); }, sendSnapshot: function(snapshot){ // The snapshot code to be sent is initially set to '' var snapshot_url = ''; // Only one send snapshot_box is open at a time var send_snapshot_boxes = $$('.send_snapshot'); send_snapshot_boxes.each(function(box){ box.hide(); }) // Snapshot rows are pushed back and the selected row is pushed forward var draggable = $$('.draggable'); draggable.each(function(drag){ drag.style.zIndex = 0; }) $(snapshot).style.zIndex = 1000; // The div containing the snapshot information is shown $('send_snapshot_' + snapshot).show(); // An asynchronous request to the server loads the snapshot code for the selected snapshot // This is only loaded for the specific snapshot that the user intends to share rather than all snapshots. This saves time. new Ajax.Request(document.URL, { method: 'POST', asynchronous:true, parameters: { action: 'send_snapshot', name: snapshot, url: document.location.href, }, onSuccess: function(transport) { // Upon success, the snapshot code is output to the user for copying var results = transport.responseText; $('send_snapshot_url_' + snapshot).update(results); } }); }, pushForward: function(snapshot){ var draggable = $$('.draggable'); draggable.each(function(drag){ drag.style.zIndex = 0; }) $(snapshot).style.zIndex = 1000; }, mailSnapshot: function(snapshot){ var email = $('email_' + snapshot).value; $('mail_snapshot_' + snapshot).hide(); $('busy_indicator').show(); // An asynchronous request is used to send an email to the email provided new Ajax.Request(document.URL, { method: 'POST', asynchronous:true, parameters: { action: 'mail_snapshot', email: email, name: snapshot, url: document.location.href, }, onSuccess: function(transport) { var results = transport.responseJSON; if (!results.success) { Controller.show_error('Your mail could not be sent',results.msg); } $('busy_indicator').hide(); } }); }, checkSnapshot: function(){ // The source, session, and snapshot information are stored var browser_source = Controller.findParameter("source"); var upload = Controller.findParameter("id"); var snapcode = Controller.findParameter("snapcode"); var snapname = Controller.findParameter("snapname"); if(browser_source != null && upload != null && snapcode != null && name != null){ // An asynchronous request loads the snapshot into the browser new Ajax.Request(document.URL, { method: 'POST', asynchronous:false, parameters: { action: 'load_snapshot_from_file', snapcode: snapcode, snapname: snapname, id: upload, browser_source: browser_source, }, onSuccess: function(transport) { $('busy_indicator').show(); Controller.setSnapshot(snapname); }, onFailure: function(transport) { alert('failed'); }, on504: function() { alert("GBrowse could not find the provided session or snapshot"); } }); location.href=location.href.substr(0,location.href.indexOf('?')); } }, findParameter: function(param, search){ if(search == null){ // Searches the URL for the value of the parameter passed in search = window.location.search.substring(1); } if(search.indexOf('&') > -1) { var params = search.split('&'); for(var i = 0; i < params.length; i++) { var key_value = params[i].split('='); if(key_value[0] == param) return key_value[1]; } } else { var params = search.split('='); if(params[0] == param) return params[1]; } return null; }, enlarge_image: function(image){ $('large_snapshot').setAttribute('src', image); Box.prototype.greyout(true); $('enlarge_image').show(); }, snapshotExists: function(snapshot){ // If the snapshot exists, the user is prompted to see if they want to overwrite it // False is returned if the snapshot does not exist or will be overwritten var check = document.getElementById(snapshot); if (check){ if(check.style.display == 'none'){ return false; } var choice = confirm('A snapshot with the same name has already been saved, would you like to overwrite it?'); if (choice){ return false; } else { return true; } } else { return false; } }, /* this code has nothing to do with snapshots * but is instead a hack for xyplot overlays * disable it for now linkTrackLegend: function(){ var subtrack_groups = $$('.subtrack_group'); subtrack_groups.each(function(subtrack_group) { var subtracks = subtrack_group.childElements(); if(subtracks.size() > 1){ subtracks.each(function(subtrack) { var label = subtrack.down().down().innerHTML; var track_div = subtrack.ancestors()[2]; var map = track_div.down('map'); areas = map.childElements() areas.each(function(area) { var href = area.readAttribute('href'); href = href.replace(/;/g, "&"); var param = Controller.findParameter('name', href); if(param == label){ subtrack.down().href = href.replace(/&/g, ";"); area.remove(); throw $break; } }); }); } }); } */ });