TIM-JYU / TIM

TIM (The Interactive Material) is an open-source cloud-based platform for creating interactive learning documents.
https://tim.education/view/about/en-US
MIT License
14 stars 4 forks source link

Stack-plugin TIMiin #1294

Open dezhidki opened 5 years ago

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 21, 2018, 15:17

Stack plugin TIMiin. Asiasta lisätietoa esim:

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 22, 2018, 21:55

Kannattaisiko:

https://cdnjs.cloudflare.com/ajax/libs/jsxgraph/0.99.7/jsxgraphcore.js https://cdnjs.cloudflare.com/ajax/libs/jsxgraph/0.99.7/jsxgraph.css

hakea TIMin palveltavaksi?

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 23, 2018, 13:28

marked the task debug myös konsoliin as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 08:49

marked the task template(ja) stack-pluginille as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 08:50

marked the task testattava että matriisi toimii as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 08:50

marked the task toimimaan myös jos vektoria l iikutta jsxgraphissa as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 08:50

marked the task parametrit [[jsxgraph]] .js tiedostojen sijainneille as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 19:00

Stack-kontin käynnistymisen ongelma oli se, että jos on PHPStorm kuuntelemassa debuggauksia, niin install.php:n käynistyessä se jotekin ottaa sen kiinni ja skripti ei voi jatkua. Ongelma korjaantui kun ottaa php kuuntelun pois siksi aikaa kun kontit käynistyvät. Ingored files lista ei auttanut?

EDIT: otin DockerfileDebug:ist pois xdebugin asetukset ja asetan ne vasta kun install.php on ajettu. Hyvää on tässä sekin, että nyt konekohtaiset asetukset eivät ole dockerfilessa, vaan /var/www/api/entrypoint_install_and_run.sh joka voidaan siirtää vaikka TIMin puolelle kun se mountataan dockerin käynnistyessä.

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 23:06

marked the task kokeile inputkenttien nimeäminen jsx as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 23:06

marked the task Maxima images as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 23:06

marked the task jos ei ole <div id="div1"> ei toimi [[jsxgraph]] as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 23:07

marked the task mieti miten automaattisesti saisi tehtävän id:n esitettäväksi diviksi as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 25, 2018, 23:07

marked the task suora set ja get client-päähän jsx as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 02:31

marked the task buttonin paikka niin ettei hypi as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 02:32

marked the task Stack-sisällön tyylit niin, että ei näy taulukoissa oletuksena raameja ja himpiun kokonaisuudessaan sisenntystä as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 02:33

marked the task our last answer tulee 2x kun vastaa as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 02:34

marked the task jos käyttää Show question, niin tulee aina yksi tyhjä vastaus, estettävä as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 02:35

marked the task parametrit kuvien sijainneille as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 09:56

marked the task buttonin paikka niin ettei hypi as incomplete

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 09:56

buttoni väörin sinakin oddeven esimerkissä

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 27, 2018, 16:24

marked the task buttonin paikka niin ettei hypi as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 28, 2018, 09:50

marked the task min/max-height, ehkä kaikille plugineille, scrollable as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Dec 28, 2018, 19:44

marked the task kysymyksen YAML yamlina as completed

dezhidki commented 5 years ago

In GitLab by @vesal on Jan 3, 2019, 11:10

Eli tarkoitus on että kun Stack-tehtävän question_html-kohdassa lukee esim:

question_html: |-
  [[jsxgraphapi  width="600px" inputs='ans1']]
      var board = JXG.JSXGraph.initBoard(divid, {boundingbox: [-10, 5, 10, -5], axis: true, showCopyright: false});
      stack_jxg.bind_var('ans1', {on: changeF2});
      var f = board.jc.snippet('{#fx#}', true, 'x', true); 
      board.create('functiongraph', [f,-10,10]);

      var uf2 = null;
      changeF2(JSON.stringify(initVars.values.ans1 || ''));

      function changeF2(s) {
        try { 
         uf = JSON.parse(s);
         if ( uf2 ) board.removeObject(uf2);
         uf2 = null;
         var f2 = board.jc.snippet(uf, true, 'x', true); 
         uf2= board.create('functiongraph', [f2,-10,10], {strokeColor: 'red', fixed: false});
        } catch (ex) {
           // console.log(ex);
        }
      }
      board.update();
  [[/jsxgraphapi]]
  <p>Give formula for above function</p>
  <p>\(f(x)=\) [[input:ans1]] [[validation:ans1]]</p>

niin tuosta [[jsxgraph]] osio menee iframeen, jonka sisältä menee data-urlina ja joka pystyy PostMessageilla kommunikoimaan ympäröivään maailmaan. Tuota varten pitää saada selville esim mihin kohti on generoitunut input-kenttä ans1. Siksi tuon kohdalle tulee html:ään JavaScriptiä:

<iframe id="jsxFrame-stack-jsxgraph-1-div1"...>
</iframe>
<script id="5c2dcdd47945e">

// var quizdiv = document.getElementById('#div1');
// if ( !quizdiv ) quizdiv = document;
new ServerSyncValues(findParentElementFromScript('5c2dcdd47945e', '.csRunDiv', '#div1'),
 '#jsxFrame-stack-jsxgraph-1-div1', 'stackapi_', '', 'S1', 
 {sendInputs:'ans1',initObject:{}}
);
</script>

Tuossa tuo findParentElementFromScript('5c2dcdd47945e', '.csRunDiv', '#div1')lähtee kiipeämään "ylöspäin" nykyisestä skriptistä kunne s löytää joko divin .csRunDiv tai #div1. Sitten kenttiä ans1 jne lähdetään etsimään tästä alaspäin. Tämä siksi, että koko dokumentin sisälle ei tarvitsisi keksiä jokaisen Stack-tehtävän kohdalle omia yksilöllisiä ans1 nimiä yms.

Nyt ongelman on minusta tuo hirveä määrä skripiten sisällä tarvittavia DOMiin kohdistuvia find-operaatioita. Ensimmäisenä tietysti tuon oman skriptin löytäminen. Onko mitään suorempaa tapaa päästä käsiksi noihin elementteihin?

dezhidki commented 5 years ago

In GitLab by @Smibu on Jan 3, 2019, 11:45

Ei tule äkkiseltään mitään parempaa mieleen.

Mutta onko tuo rivi oikein:

if ( scriptId && scriptId != elem.Id ) elem = document.getElementById(scriptId);

Siinä on Id mutta eikö se ole id?

dezhidki commented 5 years ago

In GitLab by @vesal on Jan 3, 2019, 11:55

tuo on varmaan väärin :-( Tuo on pakko olla JavaScriptiä, koska tuon pitäisi toimia järjestelmästä riippumatta. Tosin miksei siitä vois jaella sitä käännettyä versiota. Tuon id:n voisi tosin voisi korjata sinne haaraan. Mutta nähtävästi juuri koskaan tuo elem ei ole lähtötilanteessa oikein, koska juuri missään tilanteessa en saanut tuota

var elem = document.scripts[document.scripts.length - 1]; // document.currentScript does not work???

antamaan mitään järkevää, koska tuo nippa nappa toimii kun HTML:ää ladotaan ensimmäistä kertaa, mutta heti kun tuota muokataan tai käytetään, niin scriptien järjestys menee sekaisin eikä kohadlla oleva skripti ole ollenkaan listan viimeinen. Siksi se käytännössä useimmiten joutuu tuossa kohdassa joka tapaksessa tekemään tuon haun skriptin id:n perusteella. Mutta silti tuo kannattaa olla oikein että jos edes tuurilla joskus sattuisi :-)

dezhidki commented 5 years ago

In GitLab by @vesal on Jan 3, 2019, 11:59

Olisiko tuossa se itse pluginin skripti voinut luoda jonkun globaalin javascriptissä näkyvän muuttujan, jonka arvona olisi ollut suora viite siihen pluginin alkuelementtiin? Silloin ei tarvitsisi etisä ylöspäin.

Jotakin jos plugin tietää oman yksilöllisen id:nsä, niin tyyliin:

var pluginElem_AB1231CFX = ...;

dezhidki commented 5 years ago

In GitLab by @Smibu on Jan 3, 2019, 12:13

Kyllähän pluginit toki voisivat rekisteröidä elementtinsä johonkin, vaikka tyyliin:

window.pluginElements[this.taskId] = this.element[0];

Sitä en mittaamatta tiedä, olisiko tällä optimoinnilla mitään käytännön merkitystä.

dezhidki commented 5 years ago

In GitLab by @vesal on Jan 3, 2019, 12:15

window.pluginElements[this.taskId] = this.element[0];

Sitä en mittaamatta tiedä, olisiko tällä optimoinnilla mitään käytännön merkitystä.

Se pitäisi joskus mitata paljonko vie aikaa nuo findByID tms kun on iso dokumentti. Ymmärtääkseni se on yksi reactin juttuja että sillä on oma DOMi vastaava rakenne joka tekee asioista nopeammin.

Eli jos juuresta alakean olevia fideja voi välttää, se voi säästää aikaa? Mutta tuo pitäisi joskus mitata.

dezhidki commented 5 years ago

In GitLab by @vesal on Jan 3, 2019, 12:20

window.pluginElements[this.taskId] = this.element[0];

Mites sitten tuohon jonkun "tuntemattoman" tuonne sisälle generoima skripti (johon saa itse vaikuttaa) saisi tuon taskId käyttöönsä?

Tosin mun tapauksessa (ja muulloinhan tuolla ei ole merkitystä) pyydän sisällön php:lta ja siihen pyynnön yhteyteen tuon voisi viedä. Valitettavasti se välittäminen vaatii muutoksia myös PHP-koodiin ja se voi vaikuttaa TIM-riippuvaiselta.

dezhidki commented 3 years ago

marked the task saako T:\www\api\stack\cas\castext\jsxgraphapi.block.php TIMin alle niin että se kulkee sen git pull/push mukana? as completed