MathML / Latex in UIView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Naja, aber ich weiß ja das es mein UIWebView ist, der die Methode dann triggert. Die Methoden mit den -touchesEnded: etc. sind mir ja durchaus bekannt, das trifft mein Problem einfach mal, da es mir (aus meinem Sichtpunkt momentan) nicht möglich ist, rauszufinden, wo die Platzhalter lokalisiert sind. Aber ich habe noch einen Anstoß, den ich leider nicht selber zu Ende denken kann:
    Man kann ja wenn man eine HTML-Datei mit eingebautem MathML in Safari oder ähnlichem öffnet ganz normal mit dem Cursor die Zahlen als Text oder ähnliches markieren. Müsste es nicht möglich sein, dass mit der verwendeten CSS-Datei irgendwie als "Boxen" zu betrachten? Also das eine Zahl eine "Box" ist, ein Bruch eine übergeordnete und so weiter? Die Coordinaten bzw. Touches müssten sich ja mehr oder weniger einfach ermitteln lassen :)
  • scriptedSheep schrieb:

    Und wie verwende ich das dann?

    Du verwendest ein eigenes URL-Schema. Damit ruft der Link Deine App auf und Du kannst in den Link die Informationen, die Du benötigst, einkodieren (z. B. Größe und Position des Kastens).

    scriptedSheep schrieb:

    Hoffe dein Kopf tut nicht zu sehr weh...

    Solange ich nicht gegen die Elektroden komme, geht es.
    „Meine Komplikation hatte eine Komplikation.“
  • Okay, also das mit den onclick handlern geht jetzt, bloß bin ich einfach zu schlecht in JavaScript, ich brauche also etwas hilfe. Ich habe momentan zwei Probleme:
    1. Ich kann ja im Script sagen, dass so ein HTTPRequest ausgeführt werden soll, dann kommt mein UIWebViewDelegate ins Spiel, und zwar die Methode wo der Request, der ja auch mit übergeben wird, gehandelt wird. Aber wie schreibe ich diesen Teil? So ja wohl nicht:

      Quellcode

      1. ... onclick:"XMLHttpRequest.open('GET', url, false)"
      mit meiner mehr oder weniger codierten URL dann, aus der ich die Daten ja wieder auslesen kann
    2. Was eigentlich noch viel wichtiger ist: Wie bekomme ich das Element raus, das geklickt wurde? Also gibt es vielleicht irgendeine JavaScript-Funktion, die mir sage, dass wievielte Element das geklickte in meinem ganzen Quelltext ist? Das würde mir ja schon zum Aufbau einer for-Schleife ausreichen!
    3. Edit: Hilft da eventuell das "target" Attribut? Das wäre dann auf jeden Fall schon mal eine sehr große Hilfe, da ich ein Array mit allen enthaltenen tokens habe und dann ja einfach so was wie

      Quellcode

      1. if(url.target == [tokens objectAtIndex:x]){.....}
      machen, oder?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von scriptedSheep ()

  • So, ich habe mir aus Beispielcode mal etwas zusammengebastelt ,bin mir aber gar nicht sicher ob das so geht, wie gesagt ,ich habe keine Ahnung von sowas!

    Quellcode

    1. <script type="text/javascript"> // Function to change the content of t2 function sendRequest(Element e) { var req = new XMLHttpRequest(); var formData = new FormData(); formData.append("element", e); xhr.open("POST", "http://test.com"); xhr.send(formData); } // Function to add event listener to clicked Element function load() { //here I need to find out which element was clicked...how to manage this? el.addEventListener("click", function(){sendRequest(self);}, false); } </script>
    Beim "onclick" Attribut meiner Elemente wird die Funktion "load();" aufgerufen!
    1. Du solltest Dir eine Funktion mit dem Element als Parameter schreiben, die die URL-Aufrufe erledigt:

      Quellcode

      1. ...onclick="callWithElemen(this);"...
      Schau Dir mal jQuery an. Damit kannst Du relativ einfach URL-Requests durchführen-
    2. Du solltest bei jedem relevanten Element das id-Attribut setzen. Außerdem kannst Du in JavaScript die Koordinaten des Elements abfragen:

      Quellcode

      1. function callWithElement(inElement) {
      2. var theX = inElement.style.left;
      3. var theY = inElement.style.top;
      4. ...
      5. }
      Eine Liste der Styleattribute findest Du hier.
    3. Du kannst Deine URLs nach dem Doppelpunkt des Schemas nahezu beliebig aufbauen. Du solltest das Format so wählen, dass Du es leicht auseinandernehmen kannst. Ich würde einen festen Host verwenden. Wenn Deine Element-Id immer eine Zahl ist, kannst Du diese für den Port nehmen. Da kommst Du leicht wieder dran. Alle anderen Werte, die Du übergibst, kannst Du im Query-Teil (Classic-Style) oder im Path-Teil (REST-Style) unterbringen; Beispiele:

      Quellcode

      1. scriptedSheep://myApp:123/?x=100&y=20&width=200&height=20 // Classic-Style
      2. scrptedSheep://myApp:123/100/20/200/20 // REST-Style

    „Meine Komplikation hatte eine Komplikation.“
  • Quellcode

    1. <script type="text/javascript"> // Function to change the content of t2 function sendRequest(Element e) { var req = new XMLHttpRequest(); var formData = new FormData(); formData.append("element", e); xhr.open("POST", "http://test.com"); xhr.send(formData); } // Function to add event listener to clicked Element function load(Element el) { el.addEventListener("click", function(){sendRequest(el);}, false); } </script> <mfrac> <mrow> <mrow> <mo onclick='load(this);'>(</mo> <mn onclick="load(this);">2</mn> <mo onclick="load(this);">&middot;</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mrow><mo>(</mo><mn>3</mn><mo>-</mo><mn>4</mn><mo>)</mo></mrow> </mrow>


    Sieht jetzt bei mir so aus, ich habe das Element jetzt jeweils mit an die Methoden übergeben. Ich bin also, glaube ich fast fertig. Ich habe erstmal als "type" des Request PUT genommen, aber ich weiß nicht so ganz wie ich mir meine URL in JavaScript zusammenbasteln soll, also geht das eventuell so ähnlich wie in PHP oder doch eher (dem Namen nach!) wie in Java?
    Hätte also zwei Varianten:
    1. Quellcode

      1. var url = 'http://myApp:' . element.id . '/otherStuffhere';
      PHP-Style oder
    2. Quellcode

      1. var url = 'http://myApp:' + element.id + '/otherStuffhere';
      Java-Style
  • Aaaalso, ich bin jetzt soweit das ich mir ein passendes JavaScript gebastelt habe und das auch einbinden konnte, die onclick-Handler funktionieren auf jeden Fall, das UIWebView animiert die Zahlen jetzt so toll wenn man drauf klickt...Nur eine Sache ist irgendwie vermurkst, und zwar das mit dem XMLHTTPRequest und der entsprechenden Delegate-Methode des WebViews. EIgentlich war das bei mir so geplant, dass ich einfach ein "GET" an eine gebastelte URL mache, die dann in der Delegate Methode abfange und dann damit rumspiele. Aber irgendwie wird diese besagte Delegate-Methode nur getriggert, wenn ich den HTML-Code der Seite neu laden lasse, nicht nach dem absetzten des Request...Hier mal der Code

    Quellcode

    1. function getEvent (e) {
    2. var event = e || window.event;
    3. if( ! event.target ) {
    4. event.target = event.srcElement
    5. }
    6. var url = "http://url."+event.target.id+"/";
    7. var xhReq = new XMLHttpRequest();
    8. xhReq.open("GET", url, true);
    9. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von scriptedSheep ()

  • Mein eingetragenes Schema heißt "grapher"...Demnach hier dann der aktualisierte JavaScript-Code

    Quellcode

    1. function getEvent (e) {
    2. var event = e || window.event;
    3. if( ! event.target ) {
    4. event.target = event.srcElement
    5. }
    6. var url = "grapher://url."+event.target.id+"/";
    7. var xhReq = new XMLHttpRequest();
    8. xhReq.open("GET", url, true);
    9. xhReq.send();
    10. }
    Alles anzeigen
  • Hier der entsprechende Eintrag, also ja, ich habs gemacht!

    Quellcode

    1. CFBundleURLTypes
    2. CFBundleURLSchemes grapher CFBundleURLName


    EDIT: Ich kann nichts dafür, dass das Bord den Quelltext irgendwie interpretieren will, auch wenn das in [code]-Tags steht! Keiner eine Lösung? Wäre echt wichtig!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von scriptedSheep ()

  • Hehe, also ich hab den gesamte Thread jetzt nicht gelesen, aber für latex ist mal klar, dass du die Distribution brauchst. Die wird nicht ohne grund annähernd gigabyte-größe haben.

    Eleganter gehts bestimmt, aber wenn du eh das webview benutzt und davon ausgehst, dass deine user internetzugang haben, dann könntest als Workaround das matheboard mißbrauchen:

    darin wird dann der LaTeX Ausruck "f(x)=\cos x \int_\pi^x t \cos t dt"

    zu

    http://www.matheboard.de/latex2png/latex2png.php?f(x)=\cosx \int_\pi^x t \cos t dt



    Grüße,

    einheitswurzel