Subversion Repositories wimsdev

Rev

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