Subversion Repositories wimsdev

Rev

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