forum.hcrs.at Foren-Übersicht forum.hcrs.at
Freier Gedankenaustausch zur
HCRS Home Labor Page

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Greasemonkey Script

 
Neues Thema eröffnen   Neue Antwort erstellen    forum.hcrs.at Foren-Übersicht -> Allgemeines
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sswjs



Anmeldedatum: 21.09.2008
Beiträge: 1133

BeitragVerfasst am: Di Jun 22, 2010 5:04 pm    Titel: Greasemonkey Script Antworten mit Zitat

Moin,

da ich mehrmals nach dem Greasemonkey - Script gefragt wurde und ich jetzt matheboard.de als Formelgenerator benutze, hier das Script:

http://www.file-upload.net/download-2618901/matheboard.user.js.html

sswjs
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sswjs



Anmeldedatum: 21.09.2008
Beiträge: 1133

BeitragVerfasst am: Do Jun 24, 2010 6:40 am    Titel: Antworten mit Zitat

Moin,

habe gestern bei einem Freund festgestellt, warum die Anfragen nach dem Script für Greasemonkey kamen.

Ich hatte es mit samt Script für Latex von hier http://thewe.net/tex/ direkt installiert.

sswjs
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sswjs



Anmeldedatum: 21.09.2008
Beiträge: 1133

BeitragVerfasst am: So Nov 07, 2010 9:49 pm    Titel: Antworten mit Zitat

Moin,

das erste Script-File wurde schon gelöscht. Hier das Neue:

http://www.file-upload.net/download-2954293/matheboard.user.js.html

sswjs
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Steve



Anmeldedatum: 20.12.2004
Beiträge: 536

BeitragVerfasst am: Mo Nov 15, 2010 10:57 pm    Titel: Antworten mit Zitat

Hi SSWJS,

ich weiß nicht, woran es lag, aber bei mir haben alle Versuche mit Greasemonkey nicht fruchten wollen.
Ich habe aber einen Verdacht: Ich verwende Noscript, welches vermutlich Greasemonkey in den Käfig sperrt. Ist mir aber das wichtigere tool von beiden.

-Schulterzuck- Sad
_________________
Grüße, Stefan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sswjs



Anmeldedatum: 21.09.2008
Beiträge: 1133

BeitragVerfasst am: Mo Nov 15, 2010 11:17 pm    Titel: Antworten mit Zitat

Moin,

Steve? Ich hab auch NoScript, AdBlock plus, Greasemonkey und mein Script drin.

Alles funzt bestens...
sswjs
PS.: Ich hab keine Ahnung ob's auch in der Windowsvariante von Firefox funzt, aber unter Ubuntu macht's keine Probleme.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sswjs



Anmeldedatum: 21.09.2008
Beiträge: 1133

BeitragVerfasst am: Mi Dez 22, 2010 11:39 am    Titel: Antworten mit Zitat

Moin,

da es schon wieder Anfragen nach dem Script gab, hier mal die Copy&Paste Version:

Code:
// ==UserScript==
// @name           Matheboard
// @namespace      Matheboard
// @description    Matheboard
// @include        *
// ==/UserScript==

// regexp for splitting a matched string into parts
var splitRegexp = /([\s\S]*?)\[;([\s\S]*?);\]([\s\S]*)/m;

// regexp for quickly testing if a text node contains our format
var matchRegexp = /\[;([\s\S]*?);\]/m;

// regexp for finding all TeX formulas in textContent
var matchRegexpGlobal = /\[;([\s\S]*?);\]/mg;

// signature to be typed when clicking ctrl-shift-;
var signature = '[To see formulas: http://thewe.net/tex]';

// create an image element for a given expression
function createTeXifiedImageElement(expr) {
    var imgElement = document.createElement('img');
    //imgElement.src = "http://thewe.net/tex/" + expr;
    imgElement.src = "http://www.matheboard.de/latex2png/latex2png.php?" + expr; // BS 20081227 - besser rendern mit Matheboard.de...
    imgElement.title = expr;
    imgElement.alt = "[;" + expr + ";]";
    imgElement.style.display = "inline";
    imgElement.addEventListener('dblclick', unTeXifyImage, false);
    return imgElement;
}

// TeXifies a range
function TeXifyRange(startNode, startNodeOpen, endNode, endNodeClose) {
    if (startNode == endNode) {
        var textNode = startNode;
       
        if (textNode.parentNode.nodeName == 'TEXTAREA')
            return;
       
        // infinite loop. it will break when there's nothing else matching the regexp.
        while (textNode.nodeValue.match(matchRegexp)) {
            textNodeSplit = splitRegexp.exec(textNode.nodeValue);
           
            // it matched. clear the text node and create the three
            // nodes before it - text, img, text (according to regexp match).
            // NOTE: the reason we clear the node value instead of using it for
            // the right part of the expression it to keep the cursor located
            // at the end of the node if the cursor is on it
            textNode.nodeValue = '';
           
            // create the text node that should be after the image and insert it
            var rightHalfNode = document.createTextNode(textNodeSplit[3]);
            textNode.parentNode.insertBefore(rightHalfNode, textNode);       

            // create the image and insert it
            var imgElement = createTeXifiedImageElement(textNodeSplit[2]);
            textNode.parentNode.insertBefore(imgElement, rightHalfNode);       

            // create the text node that should be before the image and insert it
            textNode.parentNode.insertBefore(document.createTextNode(textNodeSplit[1]), imgElement);
           
            // set the new textNode to be what was left. maybe there's more
            // to match (for example "[;A = B;] thus [;A \subseteq B;]")
            textNode = rightHalfNode;
        }   
    }
    else {
        // if the common ancestor is not the direct parent, stop immediately
        if (startNode.parentNode != endNode.parentNode)
            return;
   
        // verify that the only tags in the range are <br> and <wbr>
        var node;
       
        for (node = startNode; node != endNode; node = node.nextSibling)
          if (node.nodeType == 1 && node.tagName != 'BR' && node.tagName != 'WBR')
                break;
               
        if (node != endNode)
            return;

        // create the range and TeXify it                       
        var texRange = document.createRange();
        texRange.setStart(startNode, startNodeOpen);
        texRange.setEnd(endNode, endNodeClose);
      
        var tex = texRange.toString();
        tex = tex.substring(2, tex.length - 2);
       
        texRange.detach();
       
        var deleteRange = document.createRange();
        deleteRange.setStart(startNode, startNodeOpen);
        deleteRange.setEndBefore(endNode);
       
        deleteRange.deleteContents();
        deleteRange.insertNode(createTeXifiedImageElement(tex));
       
        var lastString = endNode.nodeValue.substring(endNodeClose);
        endNode.parentNode.insertBefore(document.createTextNode(lastString), endNode);
        endNode.nodeValue = '';
       
        deleteRange.detach();
    }
}

// translates a list of indexes in a node's textContent into node/offset
// pairs matching to the actual DOM tree
textContentData = function(baseNode, relevantIndexes, riIndex, index, result) {
    var relIndex = relevantIndexes[riIndex];
   
    // go through all children and check their textContent. in the meanwhile
    // remember which index we are currently in, and then recurse until finding
    // the actual node which contains the relevant index
   
    // implementation is based on the definition of textContent on
    // http://developer.mozilla.org/en/docs/DOM:element.textContent#Notes
    for (var child = baseNode.firstChild; child != null && riIndex < relevantIndexes.length; child = child.nextSibling) {
        if (child.nodeType == 7 || child.nodeType == 8)
            continue;
           
        var newIndex = index + child.textContent.length;
       
        while (newIndex > relIndex) {
            if (child.nodeType == 3 || child.nodeType == 4) {
                result.push({node: child, offset: relIndex - index});
                riIndex++;
            }
            else {
                result = textContentData(child, relevantIndexes, riIndex, index, result);
                riIndex = result.length;
            }

            if (riIndex >= relevantIndexes.length)
                break;

            relIndex = relevantIndexes[riIndex];
        }
       
        index = newIndex;
    }
   
    return result;
}

// TeXify a single window/frame
function TeXAFrame(win) {
    try {
        // register our keydown listener if this is a new frame
        if (!win.document.body.hasAttribute('_texified')) {
            win.document.addEventListener('keydown', onKeyDown, true);
            win.document.body.setAttribute('_texified', true);
        }
   
        var text = win.document.body.textContent;
        var relevantIndexes = [];
       
        // calculate the relevant indexes to search for afterwards
        // (the indexes of [; and ;])
        while ((theMatch = matchRegexpGlobal.exec(text)) != null) {
            relevantIndexes.push(theMatch.index);
            relevantIndexes.push(theMatch.index + theMatch[0].length - 1);
        }
       
        // get the mapping from these indexes to nodes/offset pairs
        var data = textContentData(win.document.body, relevantIndexes, 0, 0, []);
       
        for (var i = 0; i < data.length; i += 2)
            TeXifyRange(data[i].node, data[i].offset, data[i+1].node, data[i+1].offset + 1);
      
       // BS 20081227
      // add listeners to images. these may have been lost during saves in Google Docs
      addunTeXifyImageEventListeners(win);
    }
    catch (e) { // security exception
    }
       
    // do the same for all frames in this window/frame
    for (var i = 0, n = win.frames.length; i < n; i++)
        TeXAFrame(win.frames[i]);
}

// TeXify a node that was previously unTeXified
function reTeXifyImage(event) {
    //var text = event.currentTarget.innerHTML;
    var text = event.currentTarget.textContent;  // BS 20081227 - fix bug where certain HTML escape chars are not handled correct
    var imgElement = createTeXifiedImageElement(text.substring(1, text.length - 1));
    event.currentTarget.parentNode.replaceChild(imgElement, event.currentTarget);   
}

// switch an image that was TeXified back to text.
// removes the ;s so that it doesn't get re-TeXified immediately
// double-click will re-TeXify is, and also adding the ;s back will do the job.
function unTeXifyImage(event) {
    var imgElement = event.currentTarget;
   
    var newSpanElement = document.createElement('span');
    newSpanElement.appendChild(document.createTextNode('[' + imgElement.title + ']'));
    newSpanElement.addEventListener('dblclick', reTeXifyImage, false);
   
    var newOuterSpanElement = document.createElement('span');
    newOuterSpanElement.appendChild(newSpanElement);

    imgElement.parentNode.replaceChild(newOuterSpanElement, imgElement);   
}

// simulate the user typing a string
function simulateTextTyping(target, str) {
    for (var i = 0; i < str.length; i++) {
        var keyEvent = document.createEvent("KeyboardEvent");
        keyEvent.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, str.charCodeAt(i));
        target.dispatchEvent(keyEvent);
    }
}

// handle the keydown event -- if the key was ctrl-shift-; write our signature
function onKeyDown(event) {
    // ctrl-shift-;
    if (event.keyCode == 59 && (event.ctrlKey || event.metaKey) && event.shiftKey) {
        // we use typing simulation in order to it to work not only in "regular" html components but also in
        // high-tech javascript hacks like gmail and hotmail
        simulateTextTyping(event.target, signature);
    }
}

// TeXifies the world
function TeXTheWorld() {
    var startTime = new Date();
    TeXAFrame(window.top);
}

 // BS 20081227
// adds Event Listener to images
function addunTeXifyImageEventListeners(win) {
   
   var allDivs = win.document.evaluate(
      "//img[contains(@alt, '[;')]",
      win.document,
      null,
      XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
      null);
   
   for (var i = 0; i < allDivs.snapshotLength; i++)
      allDivs.snapshotItem(i).addEventListener('dblclick', unTeXifyImage, false);

}

if (self == top) { // run only in the top frame. we do our own frame parsing
    TeXTheWorld(); // since we must handle dynamically created frames
    setInterval(TeXTheWorld, 3000);
}
     



Grüße
sswjs
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    forum.hcrs.at Foren-Übersicht -> Allgemeines Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht teilnehmen.


CrackerTracker © 2004 - 2017 CBACK.de

Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de