• Howdy, Freund! Du scheinst neu hier zu sein. Warum erstellst du dir nicht einen Forenaccount, um mitdiskutieren zu können? Du kannst dich hier registrieren.
    Du hast schon einen Forenaccount? Dann kannst du dich hier einloggen. Viel Spaß!

    Was denkst du zum Beispiel über diese Themen?

Beta: The West Window Manager

forestking

Howdy und frohe Ostern,

hier also das im Contestthread angekündigte Greasemonkey-Skript "The West Window Manager". Seit geraumer Zeit haben mich die The West Fenster gestört, die beim Öffnen alle übereinander liegen und man so schnell den Überblick verliert was alles offen ist. Dieses Skript mächte abhilfe schaffen in dem es alle offenen Fenster auflistet und mit einem einfachen Klick nach vorne bringt.
Schaut es euch doch am besten selber an. Hier der Download-Link: (automatische Updates)The West Window Manager

Screenshot:

Screenshot.jpg



Das Skript ist noch im Betastatus, da ich vorhabe noch einige Sachen zu ändern und neue Features einzubauen. Andere Entwickler sind natürlich herzlich eingeladen dabei zu helfen :) . Den Quelltext dazu gibt es hier:
Code:
// ==UserScript==
// @name            TheWestWindowManager
// @description        Lists all "The West"-windows which are currently opened and brings one to top by clicking on the link.
// @namespace        forestking
// @include http://*.the-west.*
// @exclude http://*.the-west.de/forum*
// @exclude http://forum.the-west.*
// ==/UserScript==


function WindowObj(style, name, id){
    this.style = style;
    this.name = name;
    this.id = id;
}

function openMenu(e){
    var theTarget = e.target ? e.target : e.srcElement;

    if (theTarget.className == "window") {

        resetMenu();

        var windows = getWindows();
        
        for (var i = 0; i < windows.length; i++) {
            var link = document.createElement("a");
            link.href = "#";
            link.addEventListener('click', bringToTop, false);
            link.title = windows[i].name;
            
            var text = document.createTextNode(".");
            var tr = document.createElement("tr");
            var td = document.createElement("td");
            var td = document.createElement("td");
            var div2 = document.createElement("div");
            
            div2.style.position = "absolute";
            div2.style.left = "-16px";
            div2.style.clip = "rect(0px, 142px, 100px, 18px)";
            
            var img = document.createElement("img");
            img.id = windows[i].id + "-Link";
            var strArray = windows[i].name.split("_");
            var imgValue = strArray[0];
            
            if (imgValue == "motivation") 
                imgValue = "work";
            else {
                if (strArray.length > 1 && imgValue != "reports") {
                    for (var j = 1; j < strArray.length; j++) {
                        if (strArray[j] == "employer") 
                            break;
                        if (isNaN((strArray[j]))) {
                            imgValue = imgValue + "_" + strArray[j];
                        }
                    }
                }
            }
            img.src = "/img.php?type=window_title&value=" + imgValue;
            img.style.marginLeft = '1px';
            img.addEventListener('mouseover', setWindowsTransparent, false);
            img.addEventListener('mouseout', setVisible, false);
            
            link.appendChild(img);
            div2.appendChild(link);
            td.appendChild(div2);
            td.appendChild(text);
            tr.appendChild(td);
            document.getElementById("table").appendChild(tr);
        }
    }
}

function resetMenu(){
    var table = document.getElementById('table');
    while (table.childNodes[0]) {
        table.removeChild(table.childNodes[0]);
    }  
}

function getWindows(){
    var windows = new Array();
    for (var i=0; i<document.getElementById('windows').childNodes.length; i++) {
        var style = document.getElementById('windows').childNodes[i].style;      
        var name = document.getElementById('windows').childNodes[i].id.substr(7);
        var id = document.getElementById('windows').childNodes[i].id;
        
        var win = new WindowObj(style, name, id);
        windows.push(win);
    }
    return windows;
}



// ### Link-Functions ###

function bringToTop(e){
    var e = e ? e : window.event;
    var windowToTop = e.target ? e.target : e.srcElement;
          
    var windowId = windowToTop.id.substring(0, windowToTop.id.lastIndexOf("-"));

    // Window is minimized
    if (document.getElementById(windowId).style.display == "none") {
        document.location.href = "javascript:AjaxWindow.maximize(\'" + windowId.substring(7) + "\');";
    }
    else {
        document.location.href = "javascript:AjaxWindow.bringToTop(document.getElementById(\'" + windowId + "\'));";
    }
}

function minimizeAll(){    
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "1";            
            document.location.href = "javascript:AjaxWindow.toggleSize(\'" + windows[i].name + "\', \'"+ windows[i].name+ "\');"
        }
    }
}

function setTransparent(){
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "0.1";
        }
    }
}

function setVisible(){
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "1";
        }
    }
}

function setWindowsTransparent(e){
    var e = e ? e : window.event;
    var windowMouseover = e.target ? e.target : e.srcElement;

    var windowId = windowMouseover.id.substring(0, windowMouseover.id.lastIndexOf("-"));
    
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "0.1";
        }
    }
    document.getElementById(windowId).style.opacity = '1';
}

function removeNode(e){
    
    var theTarget = e.target ? e.target : e.srcElement;
    if (theTarget.className == "window") {
        var nodeId = theTarget.id + "-Link";
        var node = document.getElementById(nodeId);
        var menu = document.getElementById("table");
        menu.removeChild(node.parentNode.parentNode.parentNode.parentNode);
    }
}

// ### Initialize ###

function init(){
    document.getElementById('workbar_right').style.display = "none";

    var div = document.createElement("div");
    div.id = "contextmenu";
    div.style.display = "block";
    div.style.backgroundColor = "#BEA771";
    div.style.opacity = "0.9";
    div.style.border = "2px solid";
    
    var img = document.createElement("img");
    img.src = "http://forestking5.fo.ohost.de/sonstiges/tw/skripte/WindowManager.jpg";
    img.addEventListener('click', minimizeAll, false);
    img.addEventListener('mouseover', setTransparent, false);
    img.addEventListener('mouseout', setVisible, false);
    
    var table = document.createElement("table");
    table.id = "table";
    table.style.width = "150px";
    table.style.display = "block";
    table.style.borderSpacing = "10px";
    div.appendChild(img);
    div.appendChild(table);
    
    
    var container = document.getElementById("right_menu")
    container.appendChild(div);
    
    
    
    document.getElementById("windows").addEventListener('DOMNodeInserted', openMenu, false);
    document.getElementById("windows").addEventListener('DOMNodeRemoved', removeNode, false);
}
init();


Geplante Änderungen und Features:
  • Mouseover-effekt der Links im Menü: Hebt das Fenster solange hervor
  • Close-Button zu jedem Link im Menü
  • Neuer Button um Fenster zu stapeln

Fehler und Anregungen wie immer hier im Thread.


aktuelle Version 1.2
History:
- Links ersetzt durch Buttons!
- Alte Linknamen können über den Tooltip angesehn werden
- Kompabilität mit Motivation-Skript
- In der rechten Leiste wird nun der WindowManager angezeigt. Die Premium Workbar wurde entfernt.
- Mouseover-effekt der Buttons im Menü: Hebt das Fenster solange hervor
- kleine Performancevorteile

Gruss, forest
 
Zuletzt bearbeitet von einem Moderator:

insert

@dermorpheus: Warum ersetzen, wenn garnichts gegeben ist? ^^
Ist doch viel zu Ressourcen lastig ;)
Einfach ne Reihe if Abfragen, alternativ ne Switch-Funktion.
Oder du nimmst einfach die Bilder, machst die in einen Kasten mit der selben Hintergrundfarbe wie das Bild hat (sodass es aussieht wie ein Rechteck und nicht son halbes Dingen) und tust dann da das Bild rein.
Sprich, du nimmst das Bild, lass den Hintergrund hier jetzt mal #aaeeff sein (ich weiss er ist es nicht), dann machste dem Link die Hintergrundfarbe #aaeeff und tust dann dort das Bild rein:
Code:
<a href="[link]" style="background:#[FARBE];text-decoration:none;">[BILD-LINK]</a>
Hoffe kannst es nachvollziehen ;)
Der Link des Bildes ist überings immer der Titel des Fenster (welchen du ja schon hast) + http://[WELT].the-west.de/img.php?type=window_title&value=[TITLE]

Hoffe es hilft dir ;)

Grüße
 

DeletedUser10539

mh wusste nicht so richtig was er meint. den screen hab ich vorhin ni gesehen. naja hatte wohl ohost mal wieder laggs.

aber hast recht. ne menge abfragen mit der else und dem if kommt besser, als zu replacen. ^^
 

forestking

ah super insert, sowas hab ich gesucht mit den bildern :)

werd ich mir in den nächsten tagen mal angucken :)
 

insert

mh wusste nicht so richtig was er meint. den screen hab ich vorhin ni gesehen. naja hatte wohl ohost mal wieder laggs.

aber hast recht. ne menge abfragen mit der else und dem if kommt besser, als zu replacen. ^^
Eigentlich nur switch ;)
Jop, ist vom Platz her das gleiche, nur halt ressourcenschonender ;)
Bin mir nicht sicher ob dein Beitrag "ironisch" ist oder halt nicht, denn wenn ja, so würdest du jedes mal ca. 40 Sachen replacen welche nur einmal wirklich gegeben sind oder halt - mit der von mir vorgeschlagen Methode, wo zwar 40 Sachen geprüft werden, jedoch nur eine - welche wirklich gegeben ist - durchgeführt wird ;)

@forestking: Kein Problem ;)
 
Zuletzt bearbeitet von einem Moderator:

Sam Peckinpah

Great Job :).
Leider beißt sich's bei mir etwas mit dem Button von Knights Skript.

twwm.png
 

DeletedUser10539

naja eher nicht. ich dachte es geht nur darum, die title der telegramme/berichte ins deutsche zu übersetzen.

wie gesagt, als ich am anfang in den post geschaut habe, sah ich kein bild.

aber jetzt weiss ich ja, das er JEDES MÖGLICHE fenstertitelchen meint.
 

forestking

ich hatte am anfang auch kein screenshot, den hab ich hinterher hinzugefügt.

@Sam: mmh ja, ich fand Knights Button auch nicht so schön^^
bei mir sieht das übrigens anders aus, da streiten sich die skripts wohl drum was zuerst geladen werden soll
unbenanntvk.jpg
 

Knight

Ich werde wohl heute abend noch damit fertig werden, die Kompatibilität an mein Skript anzupassen. Via insertBefore() und Skriptabfrage. Dann werde ich mich mal an die ToDo list machen. Tolles Tool!
 

Sam Peckinpah

hab die Installationsreihenfolge der beiden Skripte getauscht

twwm2.png



besser ;)
 

Knight

Vielleicht sollten wir mal ein Forum aufmachen ^^ würde echt helfen.
 

Knight

TWSmallInventPics Kompatibiblität:

Code:
// ==UserScript==
// @name            TheWestWindowManager
// @description      Lists all "The West"-windows which are currently opened and brings one to top by clicking on the link.
// @namespace        forestking
// @include http://*.the-west.*
// @exclude http://*.the-west.de/forum*
// @exclude http://forum.the-west.*
// ==/UserScript==

function WindowObj(style, name, id){
    this.style = style;
    this.name = name;
    this.id = id;
}

function openMenu(){
    var numberOfWindows = getWindows().length;
    if (numberOfWindows != lastNumberOfWindows) {
        lastNumberOfWindows = numberOfWindows;
        resetMenu();
        
        var windows = getWindows();
        
        for (var i=0; i<windows.length; i++) {
            var link = document.createElement("a");
            link.id = windows[i].id + "-Link";
            link.href = "#";
            link.addEventListener('click', bringToTop, false);
            
            var text = document.createTextNode(windows[i].name);
            var tr = document.createElement("tr");
            var td = document.createElement("td");
                        
            link.appendChild(text);
            td.appendChild(link);
            tr.appendChild(td);
            table.appendChild(tr);
        }
    }
}

function resetMenu(){
    var table = document.getElementById('table');
    while (table.childNodes[0]) {
        table.removeChild(table.childNodes[0]);
    }      
}

function getWindows(){
    var windows = new Array();
    for (var i=0; i<document.getElementById('windows').childNodes.length; i++) {
        var style = document.getElementById('windows').childNodes[i].style;      
        var name = document.getElementById('windows').childNodes[i].id.substr(7);
        var id = document.getElementById('windows').childNodes[i].id;
        
        var win = new WindowObj(style, name, id);
        windows.push(win);
    }
    return windows;
}



// ### Link-Functions ###

function bringToTop(e){
    var e = e ? e : window.event;
    var windowToTop = e.target ? e.target : e.srcElement;
          
    var windowId = windowToTop.id.substring(0, windowToTop.id.lastIndexOf("-"));
    
    // Window is minimized
    if (document.getElementById(windowId).style.display == "none") {
        document.location.href = "javascript:AjaxWindow.maximize(\'" + windowId.substring(7) + "\');";
    }
    else {
        document.location.href = "javascript:AjaxWindow.bringToTop(document.getElementById(\'" + windowId + "\'));";
    }
}

function minimizeAll(){    
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "1";            
            document.location.href = "javascript:AjaxWindow.toggleSize(\'" + windows[i].name + "\', \'"+ windows[i].name+ "\');"
        }
    }
}

function setTransparent(){
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "0.1";
        }
    }
}

function setVisible(){
    var windows = getWindows();

    for (var i=0; i<windows.length; i++){
        if (windows[i].style.display != "none") {
            document.getElementById(windows[i].id).style.opacity = "1";
        }
    }
}


// ### Initialize ###

var lastNumberOfWindows = 0;

var div = document.createElement("div");
div.id = "contextmenu";
div.style.display = "block";
div.style.backgroundColor = "#DFD9C9";
div.style.opacity = "0.9";
div.style.border = "2px solid";

var img = document.createElement("img");
img.src = "http://forestking5.fo.ohost.de/sonstiges/tw/skripte/WindowManager.jpg";
img.addEventListener('click', minimizeAll, false);
img.addEventListener('mouseover', setTransparent, false);
img.addEventListener('mouseout', setVisible, false);

var table = document.createElement("table");
table.id = "table";
table.style.width = "150px";
table.style.display = "block";

div.appendChild(img);
div.appendChild(table);

var abdorment_left = document.getElementById('abdorment_left');
abdorment_left.style.display = "none";

var container = document.getElementById("left_menu")
if(document.getElementById('logo_twsip')) {
   container.insertBefore(div, document.getElementById('logo_twsip'));
} else {
   container.appendChild(div);
}


window.setInterval(openMenu, 100);

€: Teste gerade!

€€: Funktioniert!
 
Zuletzt bearbeitet von einem Moderator:

forestking

so, neue version ist raus. dürfte auch auf anderen servern soweit laufen, habs kurz auf der beta getestet, da wurden dann die englischen buttons angezeigt.

vermutlich habe ich den ein oder anderen spezialfall noch nicht beachtet, bitte melden!

aktuelle Version 1.1
History:
- Links ersetzt durch Buttons!
- Alte Linknamen können über den Tooltip angesehn werden
- Kompabilität mit TWSmallInventPics



und bitte weiterhin wünsche, bugs und kritik äussern! :)
 

Knight

Sieht schon viel besser aus!
Eine kleine Schönheitsverbesserung:
So siehts im Moment aus:
Code:
             img.src = "/img.php?type=window_title&value="+imgValue;
Besser:
Code:
             img.src = "/img.php?type=window_title&value="+imgValue;
             img.style.marginLeft = '1px';

Wie gesagt, nur was kleines.
 

DeletedUser1030

Danke für die schnelle Umsetzung.
 
Zuletzt bearbeitet von einem Moderator:

Töter1.000.000

Goldgräber
hätte mal ne kleine sache zu bemängeln is mehr so perfektion :

der window manager button ist ein paar pixel kürzer als die anderen darüber
(siehst du auch auf dem beispielbild)
 
Oben