Subversion Repositories wimsdev

Rev

Rev 7477 | Rev 7577 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. !! 22/2/2014
  2. !! PAS OP : javascript:sendanswer() IS SPECIFIEK VOOR DEZE M_HELP
  3. !! GEEN javascript:dontknow()
  4. !! layout (tabel) is gelijk aan mymathinput.phtml ... dus bij veranderingen synchroniseren met mymathinput.phtml
  5. !! javascript handling van math (jqmath etc) is identiek aan mymathinput.phtml... dus bij veranderingen synchroniseren met mymathinput.phtml
  6. !! NIET DOM DOOR_KOPIEREN !!!!
  7.  
  8. !set n=$counter
  9. <link rel="stylesheet" type="text/css" href="$htmldir/schaersvoorde.css" />
  10. <link rel="stylesheet" href="$htmldir/jqmath.css">
  11. <script src="$jsdir/jqmath.js"></script>
  12. <script type="text/javascript" src="$jsdir/../lang/remarks.$taal.js"></script>
  13. <script type="text/javascript" src="$jsdir/precheck.js"></script>
  14. <div id="alarmtext" name="alarmtext" style="position:absolute;top:0px;left:0px;z-index:100;display:none;background-color:orange;font-size:16px;border:2px solid red"></div>
  15. <table id="exercise" class="exercise" ><!-- begin table id=exercise -->
  16.     <tr>
  17.     <td class="exercise_m">
  18.         !if $(question$n)!= $empty
  19.             $(question$n)
  20.         !endif
  21.         !if $exotext != $empty
  22.             <br />
  23.             $exotext
  24.         !endif
  25.         <table class="exercise">
  26.             <tr>
  27.             !if $(formula$n) != $empty
  28.             <td class="exercise_c">
  29.                 !insmath $(formula$n)
  30.             </td>
  31.             <td class="exercise_c">
  32.                 $m_rightarrow
  33.             </td>
  34.             !endif
  35.             <td id="math_out" style="font-size:120%;"></td>
  36.             </tr>
  37.         </table>
  38.         <textarea class="schaervoorde_input" id="JSMathView" rows="2" cols="40"></textarea>
  39.     </td>
  40.     </tr>
  41.     <tr>
  42.     <td>
  43.         <table class="demospecial" id="show_it">
  44.             <tr id="math_op0">
  45.             <!-- contents of mathviewpanel -->
  46.             </tr>
  47.             <tr id="math_op1" style="display:table-row">
  48.                 <td onclick="javascript:button('^');">  ^</td>
  49.                 <td onclick="javascript:button('/');">  /</td>
  50.                 <td onclick="javascript:button('*');">  *</td>
  51.                 <td onclick="javascript:button('+');">  +</td>
  52.                 <td onclick="javascript:button('-');">&minus;</td>
  53.                 <td onclick="javascript:button('(');">  (</td>
  54.                 <td onclick="javascript:button(')');">  )</td>
  55.                 <td onclick="javascript:button('&euro;');">&euro;</td>
  56.             </tr>
  57.             <tr id="math_op2" style="display:table-row">
  58.                 <td onclick="javascript:button('&radic;()');">&radic;()</td>
  59.                 <td onclick="javascript:button('sin()');">sin</td>
  60.                 <td onclick="javascript:button('cos()');">cos</td>
  61.                 <td onclick="javascript:button('tan()');">tan</td>
  62.                 <td onclick="javascript:button('log()');">log</td>
  63.                 <td onclick="javascript:button('pi');">&pi;</td>
  64.                 <td colspan="2" id="clear_it" style="background-color:orange;">
  65.                 !record 67 of $remarkdir/commonremarks.$taal
  66.                 </td>
  67.             </tr>
  68.             <tr id="math_op3" style="display:none">
  69.                 <td onclick="javascript:button(' in ');">   &#8712;</td>
  70.                 <td onclick="javascript:button(' notin ');">&#8713;</td>
  71.                 <td onclick="javascript:button(' and ');">  &#8743;</td>
  72.                 <td onclick="javascript:button(' or ');">   &#8744;</td>
  73.                 <td onclick="javascript:button(' <= ');">   &#8804;</td>
  74.                 <td onclick="javascript:button(' >= ');">   &#8805;</td>
  75.                 <td onclick="javascript:button(' R ');">    &#8476;</td>
  76.                 <td onclick="javascript:button(' N ');">    N</td>
  77.             </tr>
  78.             <tr id="math_op4" style="display:none">
  79.                 <td onclick="javascript:button('sqrt[3]()');"><sup>3</sup>&radic;()</td>
  80.                 <td onclick="javascript:button('sqrt[4]()');"><sup>4</sup>&radic;()</td>
  81.                 <td onclick="javascript:button('sqrt[5]()');"><sup>5</sup>&radic;()</td>
  82.                 <td onclick="javascript:button('sqrt[6]()');"><sup>6</sup>&radic;()</td>
  83.                 <td onclick="javascript:button('sqrt[7]()');"><sup>7</sup>&radic;()</td>
  84.                 <td onclick="javascript:button('sqrt[8]()');"><sup>8</sup>&radic;()</td>
  85.                 <td onclick="javascript:button('sqrt[9]()');"><sup>9</sup>&radic;()</td>
  86.                 <td onclick="javascript:button('sqrt[10]()');"><sup>10</sup>&radic;()</td>
  87.             </tr>
  88.             <tr id="math_op5" style="display:none">
  89.                 <td onclick="javascript:button('log[2]()');"><sup>2</sup>log()</td>
  90.                 <td onclick="javascript:button('log[3]()');"><sup>3</sup>log()</td>
  91.                 <td onclick="javascript:button('log[4]()');"><sup>4</sup>log()</td>
  92.                 <td onclick="javascript:button('log[5]()');"><sup>5</sup>log()</td>
  93.                 <td onclick="javascript:button('log[6]()');"><sup>6</sup>log()</td>
  94.                 <td onclick="javascript:button('log[7]()');"><sup>7</sup>log()</td>
  95.                 <td onclick="javascript:button('log[8]()');"><sup>8</sup>log()</td>
  96.                 <td onclick="javascript:button('log[9]()');"><sup>9</sup>log()</td>
  97.             </tr>
  98.             <tr id="math_op6" style="display:none">
  99.                 <td onclick="javascript:button('f\'(x) = ');">   f'(x) = </td>
  100.                 <td onclick="javascript:button('dy/dx = ');"> dy/dx = </td>
  101.                 <td onclick="javascript:button(' and ');">  &#8743;</td>
  102.                 <td onclick="javascript:button(' or ');">   &#8744;</td>
  103.                 <td onclick="javascript:button(' <= ');">   &#8804;</td>
  104.                 <td onclick="javascript:button(' >= ');">   &#8805;</td>
  105.                 <td onclick="javascript:button('f(x) = ');">   f(x) =</td>
  106.                 <td onclick="javascript:button('F(x) = ');">    F(x) =</td>
  107.             </tr>
  108.         </table>
  109.    </td>
  110.    </tr>
  111. </table>
  112. <div id="send_buttons" class="embedded_central">
  113.    <input type="button" id="schaersvoorde_ok_button" onclick="javascript:sendanswer();" value="$send" />
  114. </div>
  115. !if $my_arrows=$empty
  116.    !set my_arrows=2
  117. !endif
  118. !if $convert_root=$empty
  119.    !set convert_root=0
  120. !endif
  121. !if $use_ineq != 1
  122.    !set use_ineq=0
  123. !endif
  124. <script type="text/javascript">
  125. //<![CDATA[
  126. <!-- no validator  -->
  127. var descr_list="$description";var descr_cnt = 30;var description = make_description(descr_list,descr_cnt);function dontknow(){myConfirm('$dontknow','?','$wims_ref_name','$session','$module','$counter','$nok_send_color');}
  128. function sendanswer(){
  129. var input;
  130. var inputfieldnumber = 0;
  131. var reply = new Array();
  132.  <!-- MathView js input html5 applet -->
  133.  if(document.getElementById("JSMathView")){
  134.   input=document.getElementById("JSMathView").value;
  135.  !if $special_fraction=1
  136.   input = singlespace(input);
  137.   input = input.replace(/\ /g,'+');
  138.   if(input.indexOf('+') == 0 ){input = input.substring(1,input.length);}
  139.   if(input.indexOf('+') == input.length ){input = input.substring(0,input.length-1);}
  140.  !endif
  141.   input=input.replace(/\u221A/g,'sqrt');
  142.   input=input.replace(/\u20AC/g,'euro');
  143.   if( input.length == 0) {setAlarm(r1+"\ $counter");return;};
  144.   if( input.length > 200 ){setAlarm(r2); return;};
  145.   if(input.indexOf(',') != -1 && input.indexOf('table') == -1){setAlarm(r4);return;};
  146.   if(check_f(input) == 0){return;};
  147.   if(check_o(input) == 0){return;};
  148.   if(check_log_NaN(input) == 0){return;}
  149.   if(check_sqrt_NaN(input) == 0){return;};
  150.   input = science(input);if(input == "error"){return;};
  151.   if(check_x(input) == 0){return;};
  152.  !if $convert_root=0
  153.   input = arrows(input,$my_arrows,"","");if(input == "error"){return;};
  154.   input = nthroot(input);if(input ==" error"){return;};
  155.   if(input.indexOf("[") !=- 1){
  156.    if(input.indexOf("sqrt[")!=-1){
  157.     input=specialroot(input);if(input=="error"){return;};
  158.    };
  159.    if(input.indexOf("log[")!=-1){
  160.     input=speciallog(input);if(input=="error"){return;};
  161.    };
  162.    if( input.indexOf("[") !=-1){setAlarm(r13);return;};
  163.   };
  164.  !endif
  165.   reply[inputfieldnumber] = input;inputfieldnumber = 1;
  166.  };
  167.  if(reply[0].length == 0 ){setAlarm(r1);return;};
  168.  if(confirm(r0+"\n"+reply)){
  169.   reply=encodeURIComponent(reply);
  170.   var URL = '$wims_ref_name?session=$myvar4&+module=$module&+cmd=reply&+reply$n='+reply;
  171.   opener.location.href = URL;
  172.   window.close();
  173.  }    
  174. }
  175. //]]>
  176. </script>
  177.  
  178. <script type="text/javascript">
  179. var JSMathView = document.getElementById("JSMathView");
  180. var show_it    = document.getElementById("show_it");
  181. var clear_it   = document.getElementById("clear_it");
  182. var math_out   = document.getElementById("math_out");
  183.  
  184. <!-- mathviewpanel something like module_title:sqrt():sin():f(x):F(x) -->
  185. var mathviewpanel ="$mathviewpanel";
  186. mathviewpanel = mathviewpanel.split(':');
  187. if(mathviewpanel.length > 1){
  188.  for(var i=1; i<mathviewpanel.length;i++){
  189.   (function(){
  190.    var paneltxt = mathviewpanel[i];
  191.    var td = document.createElement('td');
  192.    document.getElementById('math_op0').appendChild(td);
  193.    td.addEventListener('click',function(e){button(paneltxt);},false);
  194.    td.innerHTML = paneltxt;
  195.   }());
  196.  };
  197. }
  198. else
  199. {
  200.    document.getElementById('math_op3').style = 'table-row';
  201.    document.getElementById('math_op4').style = 'table-row';
  202.    document.getElementById('math_op5').style = 'table-row';
  203.    document.getElementById('math_op6').style = 'table-row';
  204. }
  205.  
  206. function button(myValue){var myField =  document.getElementById("JSMathView");if(document.selection){myField.focus();var sel = document.selection.createRange();sel.text = myValue;} else { if(myField.selectionStart || myField.selectionStart == '0'){var startPos = myField.selectionStart;var endPos = myField.selectionEnd;myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos,myField.value.length);} else {myField.value += myValue;}}}
  207. function displayroot(t){var power;var sqrt;var begin;var end;var mod;var tot;var wait;var got;var chr;var t1;var t2;var t3;var t4;var test;var org;t2=t.indexOf("](");if(t2==-1){return;};org=t;t=t.replace(/sqrt\(/g,"SQRT(");t=t.replace(/log\[/g,"LOG~");t=t.replace(/sqrt\[/g,"@[");test=t.replace(/[a-z]\[/g,"#");if(test.indexOf("#")!=-1){return;};t2=t.indexOf("[");var trouble=0;while(t2 != -1){begin=t.indexOf("@");t2=t.indexOf("[");t3=t.indexOf("]");if(t2==begin+1 && t3>t2){power=t.substring(t2+1,t3);if(power.length==0){return t;};if(power<2){return;}t4="["+power+"]";t=t.replace(t4,'');tot=t.length;wait=0;got=0;end=0;for(s=begin;s<tot;s++){if(end==0){chr=t.charAt(s);if(chr=="("){wait=wait+1;};if(chr==")"){got=got+1;};if(got!=0){if(wait==got){end=s;}}}};begin=begin+2;sqrt=t.substring(begin,end);mod=(power % 2);if(sqrt<0 && mod!=1){return;};t=t.replace("@("+sqrt+")","{^"+power+"&radic;#"+sqrt+"!}");}else{t=t.replace("]","?");}trouble++;if(trouble>100){setAlarm(r20);t="error";return t;}};t=t.replace(/SQRT\(/g,"&radic;#");t=t.replace(/LOG~/g,"log[");t=t.replace(/~/g,"[");t=t.replace(/\?/g,"]");t=t.replace(/@/g,"&radic;");return t;}
  208. function displaylog(t){var noemer;var teller;var begin;var end;var tot;var wait;var got;var chr;var t1;var t2;var t3;var t4;t2=t.indexOf("](");if(t2==-1){return;}t=t.replace(/log\(/g,'LOG(');t=t.replace(/log/g,"@");t2=t.indexOf("[");var trouble=0;while(t2 != -1){begin=t.indexOf("@");t3=t.indexOf("]");if(t2==begin+1 && t3>t2){grondtal=t.substring(t2+1,t3);if(grondtal=="10"){return;};if(grondtal=="e" || grondtal=='E'){return;};t4="["+grondtal+"]";t=t.replace(t4,'');tot=t.length;wait=0;got=0;end=0;for(s=begin;s<tot;s++){if(end==0){chr=t.charAt(s);if(chr=="("){wait=wait+1;};if(chr==")"){got=got+1;};if(got!=0){if(wait==got){end=s;};};};};begin=begin+2;teller=t.substring(begin,end);if(grondtal==teller){setAlarm(r17);};t=t.replace("@("+teller+")","{^"+grondtal+"~#"+teller+"!}");}else{t=t.replace("[","%");};t2=t.indexOf("[");trouble++;if(trouble>100){setAlarm(r20);t="error";return t;};};t=t.replace(/\%/g,"[");t=t.replace(/~/g,"log");t=t.replace(/LOG\(/g,"log#");t=t.replace(/@/g,"log");return t;}
  209. function find_group(t){var left=0;var idx=-1;while(t.indexOf('(') != -1 ){t=t.replace('(','#');left++;idx = t.indexOf(')');while( idx != -1 ){t=t.replace(')','!');left--;if(left == 0){t=t.substring(0,idx+1)+"}"+t.substring(idx+1,t.length);return t;};idx=t.indexOf(')');};};return t;}
  210.  
  211. function rewrite(input){
  212.  if(input.indexOf("sqrt[") != -1){ input = displayroot(input);}
  213.  var rep1 = ["log(","*","sqrt","pi",">=","<="," and "," or "," isin "," in "," notin","R","N","dy/dx"];
  214.  var rep2 = ["fck(","&sdot;","&radic;","\\pi","\\ge"," \\le "," \\wedge "," \\Vee "," \\in "," \\in "," \\notin ","\\R","\\N","{\\d y}/{\\d x}"];
  215.  for(var i=0; i < rep1.length ; i++){
  216.    input = input.split(rep1[i]).join(rep2[i])
  217.  }
  218.  // replace log( by fck( to avoid a clash between log[a](b)
  219.  // sqrt[a](b) is no problem : sqrt -> &radic;
  220.  var math = ["sin","cos","tan","asin","acos","atan","fck"];
  221.  var rep_math = ["\\sin","\\cos","\\tan","\\asin","\\acos","\\atan","\\fck"];
  222.  var tmp_right;var tmp_left;var idx;
  223.  for(var i=0;i < math.length ; i++){
  224.   idx = input.indexOf(math[i])
  225.   while( idx != -1){
  226.    input = input.replace(math[i],"@");
  227.    tmp_right = input.substring(idx,input.length);
  228.    tmp_left = input.substring(0,idx);
  229.    tmp_right = find_group(tmp_right);
  230.    input = tmp_left + "{"+tmp_right;
  231.    idx = input.indexOf(math[i])
  232.   }
  233.   input=input.replace(/@/g,rep_math[i]);
  234.  };
  235.  if(input.indexOf("log[") != -1){ input = displaylog(input);}
  236.  input=input.replace(/fck/g,'log');
  237.  input=input.replace(/#/g,'(');
  238. input=input.replace(/!/g,')');
  239.  return input;
  240. }
  241. "use strict";
  242. var ents_ = { nwarr: '\u2196', swarr: '\u2199' };
  243. show_it.addEventListener('click',function(e){doMathSrc(1);},false);
  244. clear_it.addEventListener('click',function(e){JSMathView.value=" ";doMathSrc(1);return;},false);
  245. JSMathView.addEventListener('keyup',function(e){doMathSrc(1);},false);
  246.  
  247. function doMathSrc(n) {
  248.  var org = JSMathView.value;
  249.  var ms = rewrite(org);
  250.  if(!ms){return;};
  251.  ms = ms.replace(/&([-#.\w]+);|\\([a-z]+)(?: |(?=[^a-z]))/ig,function(s, e, m){if (m && (M.macros_[m] || M.macro1s_[m])){ return s;};var t = '&'+(e || m)+';', res = $$('<span>'+t+'</span>').text();return res != t ? res : ents_[e || m] || s;});
  252. var t;
  253.  try { math_out.removeChild(math_out.childNodes[0]); } catch(e){}
  254.  try { t = M.sToMathE(ms, true); math_out.appendChild(t);} catch(e) { setAlarm(e+"<br />"+org); }
  255.  JSMathView.value = org;
  256. }
  257. </script>
  258.  
  259.    
  260.