Subversion Repositories wimsdev

Rev

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