Subversion Repositories wimsdev

Rev

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

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