Subversion Repositories wimsdev

Rev

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