Changeset 1479:b671c301674a

Show
Ignore:
Timestamp:
08/22/08 17:47:43 (3 months ago)
Author:
James Taylor <james@jamestaylor.org>
branch:
default
Message:

Internet explorer fixes and support -- popup menus and dialogs work better on IE6+,
workflow editor works on IE7 (using excanvas). It actually *nearly* works on IE6 but
there are some layout problems that are probably not worth wasting time on. If any IE
users can test this that would be great!

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • static/june_2007_style/base.css.tmpl

    r1427 r1479  
    359359    display: inline-block; 
    360360    cursor: pointer; 
    361     margin: -1px; padding: 2px; 
     361    padding: 2px; 
    362362    border: solid #aaaaaa 1px; 
    363363    padding-right: 0.5em; 
  • static/june_2007_style/blue/base.css

    r1427 r1479  
    357357    display: inline-block; 
    358358    cursor: pointer; 
    359     margin: -1px; padding: 2px; 
     359    padding: 2px; 
    360360    border: solid #aaaaaa 1px; 
    361361    padding-right: 0.5em; 
  • static/june_2007_style/blue/panel_layout.css

    r1267 r1479  
    245245    z-index: 20000; 
    246246} 
    247 #overlay-inner { 
    248     width: 100%; height: 100%; 
    249     background-color:#FFF; 
    250     filter:alpha(opacity=75); 
    251     -moz-opacity: 0.75; 
    252     opacity: 0.75; 
    253     z-index: 20000; 
    254 } 
    255247 
    256248.dialog-box-container { 
     
    260252    margin-left: auto; 
    261253} 
    262 .dialog-box-underlay { 
    263     position: absolute; 
    264     left: -1em; 
    265     right: -1em; 
    266     top: -1em; 
    267     bottom: -1em; 
    268     opacity: 0.5; 
    269     background: black; 
    270     z-index: -1; 
     254 
     255.dialog-box-wrapper { 
     256    position: relative; 
     257    padding: 1em; 
     258    background-color: rgba(0,0,0,0.5); 
    271259    -moz-border-radius: 1em; 
    272260    -webkit-border-radius: 1em; 
  • static/june_2007_style/panel_layout.css.tmpl

    r1261 r1479  
    245245} 
    246246 
    247 #overlay-inner { 
    248     width: 100%; height: 100%; 
    249     background-color:#FFF; 
    250     filter:alpha(opacity=75); 
    251     -moz-opacity: 0.75; 
    252     opacity: 0.75; 
    253     z-index: 20000; 
    254 } 
    255  
    256247.dialog-box-container { 
    257248    position: relative; 
     
    260251    margin-left: auto; 
    261252} 
    262 .dialog-box-underlay { 
    263     position: absolute; 
    264     left: -1em; 
    265     right: -1em; 
    266     top: -1em; 
    267     bottom: -1em; 
    268     opacity: 0.5; 
    269     background: black; 
    270     z-index: -1; 
     253 
     254.dialog-box-wrapper { 
     255    position: relative; 
     256    padding: 1em; 
     257    background-color: rgba(0,0,0,0.5); 
    271258    -moz-border-radius: 1em; 
    272259    -webkit-border-radius: 1em; 
  • static/scripts/galaxy.base.js

    r1432 r1479  
    3030    // And the helper below the popup menus 
    3131    if ( $( "#popup-helper" ).length == 0 ) { 
    32         var e = $("<div id='popup-helper' style='background: white; opacity: 0.00; top: 0; left: 0; width: 100%; height: 100%; position: absolute; z-index: 15000;'></div>"); 
    33         if ( $.browser.ie ) { 
    34             // Element will not capture drags in ie without nonzero opacity, 
    35             // but causes flashing in firefox with nonzero opacity 
    36             e.css( "opacity", "0.01" ); 
    37         } 
    38         e.appendTo("body").hide(); 
     32        $( "<div id='popup-helper'/>" ).css( { 
     33            background: 'white', opacity: 0, zIndex: 15000, 
     34            position: 'absolute', top: 0, left: 0, width: '100%', height: '100%'  
     35        } ).appendTo( "body" ).hide(); 
    3936    } 
    4037} 
  • static/scripts/galaxy.panels.js

    r1424 r1479  
    77    // Insert div that covers everything when dragging the borders 
    88    if ( jq( "#DD-helper" ).length == 0 ) { 
    9         var e = jq("<div id='DD-helper' style='background: white; opacity: 0.00; top: 0; left: 0; width: 100%; height: 100%; position: absolute; z-index: 9000;'></div>"); 
    10         if ( jq.browser.ie ) { 
    11             // Element will not capture drags in ie without nonzero opacity, 
    12             // but causes flashing in firefox with nonzero opacity 
    13             e.css( "opacity", "0.01" ); 
    14         } 
    15         e.appendTo("body").hide(); 
     9        $( "<div id='DD-helper'/>" ).css( { 
     10            background: 'white', opacity: 0, zIndex: 9000, 
     11            position: 'absolute', top: 0, left: 0, width: '100%', height: '100%'  
     12        } ).appendTo( "body" ).hide(); 
    1613    } 
    1714} 
     
    180177}; 
    181178 
     179// Modal dialog boxes 
     180 
     181function hide_modal() { 
     182    $(".dialog-box-container" ).fadeOut( function() { $("#overlay").hide(); } ); 
     183}; 
     184 
     185function show_modal( title, body, buttons, extra_buttons ) { 
     186    $( ".dialog-box" ).find( ".title" ).html( title ); 
     187    var b = $( ".dialog-box" ).find( ".buttons" ).html( "" ); 
     188    if ( buttons ) { 
     189        $.each( buttons, function( name, value ) { 
     190            b.append( $( '<button/>' ).text( name ).click( value ) ); 
     191            b.append( " " ); 
     192        }); 
     193        b.show(); 
     194    } else { 
     195        b.hide(); 
     196    } 
     197    var b = $( ".dialog-box" ).find( ".extra_buttons" ).html( "" ); 
     198    if ( extra_buttons ) { 
     199        $.each( extra_buttons, function( name, value ) { 
     200            b.append( $( '<button/>' ).text( name ).click( value ) ); 
     201            b.append( " " ); 
     202        }); 
     203        b.show(); 
     204    } else { 
     205        b.hide(); 
     206    } 
     207    if ( body == "progress" ) { 
     208        body = $( "<img src='../images/yui/rel_interstitial_loading.gif')' />" ); 
     209    } 
     210    $( ".dialog-box" ).find( ".body" ).html( body ); 
     211    if ( ! $(".dialog-box-container").is( ":visible" ) ) { 
     212        $("#overlay").show(); 
     213        $(".dialog-box-container").fadeIn() 
     214    } 
     215}; 
     216     
     217// Popup -- is this up to date? 
     218 
    182219function make_popupmenu( button_element, options ) { 
    183220    var menu_element = $( "<div class='popupmenu'><div class='popupmenu-top'><div class='popupmenu-top-inner'/></div></div>" ).appendTo( "body" ); 
  • static/scripts/galaxy.ui.scrollPanel.js

    r1435 r1479  
    1919            element_h = element.height(), 
    2020            moved = false, 
    21             close = 5, 
     21            close_dist = 5, 
    2222            nudge = 23, 
    2323            // Legal panel range 
     
    3535            mouse_y = ui.position.top + instance.offset.click.top; 
    3636        // Move it 
    37         if ( ( panel_pos.left < p_max_x ) && ( mouse_x - close < min_vis_x ) ) { 
     37        if ( ( panel_pos.left < p_max_x ) && ( mouse_x - close_dist < min_vis_x ) ) { 
    3838            var t = Math.min( nudge, p_max_x - panel_pos.left ); 
    3939            panel.css( "left", panel_pos.left + t ); 
     
    4242            ui.position.left -= t 
    4343        } 
    44         if ( ( ! moved ) && ( panel_pos.left > p_min_x ) && ( mouse_x + close > max_vis_x ) ) { 
     44        if ( ( ! moved ) && ( panel_pos.left > p_min_x ) && ( mouse_x + close_dist > max_vis_x ) ) { 
    4545            var t = Math.min( nudge, panel_pos.left  - p_min_x ); 
    4646            panel.css( "left", panel_pos.left - t ); 
     
    4949            ui.position.left += t;       
    5050        } 
    51         if ( ( ! moved ) && ( panel_pos.top < p_max_y ) && ( mouse_y - close < min_vis_y ) ) { 
     51        if ( ( ! moved ) && ( panel_pos.top < p_max_y ) && ( mouse_y - close_dist < min_vis_y ) ) { 
    5252            var t = Math.min( nudge, p_max_y - panel_pos.top ); 
    5353            panel.css( "top", panel_pos.top + t ); 
     
    5858            moved = true; 
    5959        } 
    60         if ( ( ! moved ) && ( panel_pos.top > p_min_y ) && ( mouse_y + close > max_vis_y ) ) { 
     60        if ( ( ! moved ) && ( panel_pos.top > p_min_y ) && ( mouse_y + close_dist > max_vis_y ) ) { 
    6161            var t = Math.min( nudge, panel_pos.top  - p_min_x ); 
    6262            panel.css( "top", ( panel_pos.top - t ) + "px" ); 
  • static/scripts/galaxy.workflow_editor.canvas.js

    r1394 r1479  
    3333} 
    3434 
    35 OutputTerminal.prototype.__proto__ = Terminal.prototype
     35OutputTerminal.prototype = new Terminal
    3636 
    3737function InputTerminal( element, datatypes ) { 
     
    4040} 
    4141 
    42 InputTerminal.prototype = { 
    43     __proto__: Terminal.prototype, 
     42InputTerminal.prototype = new Terminal; 
     43 
     44$.extend( InputTerminal.prototype, { 
    4445    can_accept: function ( other ) { 
    4546        if ( this.connectors.length < 1 ) { 
     
    5455        return false; 
    5556    } 
    56 } 
     57}); 
    5758 
    5859function Connector( handle1, handle2 ) { 
     
    8283        if ( ! this.canvas ) { 
    8384            this.canvas = document.createElement( "canvas" ); 
     85            // excanvas specific hack 
     86            if ( window.G_vmlCanvasManager ) { 
     87                G_vmlCanvasManager.initElement( this.canvas ); 
     88            } 
    8489            canvas_container.append( $(this.canvas) ); 
    8590            if ( this.dragging ) { this.canvas.style.zIndex = "300" } 
     
    183188                                    }))) 
    184189                            .bind( "mouseleave", function() { 
    185                                 $(this).fadeOut( "fast", function() { $(this).remove() } ) 
     190                                $(this).remove(); 
    186191                            }); 
    187192                        // Position it and show 
     
    190195                                left: $(this).offset().left - t.width(), 
    191196                                'padding-right': $(this).width() } 
    192                             ).fadeIn( "fast" ); 
     197                            ).show(); 
    193198                    } 
    194199                }, 
     
    273278        var b = f.find( ".toolFormBody" ); 
    274279        b.find( "div" ).remove(); 
    275         var ibox = $("<div class='inputs'/>").appendTo( b ); 
     280        var ibox = $("<div class='inputs'></div>").appendTo( b ); 
    276281        $.each( data.data_inputs, function( i, input ) { 
    277             t = $("<div class='terminal input-terminal'></div>") 
     282            var t = $("<div class='terminal input-terminal'></div>"); 
    278283            node.enable_input_terminal( t, input.name, input.extensions ); 
    279             ibox.append( $("<div class='form-row dataRow input-data-row' name='" + input.name + "'>" + input.label + "</div></div>" ).prepend( t ) ); 
    280         });         
     284            ibox.append( $("<div class='form-row dataRow input-data-row' name='" + input.name + "'>" + input.label + "</div>" ).prepend( t ) ); 
     285        }); 
    281286        if ( ( data.data_inputs.length > 0 ) && ( data.data_outputs.length > 0 ) ) { 
    282287            b.append( $( "<div class='rule'></div>" ) ); 
     
    306311        // Update input rows 
    307312        var old_body = el.find( "div.inputs" ); 
    308         var new_body = $("<div class='inputs'/>"); 
    309         old = old_body.find( "div.input-data-row") 
     313        var new_body = $("<div class='inputs'></div>"); 
     314        var old = old_body.find( "div.input-data-row") 
    310315        $.each( data.data_inputs, function( i, input ) { 
    311316            var t = $("<div class='terminal input-terminal'></div>"); 
     
    323328            }); 
    324329            // Append to new body 
    325             new_body.append( $("<div class='form-row dataRow input-data-row' name='" + input.name + "'>" + input.label + "</div></div>" ).prepend( t ) ); 
     330            new_body.append( $("<div class='form-row dataRow input-data-row' name='" + input.name + "'>" + input.label + "</div>" ).prepend( t ) ); 
    326331        }); 
    327332        old_body.replaceWith( new_body ); 
     
    469474    // Fix width to computed width 
    470475    // Now add floats 
    471     var buttons = $("<div class='buttons' style='float: right'></div>"); 
    472     buttons.append( $("<img src='../images/delete_icon.png' />").click( function() {  
     476    var buttons = $("<div class='buttons' style='float: right;'></div>"); 
     477    buttons.append( $("<img src='../images/delete_icon.png' />").click( function( e ) { 
    473478        node.destroy(); 
    474479    } ).hover(  
     
    476481        function() { $(this).attr( 'src', "../images/delete_icon.png" ) } 
    477482    ) ); 
     483    // zIndex tracking for bring to front 
     484    zmax = $("#canvas-container").data( "zmax" ) 
     485    if ( ! zmax ) { 
     486        zmax = 0; 
     487    } 
     488    f.css( "zIndex", zmax + 1 ); 
     489    $("#canvas-container").data( "zmax", zmax + 1 ); 
     490    // Place inside container 
    478491    f.appendTo( "#canvas-container" ); 
    479492    // Position in container 
     
    495508        // grow: true, 
    496509        click: function( e, ui ) { 
    497             var element = $(this).data("draggable").element.get(0); 
    498             (function(p) { p.removeChild( element ); p.appendChild( element ) })(element.parentNode) 
     510            // Bring to front 
     511            zmax = $("#canvas-container").data( "zmax" ) 
     512            $(this).css( "zIndex", zmax + 1 ); 
     513            $("#canvas-container").data( "zmax", zmax + 1 ); 
     514            // Make active 
    499515            workflow.activate_node( node ); 
    500516        }, 
    501517        start: function( e, ui ) { 
    502518            workflow.activate_node( node ); 
    503             $(this).css( 'z-index', '1000' ); 
     519            $(this).css( 'z-index', $("#canvas-container").data( "zmax" ) + 1000 ); 
    504520        }, 
    505521        drag: function( e, ui ) {  
     
    509525        }, 
    510526        stop: function( e, ui  ) { 
    511             var element = $(this).data("draggable").element.get(0); 
    512             (function(p) { p.removeChild( element ); p.appendChild( element ) })(element.parentNode) 
    513             $(this).css( 'z-index', '100' ); 
     527            // Bring to front 
     528            zmax = $("#canvas-container").data( "zmax" ) 
     529            $(this).css( "zIndex", zmax + 1 ); 
     530            $("#canvas-container").data( "zmax", zmax + 1 ); 
     531            // Redraw 
    514532            $(this).find( ".terminal" ).each( function() { 
    515533                this.terminal.redraw(); 
  • static/scripts/packed/galaxy.base.js

    r1468 r1479  
    1 jQuery(document).ready(function(){jQuery("a[@confirm]").click(function(){return confirm(jQuery(this).attr("confirm"))});jQuery("div[@popupmenu]").each(function(){var B={};$(this).find("a").each(function(){var C=$(this).attr("confirm"),D=$(this).attr("href"),E=$(this).attr("target");B[$(this).text()]=function(){if(!C||confirm(C)){var F=window;if(E=="_parent"){F=window.parent}F.location=D}}});var A=$("#"+$(this).attr("popupmenu"));make_popupmenu(A,B);$(this).remove();A.show()})});function ensure_popup_helper(){if($("#popup-helper").length==0){var A=$("<div id='popup-helper' style='background: white; opacity: 0.00; top: 0; left: 0; width: 100%; height: 100%; position: absolute; z-index: 15000;'></div>");if($.browser.ie){A.css("opacity","0.01")}A.appendTo("body").hide()}}function make_popupmenu(D,B){ensure_popup_helper();var A=$("<div class='popupmenu'></div>").appendTo("body");$.each(B,function(G,F){$("<div class='popupmenu-item' />").html(G).click(F).appendTo(A)});var C=function(){$(A).unbind().hide();$("#popup-helper").unbind().hide()};var E=function(F){var G=$(D).offset();$("#popup-helper").mousedown(C).show();$(A).click(C).css({top:-1000}).show().css({top:F.pageY-2,left:F.pageX-2});return false};$(D).click(E)}; 
     1jQuery(document).ready(function(){jQuery("a[@confirm]").click(function(){return confirm(jQuery(this).attr("confirm"))});jQuery("div[@popupmenu]").each(function(){var B={};$(this).find("a").each(function(){var C=$(this).attr("confirm"),D=$(this).attr("href"),E=$(this).attr("target");B[$(this).text()]=function(){if(!C||confirm(C)){var F=window;if(E=="_parent"){F=window.parent}F.location=D}}});var A=$("#"+$(this).attr("popupmenu"));make_popupmenu(A,B);$(this).remove();A.show()})});function ensure_popup_helper(){if($("#popup-helper").length==0){$("<div id='popup-helper'/>").css({background:"white",opacity:0,zIndex:15000,position:"absolute",top:0,left:0,width:"100%",height:"100%"}).appendTo("body").hide()}}function make_popupmenu(D,B){ensure_popup_helper();var A=$("<div class='popupmenu'></div>").appendTo("body");$.each(B,function(G,F){$("<div class='popupmenu-item' />").html(G).click(F).appendTo(A)});var C=function(){$(A).unbind().hide();$("#popup-helper").unbind().hide()};var E=function(F){var G=$(D).offset();$("#popup-helper").mousedown(C).show();$(A).click(C).css({top:-1000}).show().css({top:F.pageY-2,left:F.pageX-2});return false};$(D).click(E)}; 
  • static/scripts/packed/galaxy.panels.js

    r1468 r1479  
    1 var hidden_width=7;var border_tweak=9;var jq=jQuery;function ensure_dd_helper(){if(jq("#DD-helper").length==0){var A=jq("<div id='DD-helper' style='background: white; opacity: 0.00; top: 0; left: 0; width: 100%; height: 100%; position: absolute; z-index: 9000;'></div>");if(jq.browser.ie){A.css("opacity","0.01")}A.appendTo("body").hide()}}function make_left_panel(E,A,B){var D=false;var C=null;resize=function(F){var G=F;if(F<0){F=0}jq(E).css("width",F);jq(B).css("left",G);jq(A).css("left",F+7);if(document.recalc){document.recalc()}};toggle=function(){if(D){jq(B).removeClass("hover");jq(B).animate({left:C},"fast");jq(E).css("left",-C).show().animate({left:0},"fast",function(){resize(C);jq(B).removeClass("hidden")});D=false}else{C=jq(B).position().left;jq(A).css("left",hidden_width);if(document.recalc){document.recalc()}jq(B).removeClass("hover");jq(E).animate({left:-C},"fast");jq(B).animate({left:-1},"fast",function(){jq(this).addClass("hidden")});D=true}};jq(B).hover(function(){jq(this).addClass("hover")},function(){jq(this).removeClass("hover")}).draggable({start:function(F,G){jq("#DD-helper").show()},stop:function(F,G){jq("#DD-helper").hide();return false},drag:function(F,G){x=G.position.left;x=Math.min(400,Math.max(100,x));if(D){jq(E).css("left",0);jq(B).removeClass("hidden");D=false}resize(x);G.position.left=x;G.position.top=$(this).data("draggable").originalPosition.top},click:function(){toggle()}}).find("div").show()}function make_right_panel(A,E,G){var I=false;var F=false;var C=null;var D=function(J){jq(A).css("width",J);jq(E).css("right",J+9);jq(G).css("right",J).css("left","");if(document.recalc){document.recalc()}};var H=function(){if(I){jq(G).removeClass("hover");jq(G).animate({right:C},"fast");jq(A).css("right",-C).show().animate({right:0},"fast",function(){D(C);jq(G).removeClass("hidden")});I=false}else{C=jq(document).width()-jq(G).position().left-border_tweak;jq(E).css("right",hidden_width+1);if(document.recalc){document.recalc()}jq(G).removeClass("hover");jq(A).animate({right:-C},"fast");jq(G).animate({right:-1},"fast",function(){jq(this).addClass("hidden")});I=true}F=false};var B=function(J){var K=jq(E).width()-(I?C:0);if(K<J){if(!I){H();F=true}}else{if(F){H();F=false}}};jq(G).hover(function(){jq(this).addClass("hover")},function(){jq(this).removeClass("hover")}).draggable({start:function(J,K){jq("#DD-helper").show()},stop:function(J,K){x=K.position.left;w=jq(window).width();x=Math.min(w-100,x);x=Math.max(w-400,x);D(w-x-border_tweak);jq("#DD-helper").hide();return false},click:function(){H()},drag:function(J,K){x=K.position.left;w=jq(window).width();x=Math.min(w-100,x);x=Math.max(w-400,x);if(I){jq(A).css("right",0);jq(G).removeClass("hidden");I=false}D(w-x-border_tweak);K.position.left=x;K.position.top=$(this).data("draggable").originalPosition.top}}).find("div").show();return{handle_minwidth_hint:B}}function make_popupmenu(D,B){var A=$("<div class='popupmenu'><div class='popupmenu-top'><div class='popupmenu-top-inner'/></div></div>").appendTo("body");$.each(B,function(G,F){$("<div class='popupmenu-item' />").html(G).click(F).appendTo(A)});var C=function(){$(A).unbind().hide();$("#popup-helper").unbind().hide()};var E=function(){var F=$(D).offset();$("#popup-helper").mousedown(C).show();$(A).click(C).css({top:-1000}).show().css({top:F.top+$(D).height()+9,left:F.left+$(D).width()-$(A).width()})};$(D).click(E)}; 
     1var hidden_width=7;var border_tweak=9;var jq=jQuery;function ensure_dd_helper(){if(jq("#DD-helper").length==0){$("<div id='DD-helper'/>").css({background:"white",opacity:0,zIndex:9000,position:"absolute",top:0,left:0,width:"100%",height:"100%"}).appendTo("body").hide()}}function make_left_panel(E,A,B){var D=false;var C=null;resize=function(F){var G=F;if(F<0){F=0}jq(E).css("width",F);jq(B).css("left",G);jq(A).css("left",F+7);if(document.recalc){document.recalc()}};toggle=function(){if(D){jq(B).removeClass("hover");jq(B).animate({left:C},"fast");jq(E).css("left",-C).show().animate({left:0},"fast",function(){resize(C);jq(B).removeClass("hidden")});D=false}else{C=jq(B).position().left;jq(A).css("left",hidden_width);if(document.recalc){document.recalc()}jq(B).removeClass("hover");jq(E).animate({left:-C},"fast");jq(B).animate({left:-1},"fast",function(){jq(this).addClass("hidden")});D=true}};jq(B).hover(function(){jq(this).addClass("hover")},function(){jq(this).removeClass("hover")}).draggable({start:function(F,G){jq("#DD-helper").show()},stop:function(F,G){jq("#DD-helper").hide();return false},drag:function(F,G){x=G.position.left;x=Math.min(400,Math.max(100,x));if(D){jq(E).css("left",0);jq(B).removeClass("hidden");D=false}resize(x);G.position.left=x;G.position.top=$(this).data("draggable").originalPosition.top},click:function(){toggle()}}).find("div").show()}function make_right_panel(A,E,G){var I=false;var F=false;var C=null;var D=function(J){jq(A).css("width",J);jq(E).css("right",J+9);jq(G).css("right",J).css("left","");if(document.recalc){document.recalc()}};var H=function(){if(I){jq(G).removeClass("hover");jq(G).animate({right:C},"fast");jq(A).css("right",-C).show().animate({right:0},"fast",function(){D(C);jq(G).removeClass("hidden")});I=false}else{C=jq(document).width()-jq(G).position().left-border_tweak;jq(E).css("right",hidden_width+1);if(document.recalc){document.recalc()}jq(G).removeClass("hover");jq(A).animate({right:-C},"fast");jq(G).animate({right:-1},"fast",function(){jq(this).addClass("hidden")});I=true}F=false};var B=function(J){var K=jq(E).width()-(I?C:0);if(K<J){if(!I){H();F=true}}else{if(F){H();F=false}}};jq(G).hover(function(){jq(this).addClass("hover")},function(){jq(this).removeClass("hover")}).draggable({start:function(J,K){jq("#DD-helper").show()},stop:function(J,K){x=K.position.left;w=jq(window).width();x=Math.min(w-100,x);x=Math.max(w-400,x);D(w-x-border_tweak);jq("#DD-helper").hide();return false},click:function(){H()},drag:function(J,K){x=K.position.left;w=jq(window).width();x=Math.min(w-100,x);x=Math.max(w-400,x);if(I){jq(A).css("right",0);jq(G).removeClass("hidden");I=false}D(w-x-border_tweak);K.position.left=x;K.position.top=$(this).data("draggable").originalPosition.top}}).find("div").show();return{handle_minwidth_hint:B}}function hide_modal(){$(".dialog-box-container").fadeOut(function(){$("#overlay").hide()})}function show_modal(E,B,D,C){$(".dialog-box").find(".title").html(E);var A=$(".dialog-box").find(".buttons").html("");if(D){$.each(D,function(F,G){A.append($("<button/>").text(F).click(G));A.append(" ")});A.show()}else{A.hide()}var A=$(".dialog-box").find(".extra_buttons").html("");if(C){$.each(C,function(F,G){A.append($("<button/>").text(F).click(G));A.append(" ")});A.show()}else{A.hide()}if(B=="progress"){B=$("<img src='../images/yui/rel_interstitial_loading.gif')' />")}$(".dialog-box").find(".body").html(B);if(!$(".dialog-box-container").is(":visible")){$("#overlay").show();$(".dialog-box-container").fadeIn()}}function make_popupmenu(D,B){var A=$("<div class='popupmenu'><div class='popupmenu-top'><div class='popupmenu-top-inner'/></div></div>").appendTo("body");$.each(B,function(G,F){$("<div class='popupmenu-item' />").html(G).click(F).appendTo(A)});var C=function(){$(A).unbind().hide();$("#popup-helper").unbind().hide()};var E=function(){var F=$(D).offset();$("#popup-helper").mousedown(C).show();$(A).click(C).css({top:-1000}).show().css({top:F.top+$(D).height()+9,left:F.left+$(D).width()-$(A).width()})};$(D).click(E)}; 
  • static/scripts/packed/galaxy.workflow_editor.canvas.js

    r1468 r1479  
    1 function Terminal(A){this.element=A;this.connectors=[]}Terminal.prototype={connect:function(A){this.connectors.push(A);if(this.node){this.node.changed()}},disconnect:function(A){this.connectors.splice($.inArray(A,this.connectors),1);if(this.node){this.node.changed()}},redraw:function(){$.each(this.connectors,function(A,B){B.redraw()})},destroy:function(){$.each(this.connectors.slice(),function(A,B){B.destroy()})}};function OutputTerminal(A,B){Terminal.call(this,A);this.datatype=B}OutputTerminal.prototype.__proto__=Terminal.prototype;function InputTerminal(A,B){Terminal.call(this,A);this.datatypes=B}InputTerminal.prototype={__proto__:Terminal.prototype,can_accept:function(A){if(this.connectors.length<1){for(t in this.datatypes){if(A.datatype=="input"){return true}if(issubtype(A.datatype,this.datatypes[t])){return true}}}return false}};function Connector(B,A){this.canvas=null;this.dragging=false;this.inner_color="#FFFFFF";this.outer_color="#D8B365"}$.extend(Connector.prototype,{connect:function(B,A){this.handle1=B;this.handle1.connect(this);this.handle2=A;this.handle2.connect(this)},destroy:function(){if(this.handle1){this.handle1.disconnect(this)}if(this.handle2){this.handle2.disconnect(this)}$(this.canvas).remove()},redraw:function(){var C=$("#canvas-container");if(!this.canvas){this.canvas=document.createElement("canvas");C.append($(this.canvas));if(this.dragging){this.canvas.style.zIndex="300"}}var L=function(S){return $(S).offset().left-C.offset().left};var G=function(S){return $(S).offset().top-C.offset().top};var F=L(this.handle1.element)+5;var E=G(this.handle1.element)+5;var N=L(this.handle2.element)+5;var K=G(this.handle2.element)+5;var D=100;var I=Math.min(F,N);var A=Math.max(F,N);var H=Math.min(E,K);var R=Math.max(E,K);var B=Math.min(Math.max(Math.abs(R-H)/2,100),300);var M=I-D;var Q=H-D;var O=A-I+2*D;var J=R-H+2*D;this.canvas.style.left=M+"px";this.canvas.style.top=Q+"px";this.canvas.setAttribute("width",O);this.canvas.setAttribute("height",J);F-=M;E-=Q;N-=M;K-=Q;var P=this.canvas.getContext("2d");P.lineCap="round";P.strokeStyle=this.outer_color;P.lineWidth=7;P.beginPath();P.moveTo(F,E);P.bezierCurveTo(F+B,E,N-B,K,N,K);P.stroke();P.strokeStyle=this.inner_color;P.lineWidth=5;P.beginPath();P.moveTo(F,E);P.bezierCurveTo(F+B,E,N-B,K,N,K);P.stroke()}});function Node(A){this.element=A;this.input_terminals={};this.output_terminals={};this.tool_errors={}}$.extend(Node.prototype,{enable_input_terminal:function(C,A,B){node=this;$(C).each(function(){var D=this.terminal=new InputTerminal(this,B);D.node=node;D.name=A;$(this).droppable({tolerance:"intersect",accept:function(E){E=E.get(0);return(E.terminal)&&(D.can_accept(E.terminal))},activeClass:"input-terminal-active",over:function(F,E){E.helper.get(0).terminal.connectors[0].inner_color="#BBFFBB"},out:function(F,E){E.helper.get(0).terminal.connectors[0].inner_color="#FFFFFF"},drop:function(I,G){var E=$(this).data("droppable");var F=G.draggable.get(0).terminal;var H=E.element.get(0).terminal;var J=new Connector();J.connect(F,H);J.redraw()}});$(this).hoverIntent(function(){if(D.connectors.length>0){var E=$("<div class='callout'></div>").css({display:"none"}).appendTo("body").append($("<div class='buttons'></div>").append($("<img src='../images/delete_icon.png' />").click(function(){$.each(D.connectors,function(G,F){F.destroy()});E.remove()}))).bind("mouseleave",function(){$(this).fadeOut("fast",function(){$(this).remove()})});E.css({top:$(this).offset().top-2,left:$(this).offset().left-E.width(),"padding-right":$(this).width()}).fadeIn("fast")}},function(){});node.input_terminals[A]=D})},enable_output_terminal:function(C,A,B){node=this;$(C).each(function(){var D=this.terminal=new OutputTerminal(this,B);D.node=node;D.name=A;$(this).draggable({scrollPanel:true,panel:$("#canvas-container"),helper:function(){var E=$('<div class="drag-terminal" style="position: absolute;"></div>').appendTo("#canvas-container").get(0);E.terminal=new OutputTerminal(E);var F=new Connector();this.drag_temp_connector=F;F.dragging=true;F.connect(this.terminal,E.terminal);return E},drag:function(F,E){h=E.helper.get(0);h.terminal.redraw()},stop:function(F,E){this.drag_temp_connector.destroy()}});node.output_terminals[A]=D})},redraw:function(){$.each(this.input_terminals,function(A,B){B.redraw()});$.each(this.output_terminals,function(A,B){B.redraw()})},destroy:function(){$.each(this.input_terminals,function(A,B){B.destroy();$(B.element).droppable("destroy")});$.each(this.output_terminals,function(A,B){B.destroy();$(B.element).draggable("destroy")});$(this.element).draggable("destroy").remove();workflow.remove_node(this)},make_active:function(){$(this.element).addClass("toolForm-active")},make_inactive:function(){$(this.element).removeClass("toolForm-active")},init_field_data:function(D){var C=this.element;if(D.type){this.type=D.type}this.form_html=D.form_html;this.tool_state=D.tool_state;this.tool_errors=D.tool_errors;if(this.tool_errors){C.addClass("tool-node-error")}else{C.removeClass("tool-node-error")}var B=this;var A=C.find(".toolFormBody");A.find("div").remove();var E=$("<div class='inputs'/>").appendTo(A);$.each(D.data_inputs,function(G,F){t=$("<div class='terminal input-terminal'></div>");B.enable_input_terminal(t,F.name,F.extensions);E.append($("<div class='form-row dataRow input-data-row' name='"+F.name+"'>"+F.label+"</div></div>").prepend(t))});if((D.data_inputs.length>0)&&(D.data_outputs.length>0)){A.append($("<div class='rule'></div>"))}$.each(D.data_outputs,function(I,F){var H=$("<div class='terminal output-terminal'></div>");B.enable_output_terminal(H,F.name,F.extension);var G=F.name;if(F.extension!="input"){G=G+" ("+F.extension+")"}A.append($("<div class='form-row dataRow'>"+G+"</div>").append(H))});workflow.node_changed(this)},update_field_data:function(D){var B=$(this.element),C=this;this.tool_state=D.tool_state;this.form_html=D.form_html;this.tool_errors=D.tool_errors;if(this.tool_errors){B.addClass("tool-node-error")}else{B.removeClass("tool-node-error")}var E=B.find("div.inputs");var A=$("<div class='inputs'/>");old=E.find("div.input-data-row");$.each(D.data_inputs,function(H,F){var G=$("<div class='terminal input-terminal'></div>");C.enable_input_terminal(G,F.name,F.extensions);E.find("div[name="+F.name+"]").each(function(){$(this).find(".input-terminal").each(function(){var I=this.terminal.connectors[0];if(I){G[0].terminal.connectors[0]=I;I.handle2=G[0].terminal}});$(this).remove()});A.append($("<div class='form-row dataRow input-data-row' name='"+F.name+"'>"+F.label+"</div></div>").prepend(G))});E.replaceWith(A);E.find("div.input-data-row > .terminal").each(function(){this.terminal.destroy()});this.changed();this.redraw()},error:function(C){var A=$(this.element).find(".toolFormBody");A.find("div").remove();var B="<div style='color: red; text-style: italic;'>"+C+"</div>";this.form_html=B;A.html(B);workflow.node_changed(this)},changed:function(){workflow.node_changed(this)}});function Workflow(){this.id_counter=0;this.nodes={};this.name=null;this.has_changes=false}$.extend(Workflow.prototype,{add_node:function(A){A.id=this.id_counter;this.id_counter++;this.nodes[A.id]=A;this.has_changes=true;A.workflow=this},remove_node:function(A){if(this.active_node==A){this.clear_active_node()}delete this.nodes[A.id];this.has_changes=true},remove_all:function(){wf=this;$.each(this.nodes,function(B,A){A.destroy();wf.remove_node(A)})},to_simple:function(){var A={};$.each(this.nodes,function(B,D){var E={};$.each(D.input_terminals,function(F,G){E[G.name]=null;$.each(G.connectors,function(H,I){E[G.name]={id:I.handle1.node.id,output_name:I.handle1.name}})});var C={id:D.id,type:D.type,tool_id:D.tool_id,tool_state:D.tool_state,tool_errors:D.tool_errors,input_connections:E,position:$(D.element).position()};A[D.id]=C});return{steps:A}},from_simple:function(A){wf=this;var B=0;wf.name=A.name;$.each(A.steps,function(E,D){var C=prebuild_node("tool",D.name,D.tool_id);C.init_field_data(D);if(D.position){C.element.css({top:D.position.top,left:D.position.left})}C.id=D.id;wf.nodes[C.id]=C;B=Math.max(B,parseInt(E))});wf.id_counter=B+1;$.each(A.steps,function(E,D){var C=wf.nodes[E];$.each(D.input_connections,function(G,F){if(F){var H=wf.nodes[F.id];var I=new Connector();I.connect(H.output_terminals[F.output_name],C.input_terminals[G]);I.redraw()}})})},clear_active_node:function(){if(this.active_node){this.active_node.make_inactive()}parent.show_form_for_tool("<div>No node selected</div>")},activate_node:function(A){this.clear_active_node();parent.show_form_for_tool(A.form_html,A);A.make_active();this.active_node=A},node_changed:function(A){this.has_changes=true;if(this.active_node==A){this.activate_node(A)}}});function prebuild_node(H,F,K){var E=$("<div class='toolForm toolFormInCanvas'></div>");var C=new Node(E);C.type=H;if(H=="tool"){C.tool_id=K}var J=$("<div class='toolFormTitle unselectable'>"+F+"</div>");E.append(J);E.css("left",$(window).scrollLeft()+20);E.css("top",$(window).scrollTop()+20);var I=$("<div class='toolFormBody'></div>");var D="<div><img height='16' align='middle' src='../images/loading_small_white_bg.gif'/> loading tool info...</div>";I.append(D);C.form_html=D;E.append(I);var G=$("<div class='buttons' style='float: right'></div>");G.append($("<img src='../images/delete_icon.png' />").click(function(){C.destroy()}).hover(function(){$(this).attr("src","../images/delete_icon_dark.png")},function(){$(this).attr("src","../images/delete_icon.png")}));E.appendTo("#canvas-container");var B=$("#canvas-container").position();E.css({left:(-B.left)+10,top:(-B.top)+10});var A=E.width();G.prependTo(J);A+=(G.width()+10);E.css("width",A);$(E).draggable({cursor:"move",scrollPanel:true,panel:$("#canvas-container"),scrollSensitivity:10,scrollSpeed:20,click:function(N,M){var L=$(this).data("draggable").element.get(0);(function(O){O.removeChild(L);O.appendChild(L)})(L.parentNode);workflow.activate_node(C)},start:function(M,L){workflow.activate_node(C);$(this).css("z-index","1000")},drag:function(M,L){$(this).find(".terminal").each(function(){this.terminal.redraw()})},stop:function(N,M){var L=$(this).data("draggable").element.get(0);(function(O){O.removeChild(L);O.appendChild(L)})(L.parentNode);$(this).css("z-index","100");$(this).find(".terminal").each(function(){this.terminal.redraw()});workflow.node_changed(this)}});return C}var ext_to_type=null;var type_to_type=null;function issubtype(B,A){B=ext_to_type[B];A=ext_to_type[A];return(A in type_to_type[B])}function populate_datatype_info(A){ext_to_type=A.ext_to_class_name;type_to_type=A.class_to_classes}; 
     1function Terminal(A){this.element=A;this.connectors=[]}Terminal.prototype={connect:function(A){this.connectors.push(A);if(this.node){this.node.changed()}},disconnect:function(A){this.connectors.splice($.inArray(A,this.connectors),1);if(this.node){this.node.changed()}},redraw:function(){$.each(this.connectors,function(A,B){B.redraw()})},destroy:function(){$.each(this.connectors.slice(),function(A,B){B.destroy()})}};function OutputTerminal(A,B){Terminal.call(this,A);this.datatype=B}OutputTerminal.prototype=new Terminal;function InputTerminal(A,B){Terminal.call(this,A);this.datatypes=B}InputTerminal.prototype=new Terminal;$.extend(InputTerminal.prototype,{can_accept:function(A){if(this.connectors.length<1){for(t in this.datatypes){if(A.datatype=="input"){return true}if(issubtype(A.datatype,this.datatypes[t])){return true}}}return false}});function Connector(B,A){this.canvas=null;this.dragging=false;this.inner_color="#FFFFFF";this.outer_color="#D8B365"}$.extend(Connector.prototype,{connect:function(B,A){this.handle1=B;this.handle1.connect(this);this.handle2=A;this.handle2.connect(this)},destroy:function(){if(this.handle1){this.handle1.disconnect(this)}if(this.handle2){this.handle2.disconnect(this)}$(this.canvas).remove()},redraw:function(){var C=$("#canvas-container");if(!this.canvas){this.canvas=document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(this.canvas)}C.append($(this.canvas));if(this.dragging){this.canvas.style.zIndex="300"}}var L=function(S){return $(S).offset().left-C.offset().left};var G=function(S){return $(S).offset().top-C.offset().top};var F=L(this.handle1.element)+5;var E=G(this.handle1.element)+5;var N=L(this.handle2.element)+5;var K=G(this.handle2.element)+5;var D=100;var I=Math.min(F,N);var A=Math.max(F,N);var H=Math.min(E,K);var R=Math.max(E,K);var B=Math.min(Math.max(Math.abs(R-H)/2,100),300);var M=I-D;var Q=H-D;var O=A-I+2*D;var J=R-H+2*D;this.canvas.style.left=M+"px";this.canvas.style.top=Q+"px";this.canvas.setAttribute("width",O);this.canvas.setAttribute("height",J);F-=M;E-=Q;N-=M;K-=Q;var P=this.canvas.getContext("2d");P.lineCap="round";P.strokeStyle=this.outer_color;P.lineWidth=7;P.beginPath();P.moveTo(F,E);P.bezierCurveTo(F+B,E,N-B,K,N,K);P.stroke();P.strokeStyle=this.inner_color;P.lineWidth=5;P.beginPath();P.moveTo(F,E);P.bezierCurveTo(F+B,E,N-B,K,N,K);P.stroke()}});function Node(A){this.element=A;this.input_terminals={};this.output_terminals={};this.tool_errors={}}$.extend(Node.prototype,{enable_input_terminal:function(C,A,B){node=this;$(C).each(function(){var D=this.terminal=new InputTerminal(this,B);D.node=node;D.name=A;$(this).droppable({tolerance:"intersect",accept:function(E){E=E.get(0);return(E.terminal)&&(D.can_accept(E.terminal))},activeClass:"input-terminal-active",over:function(F,E){E.helper.get(0).terminal.connectors[0].inner_color="#BBFFBB"},out:function(F,E){E.helper.get(0).terminal.connectors[0].inner_color="#FFFFFF"},drop:function(I,G){var E=$(this).data("droppable");var F=G.draggable.get(0).terminal;var H=E.element.get(0).terminal;var J=new Connector();J.connect(F,H);J.redraw()}});$(this).hoverIntent(function(){if(D.connectors.length>0){var E=$("<div class='callout'></div>").css({display:"none"}).appendTo("body").append($("<div class='buttons'></div>").append($("<img src='../images/delete_icon.png' />").click(function(){$.each(D.connectors,function(G,F){F.destroy()});E.remove()}))).bind("mouseleave",function(){$(this).remove()});E.css({top:$(this).offset().top-2,left:$(this).offset().left-E.width(),"padding-right":$(this).width()}).show()}},function(){});node.input_terminals[A]=D})},enable_output_terminal:function(C,A,B){node=this;$(C).each(function(){var D=this.terminal=new OutputTerminal(this,B);D.node=node;D.name=A;$(this).draggable({scrollPanel:true,panel:$("#canvas-container"),helper:function(){var E=$('<div class="drag-terminal" style="position: absolute;"></div>').appendTo("#canvas-container").get(0);E.terminal=new OutputTerminal(E);var F=new Connector();this.drag_temp_connector=F;F.dragging=true;F.connect(this.terminal,E.terminal);return E},drag:function(F,E){h=E.helper.get(0);h.terminal.redraw()},stop:function(F,E){this.drag_temp_connector.destroy()}});node.output_terminals[A]=D})},redraw:function(){$.each(this.input_terminals,function(A,B){B.redraw()});$.each(this.output_terminals,function(A,B){B.redraw()})},destroy:function(){$.each(this.input_terminals,function(A,B){B.destroy();$(B.element).droppable("destroy")});$.each(this.output_terminals,function(A,B){B.destroy();$(B.element).draggable("destroy")});$(this.element).draggable("destroy").remove();workflow.remove_node(this)},make_active:function(){$(this.element).addClass("toolForm-active")},make_inactive:function(){$(this.element).removeClass("toolForm-active")},init_field_data:function(D){var C=this.element;if(D.type){this.type=D.type}this.form_html=D.form_html;this.tool_state=D.tool_state;this.tool_errors=D.tool_errors;if(this.tool_errors){C.addClass("tool-node-error")}else{C.removeClass("tool-node-error")}var B=this;var A=C.find(".toolFormBody");A.find("div").remove();var E=$("<div class='inputs'></div>").appendTo(A);$.each(D.data_inputs,function(H,F){var G=$("<div class='terminal input-terminal'></div>");B.enable_input_terminal(G,F.name,F.extensions);E.append($("<div class='form-row dataRow input-data-row' name='"+F.name+"'>"+F.label+"</div>").prepend(G))});if((D.data_inputs.length>0)&&(D.data_outputs.length>0)){A.append($("<div class='rule'></div>"))}$.each(D.data_outputs,function(I,F){var H=$("<div class='terminal output-terminal'></div>");B.enable_output_terminal(H,F.name,F.extension);var G=F.name;if(F.extension!="input"){G=G+" ("+F.extension+")"}A.append($("<div class='form-row dataRow'>"+G+"</div>").append(H))});workflow.node_changed(this)},update_field_data:function(E){var C=$(this.element),D=this;this.tool_state=E.tool_state;this.form_html=E.form_html;this.tool_errors=E.tool_errors;if(this.tool_errors){C.addClass("tool-node-error")}else{C.removeClass("tool-node-error")}var F=C.find("div.inputs");var B=$("<div class='inputs'></div>");var A=F.find("div.input-data-row");$.each(E.data_inputs,function(I,G){var H=$("<div class='terminal input-terminal'></div>");D.enable_input_terminal(H,G.name,G.extensions);F.find("div[name="+G.name+"]").each(function(){$(this).find(".input-terminal").each(function(){var J=this.terminal.connectors[0];if(J){H[0].terminal.connectors[0]=J;J.handle2=H[0].terminal}});$(this).remove()});B.append($("<div class='form-row dataRow input-data-row' name='"+G.name+"'>"+G.label+"</div>").prepend(H))});F.replaceWith(B);F.find("div.input-data-row > .terminal").each(function(){this.terminal.destroy()});this.changed();this.redraw()},error:function(C){var A=$(this.element).find(".toolFormBody");A.find("div").remove();var B="<div style='color: red; text-style: italic;'>"+C+"</div>";this.form_html=B;A.html(B);workflow.node_changed(this)},changed:function(){workflow.node_changed(this)}});function Workflow(){this.id_counter=0;this.nodes={};this.name=null;this.has_changes=false}$.extend(Workflow.prototype,{add_node:function(A){A.id=this.id_counter;this.id_counter++;this.nodes[A.id]=A;this.has_changes=true;A.workflow=this},remove_node:function(A){if(this.active_node==A){this.clear_active_node()}delete this.nodes[A.id];this.has_changes=true},remove_all:function(){wf=this;$.each(this.nodes,function(B,A){A.destroy();wf.remove_node(A)})},to_simple:function(){var A={};$.each(this.nodes,function(B,D){var E={};$.each(D.input_terminals,function(F,G){E[G.name]=null;$.each(G.connectors,function(H,I){E[G.name]={id:I.handle1.node.id,output_name:I.handle1.name}})});var C={id:D.id,type:D.type,tool_id:D.tool_id,tool_state:D.tool_state,tool_errors:D.tool_errors,input_connections:E,position:$(D.element).position()};A[D.id]=C});return{steps:A}},from_simple:function(A){wf=this;var B=0;wf.name=A.name;$.each(A.steps,function(E,D){var C=prebuild_node("tool",D.name,D.tool_id);C.init_field_data(D);if(D.position){C.element.css({top:D.position.top,left:D.position.left})}C.id=D.id;wf.nodes[C.id]=C;B=Math.max(B,parseInt(E))});wf.id_counter=B+1;$.each(A.steps,function(E,D){var C=wf.nodes[E];$.each(D.input_connections,function(G,F){if(F){var H=wf.nodes[F.id];var I=new Connector();I.connect(H.output_terminals[F.output_name],C.input_terminals[G]);I.redraw()}})})},clear_active_node:function(){if(this.active_node){this.active_node.make_inactive()}parent.show_form_for_tool("<div>No node selected</div>")},activate_node:function(A){this.clear_active_node();parent.show_form_for_tool(A.form_html,A);A.make_active();this.active_node=A},node_changed:function(A){this.has_changes=true;if(this.active_node==A){this.activate_node(A)}}});function prebuild_node(H,F,K){var E=$("<div class='toolForm toolFormInCanvas'></div>");var C=new Node(E);C.type=H;if(H=="tool"){C.tool_id=K}var J=$("<div class='toolFormTitle unselectable'>"+F+"</div>");E.append(J);E.css("left",$(window).scrollLeft()+20);E.css("top",$(window).scrollTop()+20);var I=$("<div class='toolFormBody'></div>");var D="<div><img height='16' align='middle' src='../images/loading_small_white_bg.gif'/> loading tool info...</div>";I.append(D);C.form_html=D;E.append(I);var G=$("<div class='buttons' style='float: right;'></div>");G.append($("<img src='../images/delete_icon.png' />").click(function(L){C.destroy()}).hover(function(){$(this).attr("src","../images/delete_icon_dark.png")},function(){$(this).attr("src","../images/delete_icon.png")}));zmax=$("#canvas-container").data("zmax");if(!zmax){zmax=0}E.css("zIndex",zmax+1);$("#canvas-container").data("zmax",zmax+1);E.appendTo("#canvas-container");var B=$("#canvas-container").position();E.css({left:(-B.left)+10,top:(-B.top)+10});var A=E.width();G.prependTo(J);A+=(G.width()+10);E.css("width",A);$(E).draggable({cursor:"move",scrollPanel:true,panel:$("#canvas-container"),scrollSensitivity:10,scrollSpeed:20,click:function(M,L){zmax=$("#canvas-container").data("zmax");$(this).css("zIndex",zmax+1);$("#canvas-container").data("zmax",zmax+1);workflow.activate_node(C)},start:function(M,L){workflow.activate_node(C);$(this).css("z-index",$("#canvas-container").data("zmax")+1000)},drag:function(M,L){$(this).find(".terminal").each(function(){this.terminal.redraw()})},stop:function(M,L){zmax=$("#canvas-container").data("zmax");$(this).css("zIndex",zmax+1);$("#canvas-container").data("zmax",zmax+1);$(this).find(".terminal").each(function(){this.terminal.redraw()});workflow.node_changed(this)}});return C}var ext_to_type=null;var type_to_type=null;function issubtype(B,A){B=ext_to_type[B];A=ext_to_type[A];return(A in type_to_type[B])}function populate_datatype_info(A){ext_to_type=A.ext_to_class_name;type_to_type=A.class_to_classes}; 
  • templates/workflow/editor.mako

    r1446 r1479  
    1515<%def name="javascripts()"> 
    1616     
    17     ## ${parent.javascripts()} 
    18  
     17    ${parent.javascripts()} 
     18     
     19    <!--[if IE]> 
     20    <script type='text/javascript' src="/static/scripts/excanvas.js"> </script> 
     21    <![endif]--> 
    1922    <script type='text/javascript' src="/static/scripts/jquery.js"> </script> 
    2023    <script type='text/javascript' src="/static/scripts/jquery.ui.js"> </script> 
     
    2427    <script type='text/javascript' src="/static/scripts/jquery.json.js"> </script> 
    2528 
    26     <script type='text/javascript'> 
    27     /* Dialog and menu handling tools to be moved to galaxy.layout.js */ 
    28      
    29     function hide_modal() { 
    30         $(".dialog-box-container" ).fadeOut( function() { $("#overlay").hide(); } ); 
    31     }; 
    32      
    33     function show_modal( title, body, buttons, extra_buttons ) { 
    34         $( ".dialog-box" ).find( ".title" ).html( title ); 
    35         var b = $( ".dialog-box" ).find( ".buttons" ).html( "" ); 
    36         if ( buttons ) { 
    37             $.each( buttons, function( name, value ) { 
    38                 b.append( $( '<button/>' ).text( name ).click( value ) ); 
    39                 b.append( " " ); 
    40             }); 
    41             b.show(); 
    42         } else { 
    43             b.hide(); 
    44         } 
    45         var b = $( ".dialog-box" ).find( ".extra_buttons" ).html( "" ); 
    46         if ( extra_buttons ) { 
    47             $.each( extra_buttons, function( name, value ) { 
    48                 b.append( $( '<button/>' ).text( name ).click( value ) ); 
    49                 b.append( " " ); 
    50             }); 
    51             b.show(); 
    52         } else { 
    53             b.hide(); 
    54         } 
    55         if ( body == "progress" ) { 
    56             body = $( "<img src='${h.url_for('/static/images/yui/rel_interstitial_loading.gif')}'/>" ); 
    57         } 
    58         $( ".dialog-box" ).find( ".body" ).html( body ); 
    59         if ( ! $(".dialog-box-container").is( ":visible" ) ) { 
    60             $("#overlay").show(); 
    61             $(".dialog-box-container").fadeIn() 
    62         } 
    63     }; 
    64     </script> 
    65      
    6629    <script type='text/javascript' src="/static/scripts/galaxy.workflow_editor.canvas.js"> </script> 
    6730     
     
    7134        // Initialize workflow state 
    7235        reset(); 
    73         // Shim (the background of the editor area) causes loss of focus 
    74         // $("#shim").click( workflow.clear_active_node ).hoverIntent( { 
    75         //     over: function () { $("div.toolForm").fadeTo( "fast", 0.7 ) }, 
    76         //     out: function () { $("div.toolForm").fadeTo( "fast", 1.0 ) }, 
    77         //     interval: 300 
    78         // }); 
    7936        // Load the datatype info 
    80         $.getJSON( "${h.url_for( action='get_datatypes' )}", function( data ) { 
    81             populate_datatype_info( data ); 
    82             // Load workflow definition 
    83             $.ajax( { 
    84                 url: "${h.url_for( action='load_workflow' )}", 
    85                 data: { id: "${trans.security.encode_id( workflow_id )}", "_": "true" }, 
    86                 dataType: 'json', 
    87                 success: function( data ) { 
    88                      reset(); 
    89                      workflow.from_simple( data ); 
    90                      workflow.has_changes = false; 
    91                      scroll_to_nodes(); 
    92                      hide_modal(); 
    93                  }, 
    94                  beforeSubmit: function( data ) { 
    95                      show_modal( "Loading workflow", "progress" ); 
    96                  } 
    97             }); 
     37        $.ajax( { 
     38            url: "${h.url_for( action='get_datatypes' )}", 
     39            dataType: "json", 
     40            cache: false, 
     41            success: function( data ) { 
     42                populate_datatype_info( data ); 
     43                // Load workflow definition 
     44                $.ajax( { 
     45                    url: "${h.url_for( action='load_workflow' )}", 
     46                    data: { id: "${trans.security.encode_id( workflow_id )}", "_": "true" }, 
     47                    dataType: 'json', 
     48                    cache: false, 
     49                    success: function( data ) { 
     50                         reset(); 
     51                         workflow.from_simple( data ); 
     52                         workflow.has_changes = false; 
     53                         scroll_to_nodes(); 
     54                         hide_modal(); 
     55                     }, 
     56                     beforeSubmit: function( data ) { 
     57                         show_modal( "Loading workflow", "progress" ); 
     58                     } 
     59                }); 
     60            } 
    9861        }); 
    9962         
    10063        $(document).ajaxError( function ( e, x ) { 
    101             // $("#error-display").empty() 
    102             //     .append( $("<div/>").html( x.responseText ) ) 
    103             //     .append( $("<div><a>close</a></div>" ).click( function() { $("#error-display").hide(); } ) ) 
    104             //     .show();  
    10564            show_modal( "Server error", x.responseText, { "Ignore error" : hide_modal } ); 
    10665            return false; 
     
    273232                            } 
    274233                        }, { 
    275                             "Don't Save": do_close, 
     234                            "Don't Save": do_close 
    276235                        } ); 
    277236        } else { 
     
    411370    } 
    412371     
    413     #error-display { 
    414         display: none; 
    415         position: fixed; 
    416         top: 5%; left: 5%; width: 90%; height: 90%; 
    417         border: solid red 10px; 
    418         background: #FFDDDD; 
    419         z-index: 50000; 
    420         overflow: auto; 
    421     } 
    422      
    423372    canvas { position: absolute; z-index: 10; }  
    424373    canvas.dragging { position: absolute; z-index: 1000; } 
    425     .input-terminal { width: 12px; height: 12px; background: url(${h.url_for('/static/style/workflow_circle_open.png')}); position: absolute; bottom: 0; left: -16px; z-index: 1500; } 
    426     .output-terminal { width: 12px; height: 12px; background: url(${h.url_for('/static/style/workflow_circle_open.png')}); position: absolute; bottom: 0; right: -16px; z-index: 1500; } 
     374    .input-terminal { width: 12px; height: 12px; background: url(${h.url_for('/static/style/workflow_circle_open.png')}); position: absolute; top: 0; left: -16px; z-index: 1500; } 
     375    .output-terminal { width: 12px; height: 12px; background: url(${h.url_for('/static/style/workflow_circle_open.png')}); position: absolute; top: 0; right: -16px; z-index: 1500; } 
    427376    .drag-terminal { width: 12px; height: 12px; background: url(${h.url_for('/static/style/workflow_circle_drag.png')}); position: absolute; z-index: 1500; } 
    428377    .input-terminal-active { background: url(${h.url_for('/static/style/workflow_circle_green.png')}); } 
     
    505454    </style> 
    506455</%def> 
    507          
    508 <div id="error-display"></div> 
    509456 
    510457<div id="overlay"> 
    511458    ## Need a table here for centering in IE6 
    512459    <table class="dialog-box-container" border="0" cellpadding="0" cellspacing="0"><tr><td> 
    513     <div style="position: relative;"> 
     460    <div class="dialog-box-wrapper"> 
    514461        <div class="dialog-box"> 
    515462            <div class="unified-panel-header"> 
     
    523470            </div> 
    524471        </div> 
    525         <div class="dialog-box-underlay"></div> 
    526472    </div> 
    527473    </td></tr></table> 
     
    559505                                        ${tool.description.replace( '[[', '<a id="link-${tool.id}" href="javascript:add_node_for_tool( ${tool.id} )">' % tool.id ).replace( "]]", "</a>" )} 
    560506                                    %elif tool.name: 
    561                                         <a id="link-${tool.id}" href="javascript:add_node_for_tool( '${tool.id}', '${tool.name}' )">${tool.name}</a> ${tool.description} 
     507                                        <a id="link-${tool.id}" href="#" onclick="add_node_for_tool( '${tool.id}', '${tool.name}' )">${tool.name}</a> ${tool.description} 
    562508                                    %else: 
    563                                         <a id="link-${tool.id}" href="javascript:add_node_for_tool( '${tool.id}', '${tool.name}' )">${tool.description}</a> 
     509                                        <a id="link-${tool.id}" href="#" onclick="add_node_for_tool( '${tool.id}', '${tool.name}' )">${tool.description}</a> 
    564510                                    %endif 
    565511                                </div> 
     
    589535                <div class="toolSectionBg"> 
    590536                    <div class="toolTitle"> 
    591                         <a href="javascript:add_node_for_module( 'data_input', 'Input Dataset' )">Input dataset</a> 
     537                        <a href="#" onclick="add_node_for_module( 'data_input', 'Input Dataset' )">Input dataset</a> 
    592538                    </div> 
    593539                </div> 
  • templates/workflow/index.mako

    r1438 r1479  
    2222%endif 
    2323 
    24 <div> 
    25     <div style="float: right;"> 
    26         <a class="action-button" href="${h.url_for( action='create' )}"> 
    27             <img src="${h.url_for('/static/images/silk/add.png')}" /> 
    28             <span>Add a new workflow</span> 
    29         </a> 
    30     </div> 
    31     <h2>Your workflows</h2> 
     24<h2>Your workflows</h2> 
     25 
     26<div style="float: right; margin-top: -2.5em;"> 
     27    <a class="action-button" href="${h.url_for( action='create' )}"> 
     28        <img src="${h.url_for('/static/images/silk/add.png')}" /> 
     29        <span>Add a new workflow</span> 
     30    </a> 
    3231</div> 
    33  
     32   
    3433%if workflows: 
    3534    <table class="colored" border="0" cellspacing="0" cellpadding="0" width="100%">