Subversion Repositories wimsdev

Rev

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

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