Subversion Repositories wimsdev

Rev

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

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