Subversion Repositories wimsdev

Rev

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

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