Subversion Repositories wimsdev

Rev

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

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