Subversion Repositories wimsdev

Rev

Rev 17518 | Rev 17581 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16849 obado 1
# Canvasdraw changes log
2
## TODO :
3
- sort out the global/local variable mess...and reorganize headerfile
17576 obado 4
	 : zooming and grid: scaling needs to be more adaptive! (use constant amount of grid lines)
17518 schaersvoo 5
## 2023
17576 obado 6
* 21/2/2023: canvasmultidraw now place object with relative coords (%) instead of absolute (px)
17518 schaersvoo 7
* 13/1/2023: corrected flaw in external images 'copy & drag/drop'
16849 obado 8
## 2022
17425 schaersvoo 9
* 28/8/2022: added command "newrange xmin,xmax,ymin,ymax" see https://wimsedu.info/?topic=dessiner-des-portions-de-fonctions-sur-un-meme-graphe
16942 schaersvoo 10
* 01/8/2022: getMouse(),latest improvements related to 'reponsiveness' will fatally lockup browsers in the pixel-by-pixel filling...at least in userdraw clickfill
16920 schaersvoo 11
* 19/7/2022: checked and corrected 'dashed' objects like arc,arrowarc,ellipse...
16910 schaersvoo 12
* 16/7/2022: solved long standing issue of dashed arrow(s) and dashed arrow(s)2 
17576 obado 13
* 06/7/2022: clearbutton preserves div's with '<' && '/>' and objects placed with `placed_image_on_canvas(id)` e.g. with `id = placed*`
16910 schaersvoo 14
* 05/7/2022: corrected flaw in 'clearbutton' https://wimsedu.info/?topic=geometrie-interactive-avec-canvasdraw
16892 schaersvoo 15
* 05/7/2022: command 'group' :
16
	- still some issues with direct clicks on group members (NaN due to competing mouselisteners)
17
	- removed 'debug newlines'
18
	- external images -via command 'copy' NOT supported (too much trouble)
19
	- need to add 'copy' to dragstuff library or introduce another command...
16872 schaersvoo 20
* 26/6/2022: added keyword 'group' : provides mouse-driven movements of all objects after keyword 'group' until keyword 'kill group;
21
	- may be combined with 'slider' to move or rotate single objects or grouped objects
22
	- may not be combined with command 'drag xy' (mouse listeners are already occupied...)
23
	- may be combined with command 'onclick'
16882 schaersvoo 24
	- added objects created by command 'latex' to grouping (todo : external images etc)
16872 schaersvoo 25
 
16849 obado 26
* 23/6/2022: corrected drag&drop reply of external images (via command 'copy') when mixed with other external/internal objects...
27
 
28
	 	 #
29
	 	 size 400,400
30
	 	 xrange -10,10
31
	 	 yrange -10,10
32
	 	 grid 2,2,grey
33
	 	 linewidth 2
34
	 	 onclick
35
	 	 fcircle -6,6,50,red
36
	 	 onclick
37
	 	 fcircle -6,-6,50,green
38
	 	 noreset
39
	 	 snaptogrid
40
	 	 drag xy
41
	 	 centered
42
	 	 latex 0,0,\frac{12345}{23456} \times \frac{12345}{23456}
43
	 	 translate 4,4
44
	 	 html 0,0,<table style='border:solid red 2px'><tr><th>HTML TABLE</th></tr><tr><td><img src="gifs/en.gif" /></tr><tr><td><img src="gifs/nl.gif" /></tr><tr><td><img src="gifs/fr.gif" /></tr><tr><td><img src="gifs/cn.gif" /></tr><tr><td><img src="gifs/it.gif" /></tr></table>
45
	 	 userdraw arrow2,red
46
	 	 translate 8,8
47
	 	 copy 0,0,-1,-1,-1,-1,gifs/nl.gif
48
 
49
* 20/6/2022: Start to make canvasdraw responsive [OB] :
16845 bpr 50
	- reduce size on small screens,
51
	- use percentage instead of absolute positioning for xml/html/tex
52
	- convert mouse position coords on shrinked canvas
53
	- correct mouse coordinates when inside a scrolled wims_scrollable div
16849 obado 54
	- Replace "Ariel" font references by "Arial"
55
* 19/6/2022: added function plot to multidraw (https://wimsedu.info/?topic=userinput-function)
56
	command 'multidraw functions' will -for now- give just 2 inputfields... *TODO*: make configurable, so implement commands like 'multidraw functions5')
57
	for multiple function input fields, use multiple keywords 'function', e.g. something like:
58
	multidraw text,line,function,function,function,points
59
* 27/5/2022: added subsup to userdraw and multidraw 'text' (which is always 'centered' e.g use_offset=4)
60
* 26/5/2022: corrected replyformat 100 
61
* 23/5/2022: overriding fontfamily and use Helvetica as font for _sub ^sup  strings: all inline numbers are in script-size (80% eg the same as strings+numbers for sub/sup)
62
* 21/5/2022: using 'scriptsize' imitation on sub / sup  
63
* 20/5/2022: added a sub / sup imitation to the canvas 'string' command family
16700 schaersvoo 64
 
16849 obado 65
		size 400,400
66
		xrange -6,6
67
		yrange -6,6
68
		fontfamily 22px Arial
16700 schaersvoo 69
 
16849 obado 70
		# use single space for separation in formula...
71
		# use double space to create new word
72
		string red,-5,0,H_3 O^+ + OH^\u2212  \u2192 2H_2 O
16845 bpr 73
 
16849 obado 74
* 2/4/2022: added timeout fix for centering issue in case of MathJaX (draw_xml())
15758 schaersvoo 75
 
16849 obado 76
## 2021
77
* 14/4/2021: added flydraw command 'range xmin,xmax,ymin,ymax'
78
* 6/4/2021: corrected 'text objects' (from cmd's text/string) were not added to 'noreset', e.g. keyword 'noreset' was ignored...
79
added a live example from E3/number/oefgraduation.fr  
80
* 4/4/2021: corrected use of precompiler directive "KATEX_INSTALLED" (was not working...)
81
* 12/3/2021: add "version 0.5" to canvasdraw include file
82
* 23/2/2021:
15716 schaersvoo 83
added generic command 'kill argument'
84
work in progress
15717 schaersvoo 85
corrected wrong alternative command for jscurve
16849 obado 86
* 21/2/2021:
15715 schaersvoo 87
alternative commands now 'seachable' using js-function look()
16849 obado 88
* 19/2/2021:
15711 schaersvoo 89
slightly improved dashing of arrows (in dragstuff,userdraw & multidraw)
90
to test : other objects+dashing !
91
resetting dashing for the arrow head (head was also dashed...)
92
see https://wimsedu.info/?topic=dashed-arrows-not-dashed-in-canvasdraw
16849 obado 93
* 2/2/2021:
15690 schaersvoo 94
added command 'arcarrow|arrowarc', left,right,left/right
95
added commands 'arc','angle','arcarrow' to onclick and drag&drop
16849 obado 96
* 17/1/2021: 
15672 schaersvoo 97
corrected syntax issue in canvasmultidraw.c signalled by Opera Presto : 'forbidden function user_drawstop(evt) declaration in statement'*/
15674 schaersvoo 98
 
15673 schaersvoo 99
can not correct centering in case of MathJaX, in commands like
16849 obado 100
 
101
```
15672 schaersvoo 102
####
15673 schaersvoo 103
centered
15672 schaersvoo 104
math 0,0,\frac{1}{222}
105
####
16849 obado 106
```
107
 
15674 schaersvoo 108
Things get even worse when activating in exec.c the "Safari/MathJax bugfix : refresh display when document ready."
109
(besides the ridiculous delay !!)
110
You should really try KaTeX on these systems/browsers !!!
15672 schaersvoo 111
 
15673 schaersvoo 112
OEF example of the problem:
16849 obado 113
 
114
```
15672 schaersvoo 115
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
116
\text{m1=wims(mathmlmath \frac{12344}{\pi\pi\pi\pi^{\pi}})}
117
\text{m2=wims(mathmlmath \frac{\pi\pi\pi\pi^{\pi}}{\alpha})}
118
\text{m3=wims(mathmlmath \sqrt{\pi\pi\pi\pi^{\pi}})}
119
\text{m4=wims(mathmlmath \sqrt{\frac{1223}{3344}})}
120
 
121
\statement{
122
<script type="text/javascript">
123
 function read_canvas(){
124
   var fun = eval("read_canvas"+canvas_scripts[0]);
125
   if( typeof fun === 'function'){ return fun();};
126
 };
127
 function read_dragdrop(){
16849 obado 128
   var fun = eval("read_dragdrop"+canvas_scripts[0]); 
15672 schaersvoo 129
   if(typeof fun === 'function'){return fun();};
130
 };
131
 
132
</script>
133
<br/>
134
<span id="m1" onclick="javascript:place_image_on_canvas(this.id)" >\m1</span>
135
<span id="m2" onclick="javascript:place_image_on_canvas(this.id)" >\m2</span>
136
<span id="m3" onclick="javascript:place_image_on_canvas(this.id)" >\m3</span>
137
<span id="m4" onclick="javascript:place_image_on_canvas(this.id)" >\m4</span>
138
 
139
\canvasdraw{400,400}{
140
xrange -10,10
141
yrange -10,10
142
grid 1,1,grey
143
noreset
144
# use keyword 'noreset' to avoid using keyword 'centered' before every addition of objects !
145
centered
146
fontfamily Bold Italic 42pt Courier
147
# these images are internal the reply prefix is imagepalette_0, imagepalette_1... !!
148
imagepalette gifs/ca.gif,gifs/en.gif,gifs/nl.gif,gifs/fr.gif,gifs/cn.gif,gifs/de.gif,gifs/kh.gif,gifs/it.gif
149
multicolors red,green,blue,lightblue,cyan
150
multisnaptogrid 1,1,1,1,0
151
multilinewidth 0,4,0,3,1
152
multidraw text,arrow,images,points,lines
153
math -6,6,\frac{1}{\pi}
154
math -2,2,\frac{1}{\pi}
155
math 2,-2,\frac{1}{\pi}
156
math 6,-6,\frac{1}{\pi}
157
linewidth 3
158
points red,-6,6,-2,2,2,-2,6,-6
159
mouse red,22
160
}
161
 
162
 
163
These images are external...The reply id-prefix is "placed_0_'this.id'"
164
<table><tr>
165
<td><img src="gifs/ca.gif" onclick='javascript:place_image_on_canvas(this.id);' id="ca" /></td>
166
<td><img src="gifs/nl.gif" onclick='javascript:place_image_on_canvas(this.id);' id="nl" /></td>
167
<td><img src="gifs/en.gif" onclick='javascript:place_image_on_canvas(this.id);' id="en" /></td>
168
<td><img src="gifs/fr.gif" onclick='javascript:place_image_on_canvas(this.id);' id="fr" /></td>
169
<td><img src="gifs/cn.gif" onclick='javascript:place_image_on_canvas(this.id);' id="cn" /></td>
170
<td><img src="gifs/it.gif" onclick='javascript:place_image_on_canvas(this.id);' id="it" /></td>
171
<td><img src="gifs/kh.gif" onclick='javascript:place_image_on_canvas(this.id);' id="kh" /></td>
172
<td><img src="gifs/de.gif" onclick='javascript:place_image_on_canvas(this.id);' id="de" /></td>
173
</tr>
174
</table>
175
   <input type="button" onclick="alert(read_canvas());" value="read_canvas()" />
176
   <input type="button" onclick="alert(read_dragdrop());" value="read_dragdrop()" />
177
}
16849 obado 178
```
15672 schaersvoo 179
 
16849 obado 180
* 15/1/2021:
15665 schaersvoo 181
corrected long standing flaw regarding "centered" on external stuff...tested: bitmap,svg,TeX [on KaTeX]
15669 schaersvoo 182
corrected 'onclick' for 'draw_xml()'
15665 schaersvoo 183
 
16849 obado 184
* 14/1/2021: 
15657 schaersvoo 185
only on KaTeX enabled wims, a slider title may use TeX produced by command "mathmlmath"
16849 obado 186
 
187
* 13/1/2021:
15655 schaersvoo 188
slider title may use TeX produced by command "mathmlmath"
189
 
16849 obado 190
=> oef example...
191
 
192
```
15655 schaersvoo 193
\title{slider + tex title}
194
\text{A = \frac{1}{2}}
195
\text{B = \frac{1}{3}}
196
\text{C = \frac{1}{4}}
15657 schaersvoo 197
\text{a = \(\frac{1}{2}\)}
15655 schaersvoo 198
\text{b = wims(mathmlmath \\Huge \\frac{1}{3} )}
199
\text{c = wims(mathmlmath \\Huge \\frac{1}{4} )}
200
\text{canvas=wims(exec canvasdraw
201
size 400,400
202
xrange -10,10
203
yrange -10,10
16849 obado 204
fontfamily 38px Arial
15655 schaersvoo 205
opacity 255,40
206
grid 1,1,grey
207
strokecolor red
15657 schaersvoo 208
slider -10,10,400,50,x active,\( \frac{1}{2} \)
15655 schaersvoo 209
frect -6,5,-4,-5,red
210
centered
211
latex -5,0,\A
212
killslider
213
strokecolor blue
214
slider -10,10,400,50,x active,\b
215
frect -6,5,-4,-5,blue
216
centered
217
latex -5,0,\B
218
killslider
219
strokecolor green
220
slider -10,10,400,50,x active,\c
221
frect -6,5,-4,-5,green
222
centered
223
latex -5,0,\C
224
killslider)
225
}
226
\statement{
227
canvas = \canvas
16849 obado 228
} 
229
```
15655 schaersvoo 230
 
16849 obado 231
* 8/1/2021:
15646 schaersvoo 232
added affine transformation to Fly text commmand analogue
15655 schaersvoo 233
 
16849 obado 234
* 3/1/2021:
15628 schaersvoo 235
added check on 'nan' in case of parametric curve
16849 obado 236
		size 260,220
237
		xrange 0,13
238
		yrange 0,11
239
		trange 0,2
240
		curve black,1/t,4*sin(t)
15540 schaersvoo 241
 
16849 obado 242
 
243
## 2020
244
* 29/12/2020:
15623 schaersvoo 245
disabled limitation of adding "curve points outside the visual ymin/ymax range" (parametric curves)
246
 
16849 obado 247
* 27/12/2020:
15611 schaersvoo 248
corrected command "parallel" , to be more compatible with flydraw & affine transformations
15613 schaersvoo 249
when a transformation is set  before command parallel...the lines may be set onclick or drag xy!
15611 schaersvoo 250
 
16849 obado 251
* 24/12/2020:
15601 schaersvoo 252
solved some issues with curve & affine/rotate...
16849 obado 253
see [https://wimstest1.di.u-psud.fr/wims/wims.cgi?lang=en&module=adm/doc&cmd=new&job=read&doc=1028&block=transform]()
15601 schaersvoo 254
 
16849 obado 255
```
15601 schaersvoo 256
size 200,200
257
xrange -5,5
258
yrange -5,5
259
linewidth 2
260
trange 0,1
261
curve blue,2*t,sin(2*pi*t)
262
affine 0,1,1,2,-1,1
263
trange 0,1
264
curve green,2*t,sin(2*pi*t)
16849 obado 265
```
15601 schaersvoo 266
 
16849 obado 267
* 22/12/2020:
268
command "fillpattern image_url" was gone fishing! `get_image_from_url()` needs to be called after function definition..
269
* 16/11/2020: 
270
	- added 'affine' to curve evaluation
15540 schaersvoo 271
 
16849 obado 272
	```
273
	size 220,220
274
	xrange -5,5
275
	yrange -5,5
276
	hline 0,0,black
277
	vline 0,0,black
278
	rotationcenter 0,0
279
	slider -2*pi,2*pi,200,28,angle degree active,Rotate
280
	linewidth 4
281
	curve blue,sin(x)
282
	affine 1,-0.2,-0.6,1,0,2
283
	curve red,sin(x)
284
	```
15540 schaersvoo 285
 
16849 obado 286
* 13/11/2020: 
287
	- added `safe_eval()` to userinput (using inputfields)
7614 schaersvoo 288
 
16849 obado 289
* 8/7/2020:
290
	- command `input x,y,size,readonly,value` gave canvaserror when 'value' was ommitted or a 'space'
291
	- corrected bug [https://wimsedu.info/?topic=bug-canvasdraw-et-ou-drawinput]()
292
		```
293
		case 4: temp = get_string(infile,1); --->  case 4: temp = get_string(infile,3);
294
		```
295
* 14/6/2020:
296
	- corrected bug in multidraw snaptopoints+curvedarrow
297
* 11/6/2020:
298
	- added 'touchend' to improve behaviour of touch devices in case 'userdraw' and 'multidraw' [TO TEST]
299
* 9/6/2020
300
	- touchend  not supported (eg lifting finger+tapping after dragging to signal some 'corner point')
301
	- in case of touch devices, use commands 'userinput' to enforce mathematical precise drawing and not finger painting...
302
	- function calc_lines(): 'multidraw lines' & 'userdraw line,color' returned (xmin:y1)--(xmax:y2)
303
	    that should have been (x1:y1)---(x2:y2) ...otherwise snaptogrid gives float values !
304
* 8/6/2020:
305
	- added command 'noreset' or 'killreset'
306
* 5/6/2020:
307
	- solved issue of sync loading of images (`command:html 0,0,<img src="modules/U2/geometry/oefrosoni.it/images/273x273/fig4.png"  />`)
308
 
309
	```
310
		size 400,400
311
		xrange -6,6
312
		yrange -6,6
313
		fontsize 40
314
		linewidth 1
315
		slider -10,10,300,28,angle active degree, 
316
		centered
317
		html 0,0,<img src="modules/U2/geometry/oefrosoni.it/images/273x273/fig4.png"  />
318
		killslider
319
		centered
320
		html 0,0,<img src="modules/U2/geometry/oefrosoni.it/images/273x273/fig4_ovr.png"  />
321
	```
322
 
323
	- commands math, katex, latex are identical
324
	- added compile time checking of 'katex.c' presence:
15111 schaersvoo 325
if present: use KaTeX for all browsers
326
if not present: use MathJaX (chrome) or native MathML (firefox)
16849 obado 327
	- TO DO: check if this actually works on non-KaTeX...
7614 schaersvoo 328
 
16849 obado 329
* 25/5/2020:
330
	- removed js-code for rotating (and transforming mouse-coordinates...) Now coordinates are transformed in C
331
	- slider, solved several issues (removed old slider stuff)
332
	- animated slider may be combined with manual/mouse slider
333
	- slider corrected for touch device
334
* 24/5/2020:
335
	- add keyword 'animate' to slider
7614 schaersvoo 336
 
16849 obado 337
	```
338
		size 300,300
339
		xrange -6,6
340
		yrange -6,6
341
		grid 1,1,grey
342
		linewidth 1
343
		slider 0,2*pi,300,28,angle animate active, no
344
		opacity 255,30
345
		ftriangle 2,2,-2,2,0,0,red
346
		ftriangle -2,2,-2,-2,0,0,blue
347
		ftriangle -2,-2,2,-2,0,0,green
348
		ftriangle 2,-2,2,2,0,0,orange
349
		rotationcenter 0,0
350
		frect -2,2,2,-2,black
351
	```
7614 schaersvoo 352
 
353
 
16849 obado 354
* 22/5/2020:
355
	- slider things...
356
* 21/5/2020:
357
	- minor changes: not yet really satisfied with combinations of xml+dragdrop+slider
358
	- some doc examples
359
* 20/5/2020:
360
	- slider reorganized:
361
	- restored all listeners on slider.(mousedown ,mousemove and mouseup)
362
	- update example 'angle': angle and arc are exceptions in case of sliders...they are always active (e.g. not click-activated)
363
	- added 'onclick=4' : in case of sliders ,no need for click-on-object to active the object--slider (important for objects covering each other)
364
 
365
* 18/5/2020:
366
	- restored interaction of commands 'arc' and 'angle' with sliders (specially Rotate)
367
	- drawxml() objects like katex,mathml,latex,html,obabel now interact identical as
15111 schaersvoo 368
    dragstuff library objects with slider...eg. 'first click'=select for sliders, 'second click' unselect sliders
16849 obado 369
    e.g.: `slidergroup[object_cnt] = obj or slidergroup[object_cnt] = null`
15111 schaersvoo 370
    selected sliders until 'killslider'
16849 obado 371
 
372
    ```
373
	######################################################
374
	size 500,500
375
	xrange -6,6
376
	yrange -6,6
377
	grid 1,1,grey
378
	fontfamily 42px Arial
379
	opacity 255,60
380
	centered
381
	#drag xy
382
	snaptogrid
383
	slider -10,10,500,50,angle,R
384
	slider -10,10,500,50,x,X
385
	slider -10,10,500,50,y,Y
386
	# these objects act -if selected- on the above sliders
387
	katex 3,3,\frac{123}{123^{\pi}}
388
	centered
389
	obabel 0,0,smi,-:c1cccc1cc,-xb none -xP100
390
	filled
391
	fillcolor blue
392
	angle 0,0,4,0,0,red
393
	killslider
394
	linewidth 4
395
	slider -10,10,500,50,angle,Rotate rect
396
	# if selected this object will use only the above slider
397
	frect -5,5,-4,4,red
398
	##########################################################
399
	```
15271 bpr 400
 
16849 obado 401
* 15/5/2020:
402
	- further reduced size of 'plain' grid (like 'grid 1,1,grey')
403
	- using uniform "slidergroup[object_cnt] = object" to avoid difficulies with reply's of dragstuff/xml [IN PROGRESS]				         __
404
	- slider appearance changed to :  _____\/______________
7614 schaersvoo 405
 
16849 obado 406
	- xml-objects (katex/latex/mathml/html) and slider: onclick will activate slider for object and deactivate after second click
14071 bpr 407
 
16849 obado 408
	```
409
	size 500,500
410
	xrange -6,6
411
	yrange -6,6
412
	grid 1,1,grey
413
	fontfamily 42px Arial
414
	strokecolor red
415
	fillcolor orange
416
	#rotationcenter 0,0
417
	slider -12,12,500,50,angle,rotate
418
	katex 0,0,\frac{1}{2}
419
	katex 3,3,\frac{1}{3}
420
	katex -3,3,\frac{9}{3}
421
	#latex 0,0,\frac{1}{2}
422
	#latex 3,3,\frac{1}{3}
423
	#latex -3,3,\frac{9}{3}
424
	obabel 0,5,smi,-:c1cFccc1cc,-xb none,-xB blue,-xi,-xt,-xa,-xX,-xP100,-h
425
	html 3,-3,<img src='gifs/en.gif' />
426
	html 4,-2,<H2>OK?</H2>
427
	html -4,-2,<input size='4' value='?" />
428
	```
14071 bpr 429
 
16849 obado 430
	- added import of 'TD' and 'TH' elements with an unique 'id' and onclick='javascript:place_image_on_canvas(this.id)' to the canvas
14071 bpr 431
 
16849 obado 432
* 13/5/2020:
433
	- fixed several incompatibilities
434
	- moved legend_cnt,linegraph_cnt barchar_cnt variables (used by 'grid') to global. reducing the size of default grid
435
 
436
* 12/5/2020:
437
	- reorganized command copy/copyresized: reply is now js-object, identical to dragstuff library
438
	- onclick/drag of 'copy images' transparent integration with dragstuff objects onclick/drag and external XML material
439
	- slider is not supported for flydraw analogues copy/copyresized : use command `html x,y,<img src='gifs/en.gif' />`
440
	- IOS fixed (thx Olivier Obado)
441
	- renamed variable 'click_cnt' into 'object_cnt' : it counts all interactive (onclick,dragdrop,slider) objects and results
15111 schaersvoo 442
    in a uniform 'reply' object{}
14071 bpr 443
 
16849 obado 444
* 8/5/2020:
445
	- finished commands 'html','katex','latex','mathml' using draw_xml()
15271 bpr 446
    with 'html' virtually all material can be imported
15111 schaersvoo 447
    affine operations and sliders are supported
16849 obado 448
	- corrected reply & slider
449
* 6/5/2020:
450
	- added imported object to sliders [work in progress]
451
	- added rotation center to draw_xml(obj); [only for command katex]
452
* 5/5/2020:
453
	- changed draw_xml() to object, for importing svg,img,div,p,span,mathml,katex in canvasdraw
454
	- added transformation matrix to draw_xml(). Preparing for slider manipulation of imported objects
455
* 3/5/2020: corrected error avoiding multiple calls to 'obabel'
456
* 1/5/2020: killed 'stderr' default message from 'obabel' : "converted 1 molecule"
457
* 30/4/2020:
458
	- added command 'katex x,y,tex-string'
459
	- thus bypassing cludge between firefox/mathml/mathjax/katex
460
	- for traditional wims (using MathML) use command 'latex x,y,tex-string' or 'mathml x,y,xml-code'
461
	- for katex-only wims, use only 'katex'
462
	- solved 'centered' and 'snaptogrid' issues dealing with drag&drop of generated 'svg/mathml/xml/html/js-code'
463
	- added link to 'howto katex and wims'
7614 schaersvoo 464
 
16849 obado 465
* 21/4/2020:
466
	- using execvp() to call "obabel" , using $PATH
7614 schaersvoo 467
 
16849 obado 468
* 20/4/2020:
469
	- changed command 'smiles' into 'obabel'
470
	- now all formats may be used as input
471
	- obabel 5,5,mol,$module_dir/mymolfile.mol,-xb none,-xB blue,-xi,-xt,-xa,-xX,-xP180,-h
472
	- obabel -5,-5,smi,-:c1ccFccc1,-xb none,-xB blue,-xi,-xt,-xa,-xX,-xP180,-h
473
	- added check on 'forbidden argument' to call obabel
14071 bpr 474
 
16849 obado 475
* 18/4/2020:
476
	- added command 'smiles args' , calling -if installed- 'obabel' to produce an SVG image
477
	- added command 'chemtex' , adding "mhchem.js" for typesetting (needs to come first!)
478
	- chemtex: added bogus code for mathjax. THIS WILL ONLY WORK ON KATEX ENABLED WIMS !
479
 
480
```
15111 schaersvoo 481
chemtex
482
size 400,400
483
xrange -10,10
484
yrange -10,10
485
fillcolor green
486
grid 1,1,grey
487
drag xy
488
centered
489
smiles 5,5,-:c1cFccc1cc,-xb none,-xB blue,-xi,-xt,-xa,-xX,-xP180,-h
490
rotate 180
491
drag xy
492
centered
493
smiles -5,-5,-:c1cFccc1cc,-xb none,-xB blue,-xi,-xt,-xa,-xX,-xP180,-h
494
drag xy
495
rotate -90
496
centered
497
smiles -5,5,-:c1cFccc1cc,-xb none,-xB blue,-xi,-xt,-xa,-xX,-xP180,-h
498
zoom red
499
drag xy
500
killrotate
16849 obado 501
fontfamily 32px Arial
15271 bpr 502
latex 0,0,\frac{1}{2} \ce{H3O+}
16849 obado 503
```
7991 schaersvoo 504
 
16849 obado 505
* 15/3/2020:
506
	- command latex ; improve code...minor cosmetic things (need to test on android)
507
	- changed syntax command html : 'html x,y,some-html-code'
508
	- drag/drop centering for html/latex/mathml/images
509
 
510
```
15111 schaersvoo 511
size 500,500
512
xrange -10,10
513
yrange -10,10
514
grid 1,1,grey
515
linewidth 3
516
vline 0,0,green
517
hline 0,0,green
16849 obado 518
fontfamily 16px Arial
15111 schaersvoo 519
fillcolor red
520
strokecolor blue
521
drag xy
522
centered
523
latex 0,0,\frac{12345}{23456} \times \frac{12345}{23456}
524
drag xy
525
centered
526
latex 5,5,\frac{12345}{\frac{12345}{ \frac{12345}{12345}}}
527
centered
528
drag xy
529
html -5,5,<table border=1><tr><td>1234567</td></tr><tr><td>1234567</td></tr><tr><td>1234567</td></tr><tr><td>1234567</td></tr></table>
530
drag xy
531
centered
532
copy 5,-5,-1,-1,-1,-1,gifs/images/skull_and_crossbones50.png
533
centered
534
drag xy
535
html 5,0,<img src=gifs/images/skull_and_crossbones50.png />
16849 obado 536
```
7991 schaersvoo 537
 
538
 
16849 obado 539
* 13/3/2020:
540
	- corrected stupid error in default replyformat
541
	- added support for touch/android for 'drag_xml()' 'drag_external_images()'
542
	- unified onclick/drag&drop answer format for MathML,JS_TeX,bitmap-images,html5-canvas-objects
543
	- compiler warnings (BPR)
14071 bpr 544
 
16849 obado 545
* 10/3/2020:
546
	- command 'rotate angle (deg)' now works for 'draw_xml()' e.g. for commands like latex,mathml,html,video,audio etc
547
	- corrected drag&drop reply for external things...
8112 schaersvoo 548
 
16849 obado 549
* 7/3/2020:
550
	- command functionlabel is now converted to js-array "functionlabel f(x)=:g(x)=:h(x)=:f'(x)="
551
	- so multiple funtion inputs may all have different colours and function agruments
8112 schaersvoo 552
 
16849 obado 553
* 6/3/2020:
554
	- added alternative command 'userdraw function,color' , is identical to 'userinput function'
555
	- added alternative command 'userdraw functions[n],color' , is identical to n-times 'userinput function' (n=1..9)
556
	- command 'multistrokecolors' or 'multicolors' may be used for setting  function argument/plot colour
14071 bpr 557
 
16849 obado 558
* 15/2/2020:
559
	- corrected flaw in drawing+zooming+multiple jscurves
560
	- userinput for arrows and polylines (forgotten and corrected)
561
	- zooming js-curves created by 'userinput function' (or should it be 'userdraw function'?...)
15111 schaersvoo 562
    will adapt to new x/y-ranges after re-clicking the 'draw' or 'OK' button. This is a flaw and not a feature !!
563
 
16849 obado 564
* 13/2/2020:
565
	- corrected stuff related to 'onclick'
566
	- corrected combo of clickreply+dragreply
15111 schaersvoo 567
 
16849 obado 568
* 11/2/2020:
569
	- corrected commands 'arc' and 'angle'
570
	- reset() will not reset the 'use_rotate' eg only 'killrotate' will set 'angle = 0.0'
571
	- default css_class="none"
572
	- corrected flaw in command 'input' ('style' is no longer needed...-> css)
15111 schaersvoo 573
 
16849 obado 574
* 9/2/2020:
575
	- restored command 'userinput function|inputfield'
576
	- 'userdraw text,color' uses `text_inputfield+mouse` and/or `text_inputfield+xy-inputfields`
15271 bpr 577
 
16849 obado 578
* 7/2/2020:
579
	- made a few corrections (Marina)
580
	- 'userinput inputfield'
15111 schaersvoo 581
 
16849 obado 582
* 6/2/2020:
583
	- added (forgotten) 'userdraw demiline(s),color'
584
	- restored command 'userinput inputfields|textarea|function'
15111 schaersvoo 585
 
16849 obado 586
* 5/2/2020:
587
	- forgotten rotation/translation for object 'segment'
588
	- restored 'setlimits' and added 'redraw_jsplot()'
589
	- added 'jsplot' to 'zoom'
15111 schaersvoo 590
 
16849 obado 591
* 4/2/2020:
592
	- restored copy/copyresized with onclick or drag xy
593
	- start with affine transformation without using canvas/html5 transform system (e.g. drag&drop&click will work for transformed objects)
15111 schaersvoo 594
    [work in progress]
16849 obado 595
	- added commands 'linear a,b,c,d' and 'killlinear|killinear' (flydraw compatibility needs to be tested)
596
	- updated internal doc's; (todo : example scripts)
597
	- added forgotten userdraw arrow(s)2,color
15111 schaersvoo 598
 
16849 obado 599
* 31/1/2020:
600
	- cleaning: removed unused js-functions
601
	- work in progress: combined drag/drop external images, draggable copy/resized images and dragstuff objects
15111 schaersvoo 602
 
16849 obado 603
* 30/1/2020:
604
	- userdraw zooming ; marked 'canvas-zoom-buttons' forbidden (eg clicking on zoom will not produce extra userdrawing clicks...)
605
	- start with cleaning...
15271 bpr 606
 
16849 obado 607
* 29/1/2020:
608
	- minor stuff
15111 schaersvoo 609
 
16849 obado 610
* 28/1/2020:
611
	- restored 'userdraw dotfill...textfill,color|text' (pattern filling)
612
	- restored 'userdraw inputs'
613
	- changed 'style' for elements by command 'css some_css' for buttons etc (style="xxxx" --> class="xxxx" )
15111 schaersvoo 614
 
16849 obado 615
* 26/1/2020:
616
	- restored 'userdraw clickfill,color' (the lrest like 'userdraw dotfill,color' not yet ready)
15111 schaersvoo 617
 
16849 obado 618
* 25/1/2020:
619
	- rightmouse click removes last drawn userdraw thing
15111 schaersvoo 620
(including svg/div/p/span/images/inputfields...eg non-canvas elements)
16849 obado 621
	- restored 'userdraw inputs,color'
15271 bpr 622
 
16849 obado 623
* 24/1/2020:
624
	- restored "userdraw" image(s),arc(s),parallelogram(s)  etc
15111 schaersvoo 625
 
16849 obado 626
* 22/1/2020:
627
	- moving "userdraw" things to separate file, simular to "multidraw"
15111 schaersvoo 628
    work in progress...not all primitives are implemented.
629
    giving further reduction of resulting javascript filesize
630
 
16849 obado 631
* 17/1/2020
632
	- zooming : added mouse wheel zoom-in-out
15111 schaersvoo 633
	    : restored panning and reset (x) is now back to original x|y min|max
634
	    : added basic support for touch devices
635
	    : TODO adjust zooming params
636
 
16849 obado 637
* 16/1/2020
638
	- removed unused variables (clang, compiled with: -Weverything)
639
	- zoom & drag/drop
640
	- TODO: zoom & other-grid-types ; use mousewheel & tablets?
15111 schaersvoo 641
 
16849 obado 642
* 11/1/2020
643
	- corrected long standing design flaw (zooming would reset dragged objects...)
644
	- modified command grid (concering zooming)
645
	- TODO : rethink zooming & panning !!
15111 schaersvoo 646
 
16849 obado 647
	```
648
	##############
649
	performance/size_reductions:
650
 
651
	U1/logic/oefmap.fr&+cmd=new&defaultlist=free01&+exo=free01&+qnum=1&+scoredelay=&+seedrepeat=0&+qcmlevel=1
652
		- old canvasdraw version approx 40 kb
653
		- new canvasdraw version approx 20 kb
654
		- latest canvasdraw version approx 18 kb
655
 
656
	H5/analysis/gebieden-1.nl&subject=4&level=0&total_exos=3&rounding=-1&usage=2&taal=nl
657
		- old canvasdraw version approx 83 kb
658
		- new canvasdraw version approx 38 kb
659
	##############
660
	```
15111 schaersvoo 661
 
16849 obado 662
	- split large files into fragments:still needs some further shifting/reorganizing
663
	- multidraw: add draw primitive: crosshair | crosshairs (draw_type no. 25 | 26)
664
    TODO: arc,angle,ellipse??
15111 schaersvoo 665
 
16849 obado 666
	- multidraw: finished fillpatterns
15111 schaersvoo 667
 
16849 obado 668
```
8379 schaersvoo 669
size 400,400
670
xrange -10,10
671
yrange -10,10
15111 schaersvoo 672
grid 1,1,grey
673
linewidth  3
674
snaptogrid
675
multilinewidth 1,2,3,1,2,3
676
multifillcolors red,green,blue,brown,cyan,yellow
677
multistrokecolors red,green,blue,brown,cyan,yellow
678
#solid, grid, hatch, diamond, dot, none
679
multifill 1,2,3,4,0
680
multidraw rects,circles,triangles,poly5,parallelogram,points
16849 obado 681
```
8379 schaersvoo 682
 
16849 obado 683
* 10/1/2020
684
	- simplified 'fillpattern' for static and dynamic objects
685
	- multidraw:
15111 schaersvoo 686
    started with implementing fillpatterns for multidraw (only rects/circles for now)
687
    command: multifill 0,1,2,3,4,5 ... none,fillcolor,grid,hatch,diamond,dot
688
    image filling not yet ready...
16849 obado 689
	- corrected flaw in 'ellipses'
690
	- corrected docs for 'ellipse | ellipses'
691
	- corrected zoom issue (minimized code increase)
8448 schaersvoo 692
 
16849 obado 693
* 8/1/2020
694
	- added a few other object to "non-html5-canvas" rotation
14071 bpr 695
 
16849 obado 696
* 6/1/2020
697
	- "stringup" now can be "onclick & dragdrop"
15111 schaersvoo 698
eg: stringup == string+angle+mouse_rotation-code
699
note: no need to reset rotation through 'killrotate'
16849 obado 700
 
701
	```
702
	onclick
703
	rotate 45
704
	string red,0,0,AAAAAA
705
	killrotate
706
	string red,4,4,BBBBBB
707
	```
708
 
709
	is identical with:
710
 
711
	```
712
	onclick
713
	stringup red,0,0,45,AAAAAA
714
	string red,4,4,BBBBBB
715
	```
14071 bpr 716
 
16849 obado 717
	- dragstuff using C-switch
718
	- code kbytes:
14071 bpr 719
 
16849 obado 720
```
15271 bpr 721
 minimal: 		 4 kb
15111 schaersvoo 722
 grid only: 		15 kb
723
 userdraw only: 	10 kb
724
 multidraw single:	18 kb
725
 multidraw all: 	40 kb
726
 onclick + objects: 	14 kb
727
 drag xy + objects: 	14 kb
728
 typical exercise : 	30 kb
16849 obado 729
```
15271 bpr 730
 
16849 obado 731
* 4/1/2020
732
	- moved dragstuff code : needs to simplify
733
	- start to move HTML5/Canvas transformation things to canvasdraw.c:
734
		- e.g. just recalculate the coordinates for objects: so there is no need for recalculating mouse coordinates in case of onclick/drag
735
		- except for 'text' and ?
736
		- keep optional mouse coordinate recalculation when using HTML5 transformations...
9266 schaersvoo 737
 
15271 bpr 738
 
16849 obado 739
* 11/2019
740
	- rewrite of multidraw code and removal of verbatim js-code
741
	A few notes:
742
	- command 'inputstyle' will be used for setting 'css class' of the multidraw control table
15111 schaersvoo 743
    for example: inputstyle wimstable
16849 obado 744
	- when using a single draw primitive , command 'multilable nocontrols' will remove the 'control buttons'
745
	- when using keyword "duplicates" || "allowdups"  multiple identical points will NOT be removed from the student answer/reply
746
	- drag&drop math typesetting onto canvasdraw image:
747
	    - multidraw|userdraw images will only work with Mathml (through !insmath etc) if you use the 'wims modules svn' version of wims_mathml !!
748
		- e.g. things like !insdraw  \mmlid{123} \frac{1}{\pi}
749
		- of course the 'id' will only be added to a single call: this will NOT work: \mmlid{1} \frac{1}{\pi} + \mmlid{2} \frac{\pi}{2}
750
	   - multidraw|userdraw images and MathJaX will not work !
751
	   - multidraw|userdraw images and native MathML and KaTeX will work
752
	- drag&drop external material onto canvasdraw image:
753
		- all objects/content of type 'p','span','div','bitmap image','svg image' with an unique 'id' and
15111 schaersvoo 754
       onclick handler "onclick='javascript:place_image_on_canvas(this.id)'" may be placed onto a canvasdraw image
755
       when 'userdraw images,boguscolor' or 'multidraw images,...' is declared.
16849 obado 756
	- currently implemented multidraw primitives:
757
		*     "point","points",
758
		*     "circle","circles",
759
		*     "line","lines",
760
		*     "segment","segments",
761
		*     "arrow","arrows",
762
		*     "triangle","triangles",
763
		*     "closedpoly",
764
		*     "text",
765
		*     "rect","rects",
766
		*     "poly","polys",
767
		*     "parallelogram","parallelograms",
768
		*     "images",
769
		*     "curvedarrow","curvedarrows",
770
		*     "curvedarrow2","curvedarrows2"
15271 bpr 771
 
16849 obado 772
	- TODO: add a few more draw primitives, like
15111 schaersvoo 773
    "crosshair(s)","ellipse(s)","arc(s) || angle(s)"...
15271 bpr 774
 
775
 
15111 schaersvoo 776
############## REWRITE ################################
11769 schaersvoo 777
 
15111 schaersvoo 778
added 'angle' to draw_xml()10/4/2020
779
typo in 'case 12' command 'arc'
16849 obado 780
 
781
* 23/3/2020
15111 schaersvoo 782
added alternative commands for a few 'multidraw' subcommands
783
typo in doc
16849 obado 784
* 29/1/2020
15111 schaersvoo 785
stringup may now be set onclick (drag&drop not supported: is implemented in 'canvasdraw.min')
786
corrected non-univeral path to wims_mathml
16849 obado 787
* 6/1/2020
15111 schaersvoo 788
forgotten to reset angle=0 in 'killrotate'
16849 obado 789
 
790
## 2019
791
* 26/12/2019
15111 schaersvoo 792
NO support for dragging and transformation / rotations
793
generic mouse coordinate transformation ( transform_mouse(x,y,obj) ) usable for 'affine transformation' and 'onclick'
16849 obado 794
* 25/12/2019
15111 schaersvoo 795
 
796
"drag" and "rotate" WILL NOT WORK !!
797
"onclick" and "rotate" may be combined. (see createxo help "rotate")
798
 
799
adjusted documentation.
800
string/text using 'xoffset','xyoffset','yoffset' will now use a 2*linewidth marge
801
22/12/2019
802
 
16849 obado 803
object 10: clicked
15271 bpr 804
object 9 : clicked
15111 schaersvoo 805
object 8 : not clicked
806
object 7 : not clicked
807
object 6 : clicked
808
object 5 : moved from (1:2) -> (2:2)
809
object 4 : not moved
810
object 3 : moved from (1:1) -> (3:3)
811
object 2 : moved from (1:3) -> (3:2)
812
object 1 : moved from (1:0) -> (2:1)
813
object 0 : not moved
814
reply = ["not_moved", "1:1:0:2:1:0", "2:0:1:3:2:0", "3:1:1:3:3:0", "not_moved", "5:1:2:2:2:0",1,0,0,1,1]
15271 bpr 815
for example:
15111 schaersvoo 816
 
817
the clicked objects are '0' or '1'
818
obj_number,xorg[0],yorg[0],xnew[0],ynew[0],new_angle
819
moved object are items in the javascript reply array...in the same order as their appearance in the fly_script
820
unmoved object are labelled "not_moved" !
821
"onclick" and "drag x|y|xy" may now be used together and all data be read using "read_dragdrop()"
822
 
823
[ these are bugs, not features... ]
824
drag xy & rotate are only compatible if you are using a 'slider'
825
onclick & rotate are not compatible
826
impoved mouse selection of text (height of selection box was not ok)
827
corrected missing font-change when text was set 'onclick' [BPR]
828
 
16849 obado 829
* 21/12/2019
15111 schaersvoo 830
corrected wrong hexcolor conversion [Sophie Lemaire]
16849 obado 831
 
832
* 12/11/2019
15111 schaersvoo 833
if set, multiple identical points will NOT be removed from the student answer/reply
834
added keyword "duplicates" || "allowdups" for default "multidraw" replyformat
16849 obado 835
* 9/11/2019
15111 schaersvoo 836
corrected multidraw curvedarrows numeric input [BPR]
16849 obado 837
* 8/11/2019
838
correction in multidraw circles : list_uniq(A,B,C) will reserve 'C' for non-numeric answers !
15111 schaersvoo 839
 
16849 obado 840
* 2/11/2019
15271 bpr 841
this will break module "H4/logic/logica-1.nl/exos/exo14" (only dutch module, so no serious conflicts)
15111 schaersvoo 842
reply format for "multidraw" in case of "circles" will give radius in x-range [BPR]
843
 
16849 obado 844
* 2/11/2019
845
 
846
```
15111 schaersvoo 847
#######
848
}
849
<input type="button" onclick="alert(read_dragdrop());" value="read_dragdrop()" />
850
<input type="button" onclick="alert(read_canvas());" value="read_canvas()" />
851
 
852
 
853
</script>
854
 find_images();
855
 };
856
  };
857
   };
858
    img.setAttribute('onclick','javascript:place_image_on_canvas(this.id);');
859
    idx++;
860
    img.setAttribute('id','drag_'+idx);
861
   if(id.indexOf('insert')!= -1){
862
   var id = img.id;
863
   var img = images[p];
864
  for(var p=0;p<len;p++){
865
  var idx=0;
866
  var len = images.length;
867
  var images = document.getElementsByTagName('img');
868
 /* look for images with 'insert' in the 'id'*/
869
 function find_images(){
870
 };
871
   if(typeof fun === 'function'){return fun();};
15271 bpr 872
   var fun = eval("read_dragdrop"+canvas_scripts[0]);
15111 schaersvoo 873
 function read_dragdrop(){
874
 };
875
   if( typeof fun === 'function'){ return fun();};
876
   var fun = eval("read_canvas"+canvas_scripts[0]);
877
 function read_canvas(){
878
<script type="text/javascript">
879
 
880
</table>
15271 bpr 881
 <tr><th> <img src="gifs/en.gif"  id="insert_en" /> </th><th>  <img src="gifs/nl.gif"  id="insert_nl" /> </th><th>  <img src="gifs/cn.gif"  id="insert_cn" />  </th><th>  <img src="gifs/it.gif"  id="insert_it" />  </th></tr>
882
 <tr><th> \I1   </th><th> \I2 </th><th> \I3 </th><th> \I4 </th></tr>
883
 <tr><th> \(\M1\) </th><th> \(\M2)</th><th> \(\M3) </th><th> \(\M4\) </th></tr>
884
 <tr><th> M1   </th><th> M2 </th><th> M3 </th><th> M4 </th></tr>
15111 schaersvoo 885
<table border="1">
886
}
887
# multidraw images
888
userdraw images,red
11764 schaersvoo 889
snaptogrid
15111 schaersvoo 890
centered
891
grid 2,2,grey,1,1,6,grey
892
axisnumbering
893
axis
894
precision 1
895
yrange -10,10
896
xrange -10,10
897
bgcolor white
898
\canvasdraw{500,500}{
11769 schaersvoo 899
 
15111 schaersvoo 900
\statement{
11820 schaersvoo 901
 
15111 schaersvoo 902
\text{divstyle="display:inline-block;width:auto;text-align: center;"}
15271 bpr 903
\text{I4=<img style="width:50%;height:50%" onclick="javascript:place_image_on_canvas(this.id);" src="modules/data/chemistry/mol2D.fr/images/100_39_0.png" id="I4" />}
15111 schaersvoo 904
\text{I3=<img style="width:50%;height:50%" onclick="javascript:place_image_on_canvas(this.id);" src="modules/data/chemistry/mol2D.fr/images/1002_69_3.png" id="I3" />}
905
\text{I2=<img style="width:50%;height:50%" onclick="javascript:place_image_on_canvas(this.id);" src="modules/data/chemistry/mol2D.fr/images/1002_57_9.png" id="I2" />}
906
\text{I1=<img style="width:50%;height:50%" onclick="javascript:place_image_on_canvas(this.id);" src="modules/data/chemistry/mol2D.fr/images/1002_28_4.png" id="I1" />}
907
\text{M4=\mmlid{M4}\xrightarrow{\rm N_2 \uparrow}}
908
\text{M3=\mmlid{M3}\xrightarrow{\rm O_2 \uparrow}}
909
\text{M2=\mmlid{M2}\xrightarrow{\rm H_2 \uparrow}}
910
\text{M1=\mmlid{M1}\xrightarrow{\text{reaction}}}
911
##### example OEF...
16849 obado 912
```
11823 schaersvoo 913
 
16849 obado 914
	- 'userdraw images,bogus color' : right mouse click removes item/object under mouse pointer
915
	- solving issue with size of dynamic created div's in 'userdraw images,color' and 'multidraw images'
11823 schaersvoo 916
 
16849 obado 917
* 26/9/2019
15111 schaersvoo 918
 
919
multidraw images
920
userdraw images,red
921
using command:
922
including KaTeX or MathJaX js-typesetting, MathML,bitmap, and any other html content,
923
All 'svg','div','span' elements on page may be used to drop onto canvas,
16849 obado 924
 
925
* 17/9/2019
15111 schaersvoo 926
on touch devices the canvasdraw inputfields could not be used
927
add attrubute autofocus,true to function 'add_inputs()'
928
 
16849 obado 929
* 8/9/2019
15111 schaersvoo 930
will now accept anything from the exercise page (including MathML,MathJaX,KaTeX typesetting) if included a 'div' with unique id and onclick='javascript:place_image_on_canvas(this.id);'
931
multidraw images
15271 bpr 932
userdraw images,somecolor
15111 schaersvoo 933
 
16849 obado 934
* 5/9/2019
15111 schaersvoo 935
case killslider: replaced 'int p' by loop indicator 'i' [obado]
936
 
16849 obado 937
* 27/8/2019
15111 schaersvoo 938
TEMPORARY ---> all browsers are type 'GECKO' and MathJaX will take care of all others in command 'latex'
939
 
940
in case of KaTeX only use command 'latex x,y,tex_string'
941
command mathml is only suitable for "GECKO" and "NON-GECKO+MathJaX"
942
command latex calls 'getMML()' e.g. 'wims_mathml'  in case of "GECKO"
943
 
16849 obado 944
* 26/8/2019
15111 schaersvoo 945
Needs looking into. In mathml.c: katex div: 'display:block;visibility:hidden'./SCHAERSVOORDE/H1/algebra/vergelijkingen-1.nl/exos/exo9:mathml 0,10,10,0,$fun\
15271 bpr 946
setting 'drag_type = -1' to drag KaTeX with left top corner...problems reading width of created div's/span's
15111 schaersvoo 947
WORK IN PROGRESS ( canvasdraw will need to call wims_mathml in case of GECKO browsers!)
948
to be used for KaTeX
949
Added command 'latex x,y,tex-string
950
 
16849 obado 951
* 25/8/2019
952
 
953
```
15111 schaersvoo 954
fcircles blue,3,3,1
955
drag xy
956
angle 0,0,2,0,0,red
957
fillpattern dot
958
arrow 0,0,5,0,7,red
959
fillcolor blue
960
slider -pi,pi,250,30,angle degrees,Rotate
961
opacity 200,100
962
fillcolor white
963
rotationcenter 0,0
964
linewidth 3
965
precision 1000
966
yrange -5,5
11820 schaersvoo 967
xrange -5,5
15111 schaersvoo 968
size 300,300
16849 obado 969
```
15111 schaersvoo 970
 
15271 bpr 971
- click on 'reset' will deactivate all
15111 schaersvoo 972
- click on objects will activate
973
- command 'angle x0,y0,x1,y1,angle,color' will always be active in case of a rotation slider.
974
- drag x|y|xy may be combined with slider(s)
975
- snapto* will not work !
976
in slider exercises:
977
 
978
onclick and dragdrop may be combined, but is not really usefull :)
979
- every onclick object starts with obj.onclick_cnt = 0... when clicked obj.click_cnt = 1
980
- only the first element of a row is important (obj.click_cnt), which is 0 or 1
981
in onclick exercises
982
 
983
- obj.click_cnt is the objects sequence number (starting with '0' for the first draggable object in the script)
984
- only clicked objects have a line in the reply
985
in dragdrop exercises:
986
 
987
obj.click_cnt+','+obj.xorg[0]+','+obj.yorg[0]+','+current_x+','+current_y+','+current_angle+';\\n
988
dragdrop reply is now in format:
989
broken modules adapted
990
 
16849 obado 991
* 15/8/2019
992
 
15111 schaersvoo 993
   -- todo: restore slider 'follow_function system'
15271 bpr 994
6) -- todo: restore xy-slider??
15111 schaersvoo 995
6) finished: reply&display precision and reply-format
15271 bpr 996
5) finished: restored slider display 'system'
15111 schaersvoo 997
4) finished: slider rotation with preservation of coordinates e.g. 'mouse dragging' is supported
998
3) finished: group selection (just by clicking...no 'lasso')
15271 bpr 999
2) finished: real coordinates when using 'drag & manual rotating' objects
15111 schaersvoo 1000
1) finished: multiple sliders per object or objects (until 'killslider')
1001
targets:
1002
 
16849 obado 1003
* 8/2019 rewriting of slider stuff (reponse to request/question of BPR)
15111 schaersvoo 1004
 
16849 obado 1005
* 10/8 correctedd stupid typo in DRAW_EXTERNAL_IMAGES
15271 bpr 1006
and corrected snapping to grid
15111 schaersvoo 1007
corrected flaw in multidraw cirle [BPR]
16849 obado 1008
* 3/7/2019
15111 schaersvoo 1009
removed 'touchend' (MC)
16849 obado 1010
* 22/6/2019
15111 schaersvoo 1011
(changes should be made, not yet fixed)
1012
work on the documentation: add '' ``for emphased words and <code></code>
16849 obado 1013
* 08/06/2019
1014
`userdraw circles,red`
15111 schaersvoo 1015
is identical to
16849 obado 1016
`multidraw circles
1017
strokecolor red
1018
multilabel NOCONTROLS`
15111 schaersvoo 1019
 
1020
in multidraw NOCONTROLS and a single object, no need for a 'draw object' button. It's analogue to userdraw.
1021
in multidraw right mouse click will remove last drawn object of the currently selected  draw primitive
16849 obado 1022
 
1023
* 7/6
15111 schaersvoo 1024
added ruler & protractor to new multisnap_check(x,y,use_snap);
1025
 
16849 obado 1026
```
15111 schaersvoo 1027
#<input type='button' onclick='javascript:var fun=eval("clear_draw_area"+canvas_scripts[0]);fun(9,0);' value='REMOVE LAST ARROW ' />
1028
<input type='button' onclick='javascript:var fun=eval("clear_draw_area"+canvas_scripts[0]);fun(24,0);' value='REMOVE LAST CURVEDARROW2 ' />
1029
<input type='button' onclick='javascript:userdraw_primitive=24;multidraw_click_cnt = 0;' value='start drawing curvedarrows2' /> etc etc
1030
<input type='button' onclick='javascript:userdraw_primitive=null' value='STOP DRAWING' />
16849 obado 1031
```
15111 schaersvoo 1032
controls for example:
16849 obado 1033
 
1034
```
15111 schaersvoo 1035
curvedarrows2 = 24
1036
curvedarrow2 = 23
1037
curvedarrows = 22
1038
curvedarrow = 21
1039
images = 20
1040
parallelograms = 19
1041
parallelogram = 18
1042
polys[3-9] = 17
1043
poly[3-9] = 16
1044
rects = 15
1045
rect = 14
1046
text = 13
1047
closedspoly = 12
1048
triangles = 11
1049
triangle = 10
1050
arrows = 9
1051
arrow = 8
1052
segments = 7
1053
segment = 6
1054
lines = 5
1055
line = 4
1056
circles = 3
1057
circle = 2
1058
points =1
1059
point = 0
16849 obado 1060
```
15111 schaersvoo 1061
The object types are internally represented by the following numbers (makeing typo's will render your exercise null and void)
1062
To activate this feature, use multilabel NOCONTROLS
1063
When you are not content with the default 'multidraw control panel', you can create your own interface, using a few javascript functions to call the drawprimitives, delete things and 'stop drawing' in case you also want to drag&drop stuff...
1064
### from doc's
1065
6/6 added keyword 'NOCONTROLS' to disable all buttons for multidraw
1066
 
1067
command 'drag xy|x|y' was fallen of the wagon...
1068
 
1069
don't touch replyformat 29: it is universal and for multidraw  !
1070
todo: modify/change 6,10,11,15,16,17,18,19,20,25,27,31
1071
 
1072
OEF : replyformat		22,23,28
1073
USERDRAW DEFAULTS: replyformat  2,6,8,10,11,15,16,17,18,19,20,23,24,25,27,29,31
1074
SCHAERSVOORDE : replyformat	2,7,8,21,22,23,24
1075
Starting with unifying the 'replyformat' jungle...without touching existing modules
1076
A single function "multisnap_check(x,y,use_snap)" will return xy[2] array with corrected  coordinates
1077
 
16849 obado 1078
* 5/6 removed confusing code about 'snapping to something' and unified it in a single variable 'use_snap=0,1,2,3,4' for 'dragstuff library', 'userdraw' and 'multidraw'
1079
* 4/6 modified 'find_angle()' now using Math.atan2(x,y) ... smooth turning 360+ without flipping...see 'protractor'
1080
 
1081
```
1082
<script>
15111 schaersvoo 1083
 resize_svg_mathml(mythings);
1084
 var mythings = [ array_with_image_id's ];
1085
 };
1086
  };
1087
   svg.setAttribute("width", w+'px');
1088
   svg.setAttribute("height", h+'px');
1089
   var h = parseInt(getComputedStyle(div).height);
1090
   var w = parseInt(getComputedStyle(div).width);
1091
   var div = document.getElementById(mythings[p+1]);
1092
   var svg = document.getElementById(mythings[p]);
1093
  for(var p=0; p < len ; lpp){
1094
  var len = mythings.length;
1095
 function resize_svg_mathml( mythings ){
1096
<script type="text/javascript">
1097
To resize and used the svg element, a small piece of javascript is needed..
1098
</svg>
1099
</foreignObject>
1100
<div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;width:auto;text-align: center;" > MATHML </div>
1101
<foreignObject width="100%" height="100%">
1102
<svg xmlns="http://www.w3.org/2000/svg" width="1px" height="1px" onclick="javascript:place_image_on_canvas(this.id);" id='my_id'>
16849 obado 1103
```
1104
when the MathML code is embedded in a foreignObject, a div and an svg with size 1px, like in:
15111 schaersvoo 1105
On Gecko browsers there is an option to include MathML from the page onto the canvas,
1106
The 'id' and (x;y) coordinates will be returned using read_canvas();
16849 obado 1107
`<img src="somewhere" id="myid" onclick="javascript:place_image_on_canvas(this.id)" alt="hmm" />`
15111 schaersvoo 1108
Images (bitmap or svg) present in the exercise page and the img-tag with an unique 'id' and onclick='javascript:place_image_on_canvas(this.id)' can be placed onto the canvas.
1109
(*)
1110
 
1111
multidraw curvedimages,curvedimages2
1112
multidraw images  (*)
1113
userdraw curvedimages2,color
1114
userdraw curvedimages,color
1115
userdraw curvedimage2,color
1116
userdraw curvedimage,color
1117
userdraw images,boguscolor (*)
1118
using: in canvasdraw.c: int use_snap = 0; /* 0 = none 1=grid : 2=x-grid : 3=y-grid : 4=snap to points ... to finally harmonize the 'snap to grid etc etc */
1119
using multisnap_check(x,y,snap_type)
1120
preparing replyformat 29 (multidraw) as generic reply system (every object has a line, every line is a matrix)
1121
Merged with wimsmodules:
1122
 
1123
 
1124
y1,y2,yc,...
1125
x1,x2,xc,...
1126
default replyformat = 2
1127
 
16849 obado 1128
* 3/6 curvedarrow now has 3 points :
1129
 
15111 schaersvoo 1130
added to multidraw family 'curvedarrow' and 'curvedarrow2'
1131
added to dragstuff library objects 'curvedarrows color,x1,y1,xc,yc,x2,y2,...' and  'curvedarrows2 color,x1,y1,xc,yc,x2,y2,...'
1132
just to be complete...
1133
added to dragstuff library objects 'curvedarrow x1,y1,xc,yc,x2,y2,color' and  'curvedarrow2 x1,y1,xc,yc,x2,y2,color'
1134
added 'userdraw curvedarrow2,color' and 'userdraw curvedarrows2,color'
16849 obado 1135
 
1136
* 1/6/2019
15111 schaersvoo 1137
TODO: add curvedarrow to dragstuff object library
1138
TODO: multidraw curvedarrow
1139
TODO: 'userdraw curvedarrow2,color' and  'userdraw curvedarrows2,color'
16849 obado 1140
* 31/5/2019 added userdraw primitive 'userdraw curvedarrow,color' and  'userdraw curvedarrows,color'
1141
* 15/5/2019 dragging external images now centers the image around the mouse pointer
15111 schaersvoo 1142
all other drag&drop things (canvas related and div's (from xml/mathml) seem to work fine, only dragging of images fails
1143
this -however- does not seem to correct the problem om 'styled' wims-servers [BPR].
1144
draw_external images now makes use of the same dragstuff.getMouse()
16849 obado 1145
* 14/5/2019 problems with dragging images...
1146
* 13/5/2019 bugfix command angle|arc combined with command 'slider'...slidervalue is in radians...arc|angle needs degrees
1147
* 11/5/2019 add some examples for OEF [BPR] (work in progress)
1148
* 4/3/2019 corrected fontsize behaviour of command 'text' (always trouble between 'fontsize' and 'fontfamily' commands) [BPR]
1149
* 2/2/2019 corrected behaviour of replyformat 11 etc (dealing with (x1:y1)---<x2:y2) )
15111 schaersvoo 1150
 
16849 obado 1151
```
15111 schaersvoo 1152
jsplot red,4*cos(2*x),2*sin(3*x-pi/6),cos(x),3*sin(x),3*cos(x),sin(x),x,x^2
1153
multistrokecolors red,red,blue,blue,green,green,orange,orange
1154
precision 1000
1155
linewidth 1
1156
animate
1157
trange -pi,pi
1158
fillcolor blue
1159
linewidth 4
1160
grid 1,1,grey,4,4,7,black
1161
opacity 100,190
1162
axisnumbering
1163
axis
1164
precision 0
11820 schaersvoo 1165
yrange -5,5
15111 schaersvoo 1166
xrange -5,5
1167
size 400,400
16849 obado 1168
```
15111 schaersvoo 1169
(command animate may only be used once)
16849 obado 1170
 
1171
* 28/12 multiple animated curves using command jsplot
1172
* 25 --> 26
15111 schaersvoo 1173
corrected "snprintf(tmp_buffer,25,"use_mouse_coordinates();\n");add_to_buffer(tmp_buffer);"
16849 obado 1174
* 15/10 BPR
1175
* 12/4 piechart will show 'legend' text inside piechart when using keyword 'centered': use fill opacity to enhance visibility
1176
* 14/3/2018 draw_crosshairs: forgotten ctx.save(); (crosshairs will 'move' with every click...)
1177
* 13/11 live docs
1178
* 12/11 added command 'ellipses'
1179
* 6/11 added few things to "live documentation" work in progress
1180
* 18/10 reoganised string/text keywords 'centered','xoffset','yoffset','xyoffset'
1181
* 8/10 remove duplicates while drawing 2-point objects (circle/line/demiline/segment/rect)
15111 schaersvoo 1182
 
16849 obado 1183
* 4/10 work in progress: adding examples to documentation (the "example:"  flag can be used to extract)
15111 schaersvoo 1184
 
16849 obado 1185
* 2/10 fixed bugs (thx B.Perrin)
1186
* 28/9 bug fix : variable use_axis_numbering was reset by introduction of numberline command...
1187
* 20/9 bug fix in command curve (a parameter was wrongly set, resulting in curve being type=13 (is a circle) insteadof type=9
15111 schaersvoo 1188
 
16849 obado 1189
```
15111 schaersvoo 1190
mouse blue,22
1191
precision 1
1192
userinput function
1193
functionlabel f(x)=
1194
strokecolor green
1195
jsplot red,4*cos(2*x),2*sin(3*x-pi/6)
1196
precision 1000
11820 schaersvoo 1197
linewidth 1
15111 schaersvoo 1198
animate
1199
trange -pi,pi
1200
fillcolor blue
1201
linewidth 4
1202
grid 1,1,grey,2,2,5,black
1203
opacity 100,190
1204
axisnumbering
1205
axis
1206
precision 0
1207
yrange -5,5
1208
xrange -2*pi,2*pi
1209
size 400,400
1210
popup
16849 obado 1211
```
11824 schaersvoo 1212
 
16849 obado 1213
* 17/9 added basic 'point_on_curve' animation (parametric and 'normal' functions)
11837 schaersvoo 1214
 
16849 obado 1215
```
15111 schaersvoo 1216
zoom red
1217
numberline -5,5,2,10,-3.5,-3
1218
zoom red
1219
xaxis -4:AAAAA:-2:BBBBB:2:CCCCC:4:DDDDD
1220
strokecolor purple
1221
numberline -5,5,1,8,-2,-1.5
1222
xaxisup -4:AAAA:-2:BBBB:2:CCCC:4:DDDD
1223
strokecolor blue
1224
numberline -5,5,1,5,2,2.5
1225
xaxis -4:AAA:-2:BBB:2:CCC:4:DDD
1226
strokecolor green
1227
numberline -5,5,1,4,4,4.5
1228
xaxisup -4:AA:-2:BB:2:CC:4:DD
1229
strokecolor red
1230
opacity 255,255
1231
grid 1,1,grey
1232
hline 0,0,black
1233
xaxis -4:A:-2:B:2:C:4:D
1234
noyaxis
1235
yrange -5,5
11837 schaersvoo 1236
xrange -5,5
15111 schaersvoo 1237
size 400,400
16849 obado 1238
```
15111 schaersvoo 1239
     adding y-offset when x-values overlap.
1240
     multiple numberlines are allowed using multiple 'xaxis' commmands for labeling several numberlines, including a x-axis label in command grid...
1241
     numberline is mapped to xrange/yrange
16849 obado 1242
* 15/9 added command macro "numberline x0,x1,xmajor,xminor,y0,y1"
15111 schaersvoo 1243
 
1244
     solved long  standing issue with color 0,0,0 (black) as fill border
1245
     added 'fixed' pattern filling to primitives 'boxplot' and 'piechart'
16849 obado 1246
* 6/9  just for completeness: added pattern filling to all fillable userdraw primitives
15111 schaersvoo 1247
 
16849 obado 1248
```
15111 schaersvoo 1249
clearbutton removed
1250
userdraw gridfill,red
1251
circle 10,10,100,red
1252
imagefill 0,0,0,gifs/en.gif
1253
# syntax: x,y,scale?,image
1254
plot blue,-x^2+4
1255
plot red,x^2-4
11837 schaersvoo 1256
yrange -5,5
15111 schaersvoo 1257
xrange -5,5
1258
size 150,150
16849 obado 1259
```
11839 schaersvoo 1260
 
15111 schaersvoo 1261
NOTE: special filling (hatch,dot,...,image) should be harmonized to include userdraw and drag&drop library objects !!
1262
26/8 command imagefill x0,y0,URL now works like flydraw should
1263
 
16849 obado 1264
```
15111 schaersvoo 1265
fcircle 2,-3,100,cyan
11854 schaersvoo 1266
drag xy
15111 schaersvoo 1267
fillpattern gifs/fr.gif
1268
fcircle 2,3,100,green
11854 schaersvoo 1269
drag xy
15111 schaersvoo 1270
fillpattern gifs/de.gif
11854 schaersvoo 1271
fcircle -2,-3,100,red
1272
drag xy
15111 schaersvoo 1273
fillpattern gifs/nl.gif
1274
fcircle -2,3,100,blue
11854 schaersvoo 1275
drag xy
15111 schaersvoo 1276
fillpattern gifs/en.gif
1277
snaptogrid
1278
yrange -5,5
1279
xrange -5,5
1280
size 400,400
16849 obado 1281
```
14071 bpr 1282
 
16849 obado 1283
note: needs an alert for synchrone loading of images (TO DO: closures in fill routines ? )
1284
 
1285
* 25/8	added commmand 'fillpattern image_url' to use an image as 'ctx.fillStyle()'
1286
* 20/8	added patternfilling to 'userdraw' family
1287
 
1288
```
15111 schaersvoo 1289
zoom red
1290
userdraw dotfill,blue
1291
fcircle 3,-3,160,cyan
1292
filpattern diamond
1293
fcircle 0,3,160,green
1294
fillpattern hatch
1295
fcircle -3,-3,160,red
1296
fillpattern dot
1297
fcircle -6,3,160,blue
1298
fillpattern grid
1299
opacity 165,160
1300
yrange -5,5
11858 schaersvoo 1301
xrange -5,5
15111 schaersvoo 1302
size 370,370
16849 obado 1303
```
11874 schaersvoo 1304
 
16849 obado 1305
* 18/8	added command 'fillpattern grid | dot | hatch | diamond'
1306
* 14/8 	added commands 'textfill x,y,color,sometext' and 'userdraw textfill,color,some_text'
1307
* 13/8	updated html docs
11891 schaersvoo 1308
 
16849 obado 1309
```
15111 schaersvoo 1310
clearbutton REMOVE
1311
fill 0,5,red
1312
gridfill 4,0,3,3,blue
1313
diamondfill -4,0,6,6,cyan
1314
dotfill 0,0,6,6,green
1315
linewidth 1
1316
userdraw hatchfill,red
1317
plot blue,-x^2+4
1318
plot red,x^2-4
1319
yrange -5,5
11891 schaersvoo 1320
xrange -5,5
15111 schaersvoo 1321
size 150,150
16849 obado 1322
```
11891 schaersvoo 1323
 
15111 schaersvoo 1324
	userdraw clickfill,color (will use only color,no pattern)
1325
	userdraw hatchfill,color
1326
	userdraw dotfill,color
1327
	userdraw gridfill,color
1328
	userdraw diamondfill,color
11893 schaersvoo 1329
 
16849 obado 1330
* 12/8  added to userdraw family (not yet 'cleaned' the js-code)  the commands:
1331
* 11/8  function 'find_angle' was gone fishing in case of command 'protractor'
1332
        added gridfill,hatchfill,diamondfill
15111 schaersvoo 1333
example:
1334
     added pattern to command 'userdraw clickfill,color'
1335
     other patterns will -hopefully- follow
16849 obado 1336
* 10/8 premature version of pattern filling ; for now only 'dotfill x,y,dx,dy,color'
15111 schaersvoo 1337
     if set the text will not start at given (x:y) but end at (x:y)
16849 obado 1338
* 8/8  added keyword 'yoffset' for use with rotated text strings (command textup or stringup)
1339
* 4/8  multidraw primitive 'text' is now always x-centered on click-coordinates
15111 schaersvoo 1340
     reorganized canvasdraw.c : commands in alfabetical order (cleaning & formatting not yet ready)
1341
     (added 'this.use_once')
16849 obado 1342
* 3/8  corrected flaw introduced by keywords xyoffset etc... removed repeated shifting of text-strings in redraw of canvas
15111 schaersvoo 1343
     the inputfields will be x/y centered on (x:y)... default was left top corner
1344
     keyword xoffset also active for commands 'input x,y,size,editable,value'  and 'userdraw input(s),color'
16849 obado 1345
* 2/8  added keywords xyoffset,xoffset|centered,resetoffset for easier text-label placing close to 'objects' like crosshairs,points...
1346
* 26/7 multidraw_button_table now centered in tooltip placeholder div element (using style="margin: 0 auto;" )
1347
* 25/7 multidraw command 'text' now will place a 'text string' on canvas via a mouse-click or (if command multiuserinput is set to 1 for 'text') via x/y inputfields
1348
* 24/7 corrected multidraw text error (duplicate text)
1349
* 15/7 added command 'fillall color,x1,y1,x2,y2,x3,y3...xn,yn' for filling multiple speparated areas with the same color
1350
* 14/7 set timeout on clickfill and while waiting set cursor to 'wait'
11996 schaersvoo 1351
 
16849 obado 1352
```
15111 schaersvoo 1353
clearbutton REMOVE
1354
userdraw clickfill,purple
1355
colorpalette orange,yellow,red,green,lightgreen,blue,lightblue,cyan
1356
# multifillcolors orange,yellow,red,green,lightgreen,blue,lightblue,cyan
1357
replyformat 10
1358
snaptogrid
1359
grid 1,1,grey
1360
canvastype 4
1361
# use the grid canvas 4 as fill borders
1362
yrange -5,5
1363
xrange -5,5
13514 schaersvoo 1364
size 400,400
16849 obado 1365
```
15111 schaersvoo 1366
example of a simple clicktile in direct exec:
13521 schaersvoo 1367
 
16849 obado 1368
      this will bind coordinates with color...if the exercise wishes.
15111 schaersvoo 1369
      added command 'colorpalette color1,color2...color2' for creation of color-buttons to change the click color.
14038 schaersvoo 1370
 
15111 schaersvoo 1371
      to identify the correct color on the correct area...
1372
      When using something like 'replyformat 10' or another format reporting the 'userdraw_radius[]' the color-number will be part of 'read_canvas()'
1373
      the colors will re-cycle when there are more clicks than colors...
16849 obado 1374
 
1375
* 13/7  'userdraw clickfill,color' may now make use  of command 'multifillcolors color1,color2,color3...color_n'
15111 schaersvoo 1376
      fill commands may be used together with 'userdraw clickfill,color'
1377
      (it will still ignore the bordercolor...I just can't make this work... grrr )
1378
      comman 'filltoborder x,y,bordercolor,color' is still the same as fill
1379
      command 'fill x,y,color' or 'floodfill c,y,color' may now be used multiple times.
14035 schaersvoo 1380
 
15111 schaersvoo 1381
      read_canvas() will return the click-coordinates
1382
      areas can be removed (after confirm 'clear ?' ) with command 'clearbutton some_text'
16849 obado 1383
* 11/7  now 'userdraw clickfill,color' can fill multiple selected area's
15111 schaersvoo 1384
      (although this is possible through foreignobject --> blob --> image --> canvas )
16849 obado 1385
      will be located at (1:0) and the mathml will decide the width and height of the drag/click div's (the div's are added to the 'mother' div and not -of c ourse- to the html5 canvas
1386
 
1387
      ```mathml 1,0,-10000,10000, <span style="font-size:1em;">
1388
      <math xmlns="http://www.w3.org/1998/Math/MathML" display="inline">
1389
       <mstyle id="wims_mathml347806" mathsize="110%">
1390
        <mstyle mathsize="200%">
1391
         <mstyle displaystyle="true">
1392
          <mfrac>
1393
           <mi>?</mi>
1394
           <mrow><mi>sin</mi>
1395
            <mrow>
1396
             <mo stretchy="true">(</mo>
1397
             <mstyle displaystyle="true">
1398
              <mfrac><mi>?</mi><mi>?</mi></mfrac>
1399
             </mstyle>
1400
             <mo stretchy="true">)</mo>
1401
            </mrow>
1402
           </mrow>
1403
          </mfrac>
1404
         </mstyle>
1405
        </mstyle>
1406
       </mstyle>
1407
      </math></span>```
1408
 
15111 schaersvoo 1409
      so the left top corner of
1410
      however, the  values must still be defined (syntax backwards compatibility)
16849 obado 1411
 
1412
* 8/7   command mathml will use fill_color/fill_opacity when dragged / clicked ; x2,y2 (used for determining the width/height of the embedded mathml div, are no longer used
1413
* 6/7   improved onclick & (standard) reply format
1414
* 5/7   improved drag&drop in case of mathml (or better all xml/html inclusives)
1415
* 4/7   corrected -again?- color cludge in 'barchart'...
1416
* 20/5  added forgotten minimal touch-support for multidraw routines
15111 schaersvoo 1417
      drag xy|x|y and [xy]snaptogrid are supproted
1418
      (it's not really dragging , but selecting and moving to a new location by click)
16849 obado 1419
* 12/2  added very primitive dragging to 'mathml'
14038 schaersvoo 1420
 
16849 obado 1421
	```
15111 schaersvoo 1422
      line 11 = text_x+";"+text_y+";"+text"\n"
1423
      line 10 = parallelogram_x+";"+parallelogram_y+"\n"
1424
      line 9 = closedpoly_x+";"+closedpoly_y+"\n"
1425
      line 8 = rects_x +";"+rects_y+"\n"
1426
      line 7 = polys[3-9]_x+";"+polys[3-9]_y+"\n"
1427
      line 6 = triangles_x+";"+triangles_y+"\n"
1428
      line 5 = lines_x+";"+lines_y+"\n"
1429
      line 4 = arrows_x+";"+arrows_y+"\n"
1430
      line 3 = segments_x+";"+segments_y+"\n"
1431
      line 2 = circles_x+";"+circlespoint_y+";"+multi_radius+"\n"
1432
      line 1 = points_x+";"+points_y+"\n"
16849 obado 1433
   ```
15111 schaersvoo 1434
      The output is always a 11 lines string with fixed sequence.
14038 schaersvoo 1435
 
15111 schaersvoo 1436
      multiple parallograms may be used: the coordinates are stored in "line 10" in the reply
1437
      multiple polys[3-9] may be used: poly[3-9] or polys[3-9] has "line 7" in the reply
1438
      removed command poly[s][3-9] and parallelogram[s] from 'triangle' sub-command and used as additional commands.
1439
      command multidraw
16849 obado 1440
* 9/2
1441
 
1442
## 2017
15111 schaersvoo 1443
      the same  canvas :making it possible to do a 'userdraw clickfill,color' & pan & zoom on the single js-curves-canvas
16849 obado 1444
* 30/10 added some options to command jsplot/jscurve: multiple js-curves may now be plot in a single command and on
15111 schaersvoo 1445
      But it's still a vary ugly cludge caused by the "Flydraw backwards compatibility"
1446
      then this family&size will be used.
1447
      if command "fontfamily 'size px Family'" was given and the size of "m" is larger then a set/default fontsize
16849 obado 1448
      the context will use this fontsize in Arial...
1449
      if command "fontsize int" is given and it's size is larger than the default fontfamily "12px Arial"
1450
 
1451
      ```
15111 schaersvoo 1452
      ###
16849 obado 1453
      if( font_size > tmp_font_size ){context_userdraw.font = font_size+\"px Arial\";};
15111 schaersvoo 1454
      var tmp_font_size = parseInt(context_userdraw.measureText(\"m\").width);\
1455
      ###
16849 obado 1456
      ```
15111 schaersvoo 1457
      corrected cludge of fontsize versus fontfamily :
1458
      color was taken from fontcolor... and not from userdraw command... which is color --> strokecolor
16849 obado 1459
* 29/10 corrected "userdraw text,color" :
1460
      `x1,y1,text1 \n x2,y2,text2 \n` etc
15111 schaersvoo 1461
      changed the default replyformat for 'userdraw text,color' and 'userdraw input(s),color' to the type:
1462
      (in both cases a right | middle button click will always remove the drawings
1463
      and added to 'clearbutton' the removal of inputfields produced by command "userdraw input(s),color"
16849 obado 1464
* 28/10 corrected ctx-reset flaw in "userdraw text,color" when removing text with the "clearbutton xxx"
1465
* 24/10 command vline | hline now have range -100*xmin | 100*ymax : so on "moderate" zooming there will still be a vline | hline
1466
* 13/10 added keywords "noxaxis" "noyaxis" to "grid" command family
1467
* 8/10  canvasinfo.sh will (after chmod +x) generate also canvasdraw.phtml and move it to "../../../public_html/scripts/help/en"
15111 schaersvoo 1468
      so now every userdraw object may be deleted (indiviually) by a right mouse click...middle click still no good
1469
      added 'oncontextmenu="return false;"' to main canvas_div to disable context menu with right click on image
16849 obado 1470
* 7/10  added snapto*** to "userdraw clickfill,color"
1471
* 6/10  moved command "clickfill color" to the userdraw command list e.g. userdraw clickfill,color: clickfill is per default on the drag_canvas (unless you specify an other canvastype)
1472
* 5/10  added support for touch devices
1473
* 30/9  `clear_draw_area()` used by "clearbutton txt"  did not reset the internal click-count-variable "xy_cnt"
1474
* 29/9  corrected errors in replyformat 23 (B. Perrin)
1475
* 26/9  tried to solve the syntax issues with polyline etc
1476
* 11/9  added an option to command clock (and corrected the modulo bug :javascript remainder % is not the same as modulo)
15111 schaersvoo 1477
      added some html info
16849 obado 1478
* 10/9  corrected slider display (arguments "display x" and "display y" always showed "x : y" values
1479
* 4/7   using '\t' as command separator (for use within OEF)
1480
*       difference between 'arc' and 'angle': 'arc' may set width+height (ellipse)
1481
* 15/2 corrected filling in command 'arc'
1482
* 4/2  added command 'rotationcenter xc,yc' and keyword 'killrotate'
1483
* 3/1  corrected fontsize flaw in commands text / textup
1484
 
1485
## 2016
1486
	removed nonexisting 'div' argument 'tabindex=0' (thx to Perrin)
1487
 
1488
* 29/12 clearbutton was incompatible with chromium etc (revert to button.style = "style_text" when all browsers are supporting this construct)
1489
* 18/9 corrected command 'centerstring' : forgotten clearRect()
1490
* 17/9 corrected command clock: colors are now -really- optional
1491
*       corrected -fixed- interactive boxplot stuff (js-related)
1492
* 15/9 disabled 'crispy-lines' when zooming is activated (repeated translation of context)
1493
*       e.g. producing crispy sharp lines : if(line_width %2 == 1){ctx.translate(0.5,0.5);}
1494
* 12/9 now linewidth 1 == 1px and linewidth 2 == 2px
1495
* 5/9  added command boxplot and jsboxplot
1496
* 3/9  added commands xerrorbars,yerrorbars to dragdrop library
15111 schaersvoo 1497
      minor corrections in html-doc for fontsize ; although it will not compensate for 'not-reading-the-docs' !
1498
      corrected flaw in draw_points()
1499
      (the single command 'userdraw type,color) will NOT ZOOM / PAN !!)
16849 obado 1500
* 30/8 multidraw primitives will now zoom / pan (added function redraw_all())
1501
       added several alternatives to html-doc
1502
* 25/8 added command 'cursor some_css_cursor'
1503
* 20/8 added 'rect' and 'rects' to multidraw command
1504
* 10/8 added 'xaxisup' and modified grid extension 'barchart' using the xminor/x2step for the bar-width...
1505
* 2/8   added 'text' to 'multidraw'
1506
* 	when status=done the image will be shown in the page --> canvas_div.style.display='block'
1507
* 28/7  read_canvas and read_dragdrop in popup window
1508
*        no yet suitable for communication back to wims...[work in progress]
1509
*        embedding canvasdraw into separate window xsize x ysize
1510
* 26/7  added keyword 'popup'
1511
* 21/7  added command `triangles color,x1,y1,x2,y2,x3,y3,...`
14038 schaersvoo 1512
 
16849 obado 1513
```
15111 schaersvoo 1514
# reply[3]...reply[5] = protractor
1515
# reply[0]...reply[2] = ruler
1516
replyformat 32
14044 schaersvoo 1517
 
15111 schaersvoo 1518
protractor 2,-2,6,0,-1,1,1
1519
ruler -4,3,5,1,-1,1
1520
opacity 255,40
1521
fillcolor orange
14071 bpr 1522
 
15111 schaersvoo 1523
vline 0,0,black
1524
hline 0,0,black
1525
yrange -5,10
1526
xrange -5,10
1527
size 400,400
16849 obado 1528
```
14053 schaersvoo 1529
 
16849 obado 1530
* 14/7 combinations of ruler & protractor
1531
* 13/7 added command macro `ruler x,y,x-width ,y-height,passive_mode`
15111 schaersvoo 1532
	snaptogrid implementes ( xy | x | y )
16849 obado 1533
 	reply format implemented  `(read_canvas())  reply[0] = x;reply[1] = y;reply[2]=angle_in_radians`,
1534
 	value display implemented,
1535
 	left-right rotation with mouse (left click & drag),
1536
 	zooming implemented,
1537
* 12/7	added 'macro' command 'protractor x,y,x-width,type,passive_mode,value_display
1538
* 8/7	revert to normal size of a point at 'linewidth = 1' (e.g. differ from ridiculous small point size of flydraw)
15111 schaersvoo 1539
	This last -duplicated- point is removed from the answer array
1540
	only 1 onject can be drawn (only with mouse).The poly is closed when clicking on the first point again (+/- 10px)
16849 obado 1541
* 7/7	added argument 'closedpoly' to command 'multidraw'
14063 schaersvoo 1542
 
15111 schaersvoo 1543
	When things are more mature and speed is no longer an issue, the 'single userdraw' command will be replaced by multi*
1544
	And yes, these are horrible long command names.
1545
	multifillopacity,multiuserinput,multilabel,multilinewidth,multisnaptogrid
1546
	multidraw,multidash,multistrokecolors,multifill,multifillcolors,multistrokeopacity,
16849 obado 1547
* 26/6	multi-family of commands are 'finished'
15111 schaersvoo 1548
        NOT READY: many issues are still unadressed
14071 bpr 1549
 
15111 schaersvoo 1550
	(to increase speed of execution)
1551
	The js-canvas drawfunctions will be different (simpler) compared with the single 'userdraw obj,color' functions
1552
	using buttons to switch drawing primitive...
16849 obado 1553
* 17/6   added experimental 'multidraw', allowing multiple drawing primitives in a single canvas image,
14208 schaersvoo 1554
 
15111 schaersvoo 1555
	added command 'snaptofunction some_fun_x,some_fun_y'
14208 schaersvoo 1556
 
16849 obado 1557
		frect -3,3,0,0,red
1558
		slider -5,5,120,10,x function display,some_text
1559
		sliderfunction_x 5*sin(x)
1560
 
1561
		'sliderfunction_y some_operation_on_y'
1562
		'sliderfunction_x some_operation_on_x'
1563
		added command
1564
		added argument 'function' to the slider objects.
1565
* 28/4	removed point2point...
1566
* 24/4	added experimental command 'point2point x,y,color1,color2,x-relation_1:y-relation_1: ... : x-relation_n_:y-relation_n
15111 schaersvoo 1567
	make background color in generated <span> elements adjustable via command 'fillcolor'
1568
	make font color in generated <span> elements adjustable via command 'strokecolor'
1569
	todo:
16849 obado 1570
* 23/4	removed most static settings of fontsize and/or style.
1571
* 22/4	corrected 'static fontsize settings' in some js-user-input stuff, using size set by 'command fontsize int'... to be continued
1572
* 21/4	corrected missing 'ctx.restore()' in case of arrow (gives very strange  rotations when using a slider to rotate only the arrow...)
1573
* 19/4	changing "abs" by "fabs" in case of floating point variables. (BPR)
1574
* 8/4	added forgotten /*<![CDATA[*/ .... /*]]>*/ to script tag
1575
* 25/2	Internet Explorer & "use strict" : changed 'span.style="color:..." into span.setAttribute('style','color:...');
14208 schaersvoo 1576
 
15111 schaersvoo 1577
	 (even those not set draggable)
1578
	 note: all external images positions will be present in the 'read_canvas' array
1579
	 the third image position is (-2:-5)
1580
	 the second image position is (6:2) and
1581
	 the first image position is (-5:4) ,
1582
	 0:-5:4,1:6:2,2:-2:-5
1583
	 e.g. expect in  case of 3 external images set draggable, something like
1584
	 read_canvas() will reply "object_number:x:y" of all external images introduced by commands 'copy copyresized'
16849 obado 1585
 
1586
	- corrected replyformat 20 (only used for external image drag&drop... outside the dragstuff library !!)
1587
	- corrected resetting of 'reply array' in case of zooming... (why did I reset this?)
1588
* 17/2
1589
	- added check on wims_status=done when using 'onclick' (otherwise objects can be 'clicked/dragged' in an answer.phtml)
1590
	- simplified onclick things in external images
1591
	- fixed bug when onclick external images were mixed with static external images
1592
* 16/12 - corrected 'userdraw points,color' erase/redraw bug (using 'clearbutton buttontxt')
1593
* 7/12	- onclick objects may now be of any type (eg external images ,via copy /copyresized or any other canvas 'object')
15111 schaersvoo 1594
	 see canvassdraw.html for possible usage and limitations
16849 obado 1595
* 25/11 - added "onclick" to external images (via commands copy / copyresized)
15111 schaersvoo 1596
	-again tried to fix copy/copyresized (grrr)
1597
	 and thus reset to "0,0,0"
16849 obado 1598
* 24/11
1599
	- corrected syntax-flaw in js-function draw_rects() ; both stroke_color and fill_color were not correctly defined
15111 schaersvoo 1600
          analogue to command 'ellipse'
16849 obado 1601
	- corrected command 'arc' : switched from width/height (width and height may now be different) in pixels to width / heigth in x/y-range
15111 schaersvoo 1602
          now "linewidth 1" is almost invisible, just as in 'flydraw'...that is a clear improvement :)
16849 obado 1603
	- synchronised size of point / points with flydraw
15111 schaersvoo 1604
          The image may be of type BITMAP and SVG
1605
          (even if there is no external image imported)
16849 obado 1606
* 23/11	- solved issue with drawing onto external images: now a empty 'external_image' canvas is created first / per default...
15111 schaersvoo 1607
	  image operations are now performed on a "real canvas" and no longer on a "canvas_div"
16849 obado 1608
* 22/11
1609
	- joined draw_external_images and drag_external_images
15111 schaersvoo 1610
	- changed output "function distance()" from integer to floating point. (slightly better in case of snaptopoints)
16849 obado 1611
* 9/11
1612
	- fixed bug of increasing font_size when using multiple 'text' commands [perrin]
15111 schaersvoo 1613
	- added "xsnaptogrid,ysnaptogrid,snaptogrid,snaptopoints" to dragging of 'external images'
1614
	- "click_cnt" counter (to identify the object in reply) only incremented when 'onclick' and / or "drag x|y|xy" is set.
1615
	- added "snaptopoints" to userdraw primitives and drag&onclick library
16849 obado 1616
* 6/11	- corrected dragging (dragging was missing...) of closed polygon (triangle etc)
1617
```
15111 schaersvoo 1618
userdraw arrow,blue
1619
#userdraw arrows2,blue
1620
arrowhead 10
1621
linewidth 2
1622
snaptopoints 0,0,-6,0,-3,3,0,6,3,3,6,0,3,-3,0,-6,-3,-3
1623
points red,-6,0,-3,3,0,6,3,3,6,0,3,-3,0,-6,-3,-3
1624
point 0,0,blue
1625
linewidth 3
1626
yrange -10,10
1627
xrange -10,10
1628
size 400,400
16849 obado 1629
```
15111 schaersvoo 1630
	 only implemented in command "userdraw arrow(s),color"
16849 obado 1631
* 5/11
1632
   - added experimental command "snaptopoints x1,y1,x2,y2,..."
1633
   - added command "bezier color,xs,ys,x1,y1,x2,y2,x3,y3"
1634
   - added alernative to command "polyline" : "path color,x1,y1,x2,y2,...."
1635
   - added command "roundrects color,radius,x1,y1,x2,y2,...."
1636
   - added command "vlines color,x1,y1,x2,y2,...."
1637
   - added command "hlines color,x1,y1,x2,y2,...."
1638
   - added command "demilines color,x1,y1,x2,y2,...." alternative "halflines"
1639
* 3/11   - added commands "rects color,x1,y1,x2,y2,...." and "frects color,x1,y1,x2,y2,...."
1640
* 2/11   - docs
1641
* 1/11
1642
   - corrected font behaviour of Flydraw text command.
15111 schaersvoo 1643
        Flydraw command "lines" is equivalent to "polyline"
1644
        "polyline" | "polylines" | "brokenline" | "brokenlines" will produce interconnected segments between the points (not closed)
1645
        "lines" will produce not connected lines through points (x1:y1)--(x2:y) etc
16849 obado 1646
   - syntax changed for command "lines color,x1,y1,x2,y2...x_n-1,y_n-1,x_n,y_n"
1647
   - corrected command "clearbutton some_text" : multiple interactive scripts in web page may have individual 'clear drawing buttons'
1648
   - corrected crosshair_size
15111 schaersvoo 1649
	can be set draggable / onclick individually
14208 schaersvoo 1650
 
16849 obado 1651
* 29/10
1652
	- added command "arrows2 color,head px,x_1a,y_1a,x_1b,y_1b,x_2a,y_2a,x_2b,y_2b....x_na,y_na,x_nb,y_nb
1653
	- added 'replyformat 28' to reinput date from 'userdraw circles,color' [perrin]
1654
* 17/10
1655
	- removed empty string error warning in 'char *get_string_argument(); [perrin]
1656
	- removed macro "iscalculation" and replace it by something better...
1657
	- added command "arrows color,x1,y1,x2,y2...x_n,y_n
15111 schaersvoo 1658
        note: radius is not in pixels but in xy-coordinate system ! (so dragging / onclick / scaling works )
16849 obado 1659
* 11/10
1660
	- added command "circles color,x1,y1,r1,x2,y2,r2...x_n,y_n,r_n
15111 schaersvoo 1661
	like: "0.2345^1.234x" will receive a warning : it should be "(0.2345)^(1.234x)"
1662
	(but they have a small footprint...)
16849 obado 1663
	- added warnings when plot function input has "syntax" issues...well it's more likely that my simple math-parsers are too simple
1664
	- added command segments color,x1,y1,x2,y2....x_n,y_n  	[perrin]
1665
	- added simple javascript "rawmath" to convert user function input (like : 4x --> 4*x)
15111 schaersvoo 1666
	 default value 'f(x)='
16849 obado 1667
	- added command 'functionlabel some_string' to label the specific inputfields for function input
1668
 
1669
* 9/10
1670
	- now multiple functions may be plotted by user via 'userinput function' and read via read_canvas()
1671
 
1672
```
1673
	  function read_dragdrop(){
1674
	  var script_len = canvas_scripts.length;var dragdrop_reply = "";var found_result = false;for(var p = 0 ; p < script_len ; p++){var fun = eval("read_dragdrop"+canvas_scripts[p]);if(typeof fun === 'function'){var result = fun();if( result && result.length != 0 ){if(script_len == 1 ){ return result;};found_result = true;dragdrop_reply = dragdrop_reply + result +"\n";};};};if( found_result ){return dragdrop_reply;}else{return null;};};
15111 schaersvoo 1675
	  <!-- will return all 'drag&drop' or 'onclick' data from all canvas javascript includes -->
1676
	  };
1677
	   };
1678
	    return null;
1679
	   {
1680
	   else
1681
	   }
1682
	    return draw_reply;
1683
	   if( found_result ){
1684
	   };
1685
	    };
1686
	     };
1687
	      draw_reply = draw_reply + result + "\n";
1688
	      found_result = true;
1689
	      if(script_len == 1 ){ return result;};
1690
	     if( result  && result.length != 0){
1691
	     var result = fun();
1692
	    if( typeof fun === 'function'){
1693
	    var fun = eval("read_canvas"+canvas_scripts[p]);
1694
	   for(var p = 0 ; p < script_len ; p++){
1695
	   var found_result = false;
1696
	   var draw_reply = "";
1697
	   var script_len = canvas_scripts.length;
1698
	  function read_canvas(){
1699
	  <!-- will return all 'userdraw' or 'userinput' data from all canvas javascript includes -->
16849 obado 1700
```
15111 schaersvoo 1701
	 A special version of 'read_canvas()' and 'read_dragdrop()' should be included in the web page, something like this:
14208 schaersvoo 1702
 
16849 obado 1703
	 In the C-program, the local functions will be called `read_canvas%d()` with '%d' is the random `canvas_root_id`
1704
	 array `canvas_scripts` will keep track of the `canvas_root_id` number of scripts included in the page.
1705
	 The native `read_canvas()` and `read_dragdrop()` are now linked to the `canvas_root_id` and a global
14225 schaersvoo 1706
 
16849 obado 1707
* 1/10	-multiple interactive canvasdraw scripts in a single page may now work correctly in replying the userdrawarrays and the drag&drop data..
1708
* 25/9	-added command 'demiline x1,y1,x2,y2,color` and commands 'userdraw demiline,color' 'userdraw demilines,color'
1709
* 22/9	-corrected missing js-variable declaration in 'userdraw path(s) ' [use strict]
1710
* 20/9	-added userinput function | input | textarea as alternative command + argment to keywords "userinput_function","userinput_textarea" and "userinput_xy"
1711
* 11/9	-tried to improve 'filltoborder x,y,bordercolor,fillcolor'
1712
* 10/9	-added keyword 'userinput_function'
1713
* 9/9	-corrected placement of inputfields 'userdraw inputs,color' (no longer can input fields be placed on top of each other
1714
* 30/8
1715
	- added command 'clearbutton button_text' to remove all user drawings from userdraw_canvas (and empty all userdraw data arrays)
15111 schaersvoo 1716
	(although I'm not happy to increase the size of the general part of the include file)
1717
	...sometimes functions expect these array's to be defined [use strict]
1718
	- added userdraw_x = [],yserdraw_y = [],userdraw_radius = [] to global section of javascript include
16849 obado 1719
* 29/8
1720
	- corrected 'display radius,color,fontsize' in case there is no 'userdraw circle,color' defined
1721
	- corrected 'use strict' problems with 'clock'
15111 schaersvoo 1722
	display x | y | xy | degree | radius ,color,fontsize
16849 obado 1723
 
1724
* 28/8
1725
	- added argument 'radius' to mousedisplay (in case of 'userdraw circle,color'
15111 schaersvoo 1726
	x_input_1:y_input_:1input_value_1,x_input_2:y_input_:2input_value_2...
16849 obado 1727
	- added 'replyformat 27' : read_canvas() will return array
1728
* 27/8	- corrected flaw [sigalled by 'use strict'] in 'userdraw text,color'
1729
* 26/8	- added command 'userdraw input,color' and 'userdraw inputs,color' [work in progress]
15111 schaersvoo 1730
	 type: x display | y display | xy display | angle degree | angle radian
1731
	 display slider values, use:
1732
	 type: x | y | xy | angle
1733
	 slider min,max,width,height,type,string
14230 schaersvoo 1734
 
16849 obado 1735
* 24/8	- reverted to originale command 'display' and modified slider arguments to support a per slider display of it's value in the main canvas window
15111 schaersvoo 1736
	 work in progress
16849 obado 1737
* 23/8	- added 'slider | slider_degree | slider_radian' to command "display x|y|xy|degree|slider|slider_degree|slider_radian,color,fontsize"
14232 schaersvoo 1738
 
16849 obado 1739
```
15111 schaersvoo 1740
zoom blue
1741
userdraw segment,orange
1742
string black,0.9,0.1,P
1743
fontfamily italic 24px Courier
1744
point 1,0,orange
1745
linewidth 4
1746
angle 0,0,0.3,0,0,green
1747
fillcolor yellow
1748
filled
1749
segment 0,0,1,0,orange
1750
linewidth 2
1751
slider 0,2*pi,200,40,angle degree,use slider to rotate point P
1752
circle 0,0,200,red
1753
fillcolor white
1754
grid 1,1,grey,4,4,10,blue
1755
xaxis 0:0:1:1:2:2:3:3:4:4:5:5:6:6:0.5*pi:\u03c0/2:pi:\u03c0:1.5*pi:3\u03c0/2:2*pi:2\u03c0:3*pi:3\u03c0:4*pi:4\u03c0
16849 obado 1756
fontfamily bold 14px Arial
15111 schaersvoo 1757
opacity 200,150
1758
axis
1759
yrange -1,1
1760
xrange -1,7
1761
size 800,200
16849 obado 1762
```
1763
    for example:
1764
    	if the grid does not match the xaxis values:strings there will be extra tics
15111 schaersvoo 1765
	- added x/y-tics in command 'grid xmajor,ymajor,color,xminor,yminor,tics-size,axiscolor'  case of command 'xaxis' or 'yaxis'
16849 obado 1766
 
1767
* 21/8
1768
	- corrected rotation direction in case of 'slider type angle' (anti-clockwise)
15111 schaersvoo 1769
	- removed 'animate' from dragstuff library : this should be done with a kind of slider...TO DO !!
1770
	  hope this works for all browsers...tested on FreeBSD Opera/Firefox/Seamonkey/Chrome
14234 schaersvoo 1771
 
16849 obado 1772
* 20/8
1773
	- added 'use strict'; to js-include [just to make sure the js-code is "properly written"
15111 schaersvoo 1774
	- slider using 'xy' will start & end by clicking the 'slider rect'
1775
	  'angle' will zoom in/out (using scale_x_radius();) and will use radians for slider values (in contrast to 'arc' which uses width/height in pixels)
1776
	- added command 'angle x,y,width,start,end,color' as alternative to flydraw compatible command 'arc'
16849 obado 1777
 
1778
* 19/8	- improved response speed of slider (in dragstuff library)
15111 schaersvoo 1779
	  The amount of sliders in not limited
1780
	  now a slider may adjust several different objects...until keyword 'killslider' or next 'slider'
16849 obado 1781
 
1782
* 18/8
1783
	- added keyword 'killslider'
15111 schaersvoo 1784
	- for all other object the slider will 'move' / 'rotate' the complete object
1785
	- if slider is used for command 'arc' the angle will be set with the slider
1786
	- javascript:read_dragdrop(); will return an array  'object number:slider value'
16849 obado 1787
* 17/8	- type: xy,x,y,angle : added slider 'rect' for xy movement
1788
* 15/8	- further integration of slider: all draggable objects may have sliders (x/y/angle)
1789
* 14/8
1790
	- adding slider to dragstuff library : work in "progress"
15111 schaersvoo 1791
	- adapted 'rotate angle' to be compatible with flydraw... :  -1*angle (Marina)
1792
	- correct imagefill etc : reset() was missing (Marina)
16849 obado 1793
* 5/8	- added replyformat 25/26 : 'userdraw arc(s),color' with degrees or radians
15111 schaersvoo 1794
	  STILL NOT 100%  CORRECT !!
16849 obado 1795
* 4/8
1796
	- corrected command 'userdraw arc,color'
15111 schaersvoo 1797
	- added precision to the dragdrop library (eg. read_dragdrop() )
16849 obado 1798
* 28/7
1799
	- added precision to the read_canvas() functions.
15111 schaersvoo 1800
	- corrected command 'ellipse' : switched from Beziercurve to arc-method. Should now be a true ellipse
1801
	- corrected command 'roundrect' : no inverted roundrect possible
16849 obado 1802
* 27/7	- corrected command 'square' ...
1803
* 26/7
1804
	- corrected a few flaws introduced by internal changing from 'translation' to 'affine'
15111 schaersvoo 1805
	- corrected command 'lattice' (hope it's ok now)
1806
	- corrected missing dashing of 'arrow' 'arrow2'
1807
	 to imitate flydraw's filling is too much work ... for both browser js-engine and me ...
1808
remark:  hatchfill/dotfill/diamondfill are not the same as flydraw...I've  not understood the flydraw filling correctly...
1809
	- corrected 'filltoborder' and 'floodfill' ... it should / could work now
1810
	- corrected command 'square x,y,side px,color'
1811
	  Changed several functions: new flaws in javascript may be introduced.
1812
	  the translation_ty being affine_matrix[5]
1813
	  the translation_tx being affine_matrix[4]
1814
	- removed internal variable used by 'translate' and moved to generic 'affine matrix'
1815
	- corrected affine : tx/ty now in x/y-range
16849 obado 1816
* 25/7	Thanks to Marina:
1817
 
1818
* 29/6
1819
	- added mousex / mousey commands : just show x or y values of mouse coordinates
1820
	- changed command 'barchart' : now "unlimited" barchart commands will be plotted in a single graph.
1821
	- reverted some correction mechanism for grid / axisnumbering when zooming out...need to rething
15111 schaersvoo 1822
          'userdraw vlines,color'
1823
          'userdraw vline,color'
1824
          'userdraw hlines,color'
1825
          'userdraw hline,color'
16849 obado 1826
	- added
15111 schaersvoo 1827
          Now the sequence is not important. However  both commands should be called at the end of the script
1828
          ('mouse' was only active when 'zoom' function was called before 'mouse')
16849 obado 1829
 
1830
* 28/6
1831
	- corrected preference behaviour of commands 'zoom' and 'mouse'
15111 schaersvoo 1832
	- removed some '\n' from js include code
14234 schaersvoo 1833
 
16849 obado 1834
* 27/6
1835
	- "replyformat 15" will only report inputfields/textareas set 'write' (eg not set 'readonly')
15111 schaersvoo 1836
	- added "replyformat 24" read all inputfields/textareas even those set 'readonly'
16849 obado 1837
* 23/6	- added command 'centerstring color,y,text' for placing a x-centered text in the canvas
1838
* 21/6
1839
	- corrected command jsplot : now more complex(...) functions may be used.
1840
	- increased value MAX_INT from 64 -> 128 : this is used for several arrays in C
1841
	- added some info on 'sgraph' (...)
1842
* 18/6
1843
	- solved small issue with removal of userdraw circle
15111 schaersvoo 1844
	- solved issue with precision (multiple roundings  x <--> px) in read_canvas() and js-functions x2px(x) / px2x(px):last precision in script is used for reply-precision
1845
	- fix stupid error in 'replyformat 23'
1846
	- zoom in y-direction was gone fishing...
1847
	- if wims_status='done' all 'drawing' related input fields are removed  (eg. userinput_xy etc)
1848
	- added flag to avoid multiple including of safe_eval, usd by several optional things
1849
	  added some alert message when inputstring has unfinished calculations , 'like 123 + 10^5/678'
1850
	- adapted 'safe_eval' to accept numbers like 2.345*10^5 (previous version only accepted 10^5...)
1851
          (barchart and linegraph are closely linked to grid: there can be multiple linegraphs in a single grid...but there can only be 1 grid)
16849 obado 1852
 
1853
* 17/6
1854
	- modified command 'piechart' and 'legend' : now multiple piecharts with legends may be present in a single canvas image
15111 schaersvoo 1855
 	- mouseup() in draglibrary corrected
16849 obado 1856
* 15/6	- added timeout for floodfill and filltoborder: the canvas was not yet 'drawn' in current setup , when floodfill was called...
1857
* 10/6	- added '(xy)snaptogrid' to drag library
15111 schaersvoo 1858
	  overide this default behaviour with keyword 'status' or 'nostatus'
16849 obado 1859
* 8/6
1860
	- inputfields/textarea's in canvasimage will be cleared and set 'readonly' when wims status variable is 'done'
15111 schaersvoo 1861
	  (in case you want to draw something...but not send the drawing to wims..)
1862
	- added 'replyformat -1' to disable the javascript read_canvas() function
1863
	  added commands 'userdraw arrow2' and 'userdraw arrows2'
16849 obado 1864
* 7/6
1865
	- corrected more inbalance in save() / restore() in 'draw_arrow()'
15111 schaersvoo 1866
	- corrected inbalance in save() / restore() causing annoying problems in command 'arc'
1867
	  todo CHECK THE REST !!
1868
	- added forgotten rotate&angle arguments to commands 'string / text'
1869
	- changed command 'grid' : now zooming and axisnumbering is slightly better...but it stays amateur scribling, grrrr...
1870
	- corrected typo "};else{" in javascript  replyformat 7
16849 obado 1871
* 6/6
1872
	- removed randomness from command clock (was annoying)
15111 schaersvoo 1873
	    added a lightweight javascipt function to convert math into js-math (only suitable for basic stuff)
1874
	    for plotting curves using clientside calculations: formula is verbatim in page-source
16849 obado 1875
	- added command jscurve color,formula_in_x
1876
* 5/6	- work in progress:
1877
* 2/6    - BPR: replace the dependance with libmatheval to the wims evaluation.
15111 schaersvoo 1878
	  allowing all combinations of 'setlimits', 'trace_jsmath' ,'jsmath' , 'userinput_xy+userdraw' , mouse , drag etc
16849 obado 1879
* 1/6
1880
	- added keyword 'setlimits'
15111 schaersvoo 1881
	- work in progress: added keyword 'setlimits'
16849 obado 1882
* 31/5	- slightly modified "trace_jsmath some_js_math_function_in_x" and "jsmath some_js_math_function_in_x"
1883
* 30/5	- added commands `trace_jsmath some_js_math_function_in_x` and `jsmath some_js_math_function_in_x`
1884
* 27/5	- javascript variable 'precision' was gone fishing
15111 schaersvoo 1885
	  level curve may be set 'onclick' or 'draggable'; every single curve has an unique identifier
16849 obado 1886
* 23/5	- command 'levelcurve' : the quality of the curves is not to be compared with the 'Flydraw levelcurve'
15111 schaersvoo 1887
          I'm not sure if this should be implemented in javascript...
16849 obado 1888
* 22/5	- work in progress: added command 'levelcurve'
15111 schaersvoo 1889
	  removed function get_double() from canvasdraw.
1890
	  corrected command 'rays color,xc,yc,x1,y1....xn,yn' (it was using pixels instead of x/y-range coordinates)
16849 obado 1891
* 21/5	- added forgotten commande 'dvline' and 'dhline'
15111 schaersvoo 1892
	  note: mouse coordinates (for drag / onclick) are not transformed....TODO)
16849 obado 1893
* 20/5	- added command 'affine a,b,c,d,tx,ty' and keyword 'killaffine'  (Marina Cazzola)
15111 schaersvoo 1894
	  'snaptogrid'  " will snap to both xmajor and ymajor (or xminor and yminor, if defined)
1895
	  'ysnaptogrid' : will snap to ymajor (or yminor, if defined)
1896
	  'xsnaptogrid' : will snap to xmajor (or xminor, if defined)
16849 obado 1897
* 19/5	- added keywords
15111 schaersvoo 1898
	- removed command 'debug'
1899
	    x1,y1,x2,y2,x3,y3,.....x(n-1),y(n-1),xn,yn
1900
	    x1,y1,x2,y2,x2,y2,x3,y3,x3,y3.....,x(n-1),y(n-1),x(n-1),y(n-1),xn,yn --replyformat 23-->
16849 obado 1901
* 18/5	- add replyformat 23 : used for 'userdraw polyline' : filtering out the second click on the same (+/- 5 px) point
15111 schaersvoo 1902
	  corrected mixup between userdraw polyline / polygon...
1903
	  if the mouse coordinate display or the student reply -in case of 'userdraw'-  needs a higher precision, just use as last command something like 'precision 10000'
16849 obado 1904
 
1905
* 16/5	- command 'precision' before ylogscale / xlogscale will set the number of decimals of the x-axis / y -axis (a local variable precision is set)
15111 schaersvoo 1906
	  corrected y-axis numbering in case of 'xlogscale'
16849 obado 1907
* 11/5
1908
	- added js function safe_eval() to command 'userinput_xy' to "safely" evaluate math inputs like 10^2 or sqrt(5)
1909
	- corrected x-axis numbering in case of 'ylogscale'
1910
	- corrected problems with ';' in html-text / text-arguments (the ';' is a command separator ... added 22/4)
1911
	- forgotten to clearRect()
15111 schaersvoo 1912
	  (just more copy and paste "programming")
16849 obado 1913
* 10/5	- added 'userdraw polygon,color'  'userdraw line,color' and 'userdraw lines,color' to userinput_xy
1914
* 5/5	- added commands 'ylogscale' , 'xlogscale' , 'xylogscale' , 'xlogbase' and 'ylogbase'
1915
* 25/4	- add 'nok' button to remove last item from userdraw arrays
15111 schaersvoo 1916
	  add keyword usertextarea_xy (...)
16849 obado 1917
* 24/4	- add userdraw polyline,color
1918
* 23/4	- corrected sgraph
1919
* 22/4	- added semicolon ; as 'new line separator' (Marina Cazzola)
1920
* 21/4	- corrected command grid in case xmin > 0  and / or ymin > 0
15111 schaersvoo 1921
	  for use as very (!) primitive 'broken axis graph'
16849 obado 1922
* 20/4	- work in progress: add command `sgraph xstart,ystart,xmajor,ymajor,xminor,yminor,majorgrid_color,minorgrid_color`
14295 schaersvoo 1923
 
16849 obado 1924
```
15111 schaersvoo 1925
	  'userdraw arrows,color'
1926
	  'userdraw arrow,color'
1927
	  'userdraw crosshairs,color'
1928
	  'userdraw crosshair,color'
1929
	  'userdraw circles,color'
1930
	  'userdraw circle,color'
1931
	  'userdraw points,color'
1932
	  'userdraw point,color'
1933
	  'userdraw segments,color'
1934
	  'userdraw segment,color'
1935
	  for now: only implemented in
16849 obado 1936
```
14295 schaersvoo 1937
 
16849 obado 1938
* 18/4	- added keyword 'userinput_xy' : if set 2 or 3 inputfields will be shown...the pupil will be able to 'draw' with mouse and/or by giving  a x-value and y-value (or radius-value)
1939
* 14/4   - added 'snaptogrid' to gridfill and dotfill (e.g. userdraw will snap to the grid)
1940
* 11/4	- corrected flaw in snaptogrid : now works correctly for dividers xminor  and yminor (only if they are even dividers e.g. 2,4,6,8 etc)
1941
* 8/4	- added to wims_svn
1942
 
1943
* 5/4	- corrected flaw in 'normal' userdraw (without snaptogrid)
15111 schaersvoo 1944
	  todo: other gridfill commands may use snaptogrid
1945
	  grid 1,1,black,2,2,6,grey  : will snap to all minor grid lines n/2
1946
	  grid 1,1,black : it will snap to all major grid lines 'n'
16849 obado 1947
* 2/4	- added command / keyword 'snaptogrid' : a userdrawing will snap to the given grid...
15111 schaersvoo 1948
	  added keyword 'status' to disable this default behaviour (e.g. pupils may draw in canvas when wims $status=done
16849 obado 1949
* 25/3	- userdraw functions only active if wims $status != done
15111 schaersvoo 1950
	  canvasdraw now only works in correct wims_environment : e.g. ./canvadraw < fly.txt  will not work anymore
1951
	  No option anymore to gzip the include.
1952
	  The rest is printed in a fairly small buffer and printed to stdout at the end of parsing the fly-script.
16849 obado 1953
* 23/3	- simplified buffer usage : now js-include file in wims-getfile-directoy is standard.
14295 schaersvoo 1954
 
16849 obado 1955
	Probably have to look into str_replace() !
1956
	segfault occured in case "blah" was not present in "temp"  (and no replacement was made) and string length wos big
1957
	On 32/64 bits FreeBSD ; 32/64 bits OpenBSD no problems
1958
 
1959
	```
1960
	if( strstr(temp,"blah") != 0 ){ temp = str_replace( temp ,"blah","beh");}
1961
    char *temp = getstring(infile,1);
1962
    Changed into:
1963
    char *temp = str_replace( getstring(infile,1),"blah","beh");
1964
	```
1965
* 21/3	- corrected spurious segfault on Gentoo 64 bits (leiden) and OpenSuSE-32 :
1966
* 14/3	- forgotten 'break;'
1967
* 3/3	- synchronized commands "arrow" and "arrow2" with flydraw syntax; e.g. arrow x1,y1,x2,y2,head_in_px,color
15111 schaersvoo 1968
	  It works if not too much cropping is required.
1969
	  The commands are still not equal to Flydraw: I'm giving up on this !!
16849 obado 1970
* 28/2
1971
	- tried to correct copy/ropyresized ; using image as background image of div (e.g. no canvas !)
1972
	  We just use the URL of the image...and add some CSS to it (no-repreat / Size / Position) and det the URL to the backgroundImage of the main div
1973
	- an external image copied into a canvas / resized etc... can be set as background of the document.body...
1974
	- an external image copied into a canvas / resized etc... can not be set as CSS backgroundImage of a div... (at least in firefox)
1975
	- there is no way to paint on top of an external image loaded into a canvas...
14295 schaersvoo 1976
 
16849 obado 1977
* 27/2	- solved nasty issue with "drawing on top of external image"  with copy / copyresized
1978
* 19/2	- added command 'animate type' as primitive animation ; only 'point' on curve is implemented
15111 schaersvoo 1979
	  Using generic js-functions in wims-pages to read all mathml-inputs (including the ones in a canvas image !)
16849 obado 1980
* 12/2	- removed reading of mathml-inputfield in canvas (only "replyformat 16" will read it)
14295 schaersvoo 1981
 
15111 schaersvoo 1982
	  canvas_div.style.background-size --> canvas_div.style.backgroundSize
16849 obado 1983
* 8/2
1984
	- corrected syntax in bgimage:
15111 schaersvoo 1985
	- command "bgimage url" will scale to fit background image
16849 obado 1986
* 7/2
1987
	- corrected x-y mixup in case xrange/yrange was forgotten (eg xrange = 0 px ,sizex px)
15111 schaersvoo 1988
	- added forgotten filling of an arc ;command 'filledarc'
1989
	  (something like:fontfamily bold italic 24px Courier)
1990
	  the rest of the gridfonts (numbering or x/yaxis text) is determined by the 'fontfamily'
16849 obado 1991
* 6/2
1992
	- added default fontfamily settings to 'legend', 'xlabel' and 'ylabel' ; size may be set by command 'fontsize'
15111 schaersvoo 1993
	- add command 'dsegment' as alias for dashed segment
1994
	  eg only active inputfields will be read with read_canvas();
16849 obado 1995
* 5/2	- if inputfield has attribute 'readonly', do not read the value when using javascript:read_canvas();
1996
* 3/2
1997
	- added forgotten 'readonly' attribute to js-function 'draw_inputs()'
1998
	- solved(?) some strange fill issues (pixel manipulation) added demo
14295 schaersvoo 1999
 
15111 schaersvoo 2000
          If legendcolors was not set , the default stroke_color will be used in a 'legend'
2001
          for all other legends, we can specify.
2002
          barchart & piechart will use -ofcourse- the same colours for legend
16849 obado 2003
* 1/2
2004
	- add command 'legendcolors color1:color2:color3:...:color_n'
15111 schaersvoo 2005
	- command 'legend string1:string2:string3:..:string_n' may now be used with any 'grid' (e.g. not only for barchart/linegraph/piechart)
2006
	- commands 'xlabel' 'ylabel' only depend on command 'grid' (eg without 'axis' and/or 'axisnumbering')
2007
	- added commands 'xlabel some_string' ylabel some_string'
2008
	- corrected tooltip when using images as 'linktext'
14295 schaersvoo 2009
 
15111 schaersvoo 2010
	will output reply[0]=x1 reply[1]=y1 reply[2]=x2 reply[3]=y2 ... reply[n-1]=x_n reply[n]=y_n
16849 obado 2011
 
2012
* 31/1
2013
	- read_canvas() : Added 'replyformat 22' : single array output (just for use in my existing checkfile)
15111 schaersvoo 2014
	will output words (x1:y1) (x2:y2) (x3:y3) ... (x_n:y_n)
2015
	- read_canvas() : Added 'replyformat 21' : verbatim coordinate output (just for use in my existing checkfile)
2016
	Command "intooltip tooltip_text" will accept html-text, images and now also Mathml as tooltip_text
16849 obado 2017
	- Now "mouse red,24" will default to font '24px Arial'
15111 schaersvoo 2018
	fontfamily [type] [size]px [family]
2019
	was set, the argument fontsize of command "mouse color,fontsize" was ignored...due to the strict syntax in html/js
16849 obado 2020
 
2021
* 29/1  - Corrected js-fontfamily kludge...when something like "fontfamily italic 14px Arial"
15111 schaersvoo 2022
	(On multiple panning/zooming the mouse coordinate display will get 'sluggish' and not very quick in response)
2023
	When 'x' is pressed the page will reload (location.reload();) so the panned/zoomed image or drawing will be reset to it's original state.
16849 obado 2024
 
2025
* 23/1	Added a 'x' to pan/zoom-buttons (command "zoom color")
2026
	`xaxis -4*pi:-4\u03c0:-3*pi:-3\u03c0:-2*pi:-2\u03c0:-1*pi:-\u03c0:pi/2:\u03c0/2:pi:\u03c0`
15111 schaersvoo 2027
	example (unicode allowed; no html)
16849 obado 2028
 
2029
		yaxis y_value:y_text:y_value:y_text:y_value:y_text....
2030
		xaxis x_value:x_text:x_value:x_text:x_value:x_text....
2031
 
2032
* 22/1 Corrected commands with "pi"... javascript did not calculate the x-value...
2033
 
2034
## 2014
2035
(was using keyword 'input' but changed wims_mathml to use a styled textarea as input...)
2036
 
2037
* 28/12 in case of command 'mathml' , look for 'mathml0' to trigger javascript:read_mathml() if no other ineractiveness was previously defined
2038
* 29/11 copy & copyresized of external images : preparing for drag&drop (outside the drag&drop shape library)
15111 schaersvoo 2039
	correction of zoom_buttons (wrong panning in wrong direction...)
16849 obado 2040
* 27/11 improved plotting of asymptotic curves
2041
* 16/11 setting & reading clock (preliminiary: for now just html-buttons for adjusting H,M,S...should be active fields in canvas...)
15111 schaersvoo 2042
	custom  colours: clock 0,0,60,4,35,45,1,2,white,white,white,black,yellow
2043
	custom  colours: clock 0,0,60,4,35,45,1,2,,,,yellow,red
2044
	default colours: clock 0,0,60,4,35,45,1,2,[space]
2045
	clock x,y,r(px),H,M,S,type hourglass,interactive [ ,H_color,M_color,S_color,background_color,foreground_color ]
16849 obado 2046
* 15/11 changed basic syntax of command clock : all colours are now optional
15111 schaersvoo 2047
	Temporarily removed check on 'valid wims-session' : it is not working for a 'chroot' environment (TODO correct this !!)
2048
	(only when using canvasdraw in a 'chroot' environment , giving : Undefined symbol "_ThreadRuneLocale)
2049
	I can not use the normal implementations found in 'ctypes.h' for this purpose, due to a bug in FreeBSD's C-library
16849 obado 2050
* 14/11 implemented own versions of "tolower()" and "toupper()"...
15111 schaersvoo 2051
	clock x,y,r(px),H,M,S,type hourglass,interactive,H_color,M_color,S_color,background_color,foreground_color
16849 obado 2052
* 13/11 Added interactive=2 (multiple choice  / onclick) to select a single clock
15111 schaersvoo 2053
	(work in progress)
2054
	Add basic interactivness
2055
	Add argument 'hourglass type' to controle appearance of analogue clock
16849 obado 2056
* 12/11 Multiple clocks may be set interactive ; read_canvas() will read all active clocks in H:M:S
15111 schaersvoo 2057
	Preparing for command clock (work in progress)
2058
	(was x/y-range -10,10)
2059
	ymin = 0 ymax = ysize
2060
	xmin = 0 xmax = xsize
16849 obado 2061
* 11/11 If xrange / yrange is not given :
15111 schaersvoo 2062
	Todo: check compatibility...I'm not sure it works the same as in 'flydraw'
2063
	"copyresized x1,y2,x2,y2,dx1,dy1,dx2,dy2,filename_URL"	and "copy x,y,x1,y1,x2,y2,filename_URL"
16849 obado 2064
* 08/11 Added commands
15111 schaersvoo 2065
	Just use a fairly recent Firefox / Opera / Chrome
2066
	E.g all non supported browsers will be excluded...no intention to offer 'canvas glue' library for IE < 9
2067
	try(document.createElement('canvas');)catch(e){alert("no support");return;}
16849 obado 2068
* 03/11	Added check on canvas-support in function 'create_canvas()';
2069
* 01/11 Added 'userdraw text,color' to reply types
15111 schaersvoo 2070
	a confirm will popup asking to delete the selected text.This text will be removed from the "userdraw_txt()" answer array.
16849 obado 2071
	Placing the cursor somewhere on a typed text and hitting "delete/backspace/esc",
15111 schaersvoo 2072
	You will need to hit "enter" to add the text to the array "userdraw_txt()" : lightblue background will disappear
2073
	"backspace / delete / esc" will remove typed text.
2074
	While typing the background of every typed char will be lightblue...
2075
	Any string of multiple strings may be placed anywhere on the canvas.
16849 obado 2076
* 30/10 Finished command 'userdraw text,color'
15111 schaersvoo 2077
	(it is ofcource possible, but at a very very high price)
2078
	because the mouse coordinates do not follow the transformation matrix if in the proximity of a text-object.
2079
	vertical or rotated text can not be set drag / onclick,
16849 obado 2080
* 29/10 add horizontal text to drag / onclick
2081
* 28/10 preparing for adding all 'text' commands to drag / click library
15111 schaersvoo 2082
	Would be nice to have some feedback (...)
2083
	need to find a way to bypass browser differences...using 'String.fromCharCode(evt.keyCode);' is not really a safe method ?
16849 obado 2084
* 27/10 add command "userdraw text,color" work in progress...just a single char, for now (no answer_type,yet)
15111 schaersvoo 2085
	(for example to be used for a barchart created by students)
2086
	add commands "userdraw rects,color" "userdraw roundrects,color" for drawing multiple rectangles
2087
	Many different linegraphs may be used in a single plot.
2088
	to be used together with commands 'grid'. May be combined with freestyle x-axis / y0-axis text (commands 'xaxis' 'yaxis')
16849 obado 2089
* 26/10 add command "linegraph x1:y1:x2:y2...x_n:y_n" : may be further controlled by commands 'strokecolor','linewidth','dashed','dashtype'
15111 schaersvoo 2090
	to be used together with commands 'grid'. May be combined with freestyle x-axis / y0-axis text (commands 'xaxis' 'yaxis')
2091
	add command "barchart x1:y1:color1:x2:y2:color2...x_n:y_n:color_n" to automate generation of barchart
16849 obado 2092
* 25/10 add command "legend string1:string2:...:string_n" to add an automatically sized legend to a graph
2093
* 24/10 add command "piechart xc,yc,radius,'data+colorlist'"
14295 schaersvoo 2094
 
15111 schaersvoo 2095
	add command "fontcolor color" (previously fontcolor=strokecolor) now x/y axis-texts color may be different from axis / xy-tics color
16849 obado 2096
* 22/10 grid: x/y major tics and x/y minor tics now different
15111 schaersvoo 2097
	update 'drag curve fill mathml-input' example (selective removal of filled area)
2098
	freestyle x/y-axistext move with panning (e.g stay in visual image)
2099
	to automate filling axis with text insteadof default numbering xmin...xmax
2100
	yaxis num1:string1:num2:string2:num3:string3:num4:string4:....num_n:string-n
2101
	xaxis num1:string1:num2:string2:num3:string3:num4:string4:....num_n:string-n
16849 obado 2102
* 21/10 added commands:
15111 schaersvoo 2103
	tried to improve 'axisnumbering' in command 'grid' ( avoiding number overlap )
16849 obado 2104
* 20/10 added testresults flydraw versus canvasdraw.
15111 schaersvoo 2105
	added "use_rotate" argument to shape library
16849 obado 2106
* 19/10 ellipse x,y,rx,ry,color is draggable/clickable and will scale/resize on zooming (like all other draggable 'massive' objects)
15111 schaersvoo 2107
	multiple instances of tooltip are allowed (as ofcourse is true for multiple canvas)
16849 obado 2108
* 18/10 corrected tooltip to work / integrate in 'real' wims modules
2109
* 15/10 circle x,y,radius(px),color will scale/resize on zooming (like all other draggable 'massive' objects)
2110
* 13/10 corrected hexcolor input
15111 schaersvoo 2111
	reading of useractions in canvas is only possible for a single instance (for now)
2112
	(experimental work in progress)
2113
	by using unique names for all potential conflicting functions
16849 obado 2114
* 12/10 added support for multi-canvasses in a single html-page
2115
* 10/10 added missing "userdraw polygone,color"
2116
* 9/10  added parallel to shape_library
15111 schaersvoo 2117
	default distance is 20 pix from original 'fill click'
2118
	size of 'measuring rectangle' may be tuned with "clickfillmarge"
16849 obado 2119
* 8/10  added specific removal of a 'click_filled' area.
2120
* 7/10  added arc to shape_library
2121
* 6/10  corrected syntax "fill" == "floodfill" = pixel filling to a border
2122
* 5/10  added missing "userdraw rect,color" "userdraw roundrect,color" "userdraw triangle,color"
2123
* 4/10  added missing "userdraw line,color" "userdraw lines,color"
14381 schaersvoo 2124
 
15111 schaersvoo 2125
or search keywords 'html5' 'canvas' om leiden mirror
2126
For live testing: use "directexec" module on Leiden mirror.
2127
For demo: see demo-directory.
2128
For implemented commands: see canvasdraw.html
2129
   (first need to solve  re-draw issues; managing multiple canvasses in drag/click library)
16849 obado 2130
	- Isolate static javascript code  components/functions from C-"programs"
2131
	- Some bitmap operations (like copyresize etc)
2132
	- OEF interface
15111 schaersvoo 2133
Unadressed issues at this point :
14544 schaersvoo 2134
 
15111 schaersvoo 2135
Opera (>9)
2136
Gecko browsers (Firefox > 17)
2137
Microsoft IE10
2138
Tested on :
14546 schaersvoo 2139
 
15111 schaersvoo 2140
(on Leiden mirror and intranet servers only)
2141
It will be used and tested to replace "flydraw" , "GeoGebra" and "flyapplet" in Schaersvoorde modules.
2142
Preliminary version. All javascript code is generated by 'C-program'
14548 schaersvoo 2143
 
16849 obado 2144
* 4/10/2013 First version