Source: library-d3-svg/js/Tab.js

/**
 * A Tab in the view. Wires together the legend and calls algo's activation functions.
 * @author Adrian Haarbach
 * @class
 * @param {GraphDrawer} algo - Instance of an algorithm. Must have interface methods : init, activate, deactivate
 * @param {Object} p_tab - Jquery tab elector
 */
function Tab(algo,p_tab) {

    var that = this;
    this.algo=algo;

    /**
     * jQuery Objekt des aktuellen Tabs
     * @type Object
     */
    this.tab = p_tab;

    this.initialized = false;
    
    /**
     * Initialisiert das Zeichenfeld
     * @method
     */
    this._init = function() {
        legendeMax = this.tab.find(".Legende");
        legendeMin = this.tab.find(".LegendeMinimized");
        legendeMaxButton = legendeMax.find(".LegendeMin");
        legendeMinButton = legendeMin.find(".LegendeMin");
        tabIntroDialog = this.tab.find(".tabIntroDialog");
        tabChangeWarningDialog = this.tab.find(".tabChangeWarningDialog");
        statusWindow = this.tab.find(".statusWindow");
        this.statusBackup = statusWindow.html();
        this.animateLegende();
//         this.svgOrigin.attr('user-select','none').attr('unselectable','on').on("selectstart.CanvasDrawer",false);
//         this.drawIntervalID = setInterval(function() { algo.drawCanvas(); }, 20);
//         this.needRedraw = true;
        this.openDialogs();
//         this.addRefreshToTabbar();

        //         this.registerEventHandlers();
//         this.needRedraw = true;
        this.minimizeLegend();
        algo.init && algo.init();
        this.initialized=true;
    };
    
    /**
     * when tab is openend
     * @method
     */
    this._activate = function() {
        if(!this.initialized) this.init();
        algo.activate && algo.activate();
    };
    
    /**
     * when tab is closed
     * @method
     */
    this._deactivate = function() {
        algo.deactivate && algo.deactivate();
    };

    /**
     * HTML des Tabs vor dem Öffnen des Tabs
     * @type String
     */
    this.statusBackup = null;
    /**
     * Zeigt an, ob der Tab z.Zt. aktiv ist (ungenutzt)
     * @type Boolean
     */
    this.active = false;
    
    /**
     * jQuery Objekt der maximierten Legende
     * @type Object
     */
    var legendeMax;
    /**
     * jQuery Objekt der minimierten Legende
     * @type Object
     */
    var legendeMin;
    /**
     * jQuery Objekt des "Maximieren" Buttons de Legende im aktuellen Tab
     * @type Object
     */
    var legendeMaxButton;
    /**
     * jQuery Objekt des "Minimieren" Buttons de Legende im aktuellen Tab
     * @type Object
     */
    var legendeMinButton;
    /**
     * jQuery Objekt des Dialogs, der zu Beginn des Tabs gezeigt wird.
     * @type Object
     */
    var tabIntroDialog;
    /**
     * jQuery Objekt des Dialogs, der zu Beginn des Tabs gezeigt wird.
     * @type Object
     */
    var tabChangeWarningDialog;
    /**
     * jQuery Objekt des statusFensters des Tabs
     * @type Object
     */
    var statusWindow;
    
    
    /**
     * Entfernt Intervalle und Event Handler für die den Canvas Drawer
     * @method
     */
//     this.destroyCanvasDrawer = function() {
//         legendeMaxButton.off("click.CanvasDrawer");
//         legendeMinButton.off("click.CanvasDrawer");
// //         this.svgOrigin.selectAll("*").remove();
// //         this.canvas.off("selectstart.CanvasDrawer");
// //         window.clearInterval(this.drawIntervalID);
//         tabIntroDialog.dialog("destroy");
// //         if($("body").data("graph")) {
// // //             $("body").data("graph").restoreLayout();
// //         }
//         this.tab.find(".statusWindow").html(this.statusBackup);
//         this.removeRefreshFromTabbar();
//     };

    /**
     * Minimiert die Legende und positioniert sie korrekt.
     * @method
     */
    this.minimizeLegend = function() {
        legendeMax.hide();
        legendeMin.show();
    };

    /**
     * Maximiert die Legende und positioniert sie korrekt.
     * @method
     */
    this.maximizeLegend = function() {
        legendeMax.show();
        legendeMin.hide();
    };
    
    /**
     * Öffnet die Dialoge, die zu dem Tab gehören: Eingangsdialog und mglw. 
     * Abfrage, ob man den Tab wirklich verlassen möchte.
     * @method
     */
    this.openDialogs = function() {
        var currentTab = this.tab;      // Closure
        var minW = 150;
        if(this.tab.attr("id") == "tab_tf2") {
            minW = 570;
        }
        $(function() {
            tabIntroDialog.dialog({
                dialogClass: "shadow",
                resizable: false,
                draggable: false,
                minWidth: minW,
                position: { my: "center center", at: "center center", of: currentTab},
                modal: false,
                autoOpen: false,
                beforeClose: function(event, ui) {
                    tabIntroDialog.effect('transfer', {
                        to: statusWindow
                    }, 500, null);
                    return true;
                },
                buttons: {
                    Ok: function() {$(this).dialog( "close" );}
                }
            });
        });

        if(!tabIntroDialog.data("wasOpen")) {
            tabIntroDialog.dialog("open");
            tabIntroDialog.data("wasOpen",true);
        }
        // Tabwechsel Warndialog
        if(tabChangeWarningDialog) {
            $(function() {
                tabChangeWarningDialog.dialog({
                    autoOpen: false,
                    resizable: false,
                    modal: true,
                    buttons: {
                        "In diesem Tab bleiben": function() {
                            $("#tabs").removeData("requestedTab");
                            $("#tabs").removeData("tabChangeDialogOpen");
                            $(this).dialog( "close" );
                        },
                        "Tab wechseln": function() {
                            $(this).dialog( "close" );
                            var newTabID =$("#tabs").data("requestedTab");
                            $("#tabs").removeData("requestedTab");
                            $("#tabs").tabs("option", "active", newTabID);
                            $("#tabs").removeData("tabChangeDialogOpen");
                        }   
                    }
                });
            });
        }
    };
    
    /**
     * Animiert die Legende: Buttons zum maximieren / minimieren, Icons in den
     * Buttons, Tooltipp für Vorgängerkante
     * @method
     */
    this.animateLegende = function() {
        legendeMaxButton.button({icons: {primary: "ui-icon-minus"},text: false});
        legendeMinButton.button({icons: {primary: "ui-icon-plus"},text: false});
        this.maximizeLegend();
        legendeMaxButton.on("click.CanvasDrawer",this.minimizeLegend);
        legendeMinButton.on("click.CanvasDrawer",this.maximizeLegend);
        $("tr.LegendeZeileClickable").tooltip();
    };
    
//     /**
//      * Fügt ein "Neu laden" Icon zum Tab hinzu, aktiviert es
//      * @method
//      */
//     this.addRefreshToTabbar = function() {
//         $("#tabs").find(".ui-tabs-active").append('<span class="ui-icon ui-icon-refresh" style="display:inline-block">Klicke auf den Titel des Tabs, um ihn zurückzusetzen.</span>');
//         $("#tabs").find(".ui-tabs-active").attr("title","Klicke auf den Titel des Tabs, um ihn zurückzusetzen.").tooltip();
//         $("#tabs").tabs("refresh");
//         $("#tabs").find(".ui-tabs-active").find("span").on("click.Refresh",function(e) {
//             e.stopPropagation();
//             algo.refresh();
//         });
//     };
    
//     /**
//      * Entfernt das neu laden Icon und die Funktionalität
//      * @method
//      */
//     this.removeRefreshFromTabbar = function() {
//         $("#tabs").find(".ui-tabs-active").tooltip().tooltip("destroy");
//         $("#tabs").find(".ui-tabs-active").find("span").off(".Refresh");
//         $("#tabs").find(".ui-icon-refresh").remove();
//         $("#tabs").tabs("refresh");
//     };
}

Tab.prototype.init = function(){
    this._init();
}

Tab.prototype.activate = function(){
    this._activate();
}

Tab.prototype.deactivate = function(){
    this._deactivate();
}