Subversion Repositories wimsdev

Rev

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

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