jclic 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/dist-node/jclic-node.js +14157 -0
- package/dist-node/jclic-node.umd.cjs +530 -0
- package/package.json +38 -26
- package/.vscode/launch.json +0 -33
- package/.vscode/settings.json +0 -13
- package/CHANGELOG.md +0 -664
- package/TRANSLATIONS.md +0 -11
- package/build-locales.mjs +0 -82
- package/dist/jclic-node.js +0 -31678
- package/dist/jclic-node.js.map +0 -1
- package/dist/jclic.components.LICENSE +0 -2254
- package/dist/jclic.min.js +0 -27
- package/dist/jclic.min.js.map +0 -1
- package/eslint.config.mjs +0 -31
- package/jsdoc.config.js +0 -71
- package/locales/ar.po +0 -244
- package/locales/ast.po +0 -246
- package/locales/bs.po +0 -247
- package/locales/ca.po +0 -248
- package/locales/ca_ES@valencia.po +0 -248
- package/locales/cs.po +0 -244
- package/locales/da.po +0 -244
- package/locales/de.po +0 -246
- package/locales/el.po +0 -244
- package/locales/es.po +0 -248
- package/locales/eu.po +0 -244
- package/locales/fr.po +0 -244
- package/locales/gl.po +0 -244
- package/locales/he.po +0 -244
- package/locales/hr.po +0 -245
- package/locales/it.po +0 -246
- package/locales/ja.po +0 -242
- package/locales/jclic.js.pot +0 -241
- package/locales/nb_NO.po +0 -244
- package/locales/nl.po +0 -244
- package/locales/pl.po +0 -244
- package/locales/pt.po +0 -244
- package/locales/pt_BR.po +0 -248
- package/locales/ro.po +0 -248
- package/locales/ru.po +0 -245
- package/locales/ta.po +0 -244
- package/locales/tr.po +0 -246
- package/locales/uk.po +0 -247
- package/locales/vec.po +0 -244
- package/locales/zh_TW.po +0 -246
- package/patches/po2json+1.0.0-beta-3.patch +0 -12
- package/src/AWT.js +0 -2067
- package/src/Activity.js +0 -1311
- package/src/Deps.js +0 -232
- package/src/GlobalData.js +0 -5
- package/src/JClic.js +0 -196
- package/src/JClicPlayer.js +0 -1308
- package/src/PlayerHistory.js +0 -305
- package/src/Utils.js +0 -1355
- package/src/activities/associations/ComplexAssociation.js +0 -321
- package/src/activities/associations/SimpleAssociation.js +0 -519
- package/src/activities/memory/MemoryGame.js +0 -423
- package/src/activities/panels/Explore.js +0 -349
- package/src/activities/panels/Identify.js +0 -356
- package/src/activities/panels/InformationScreen.js +0 -262
- package/src/activities/panels/Menu.js +0 -209
- package/src/activities/panels/icons/ico00.png +0 -0
- package/src/activities/panels/icons/ico01.png +0 -0
- package/src/activities/panels/icons/ico02.png +0 -0
- package/src/activities/panels/icons/ico03.png +0 -0
- package/src/activities/panels/icons/icofolder.png +0 -0
- package/src/activities/puzzles/DoublePuzzle.js +0 -424
- package/src/activities/puzzles/ExchangePuzzle.js +0 -374
- package/src/activities/puzzles/HolePuzzle.js +0 -360
- package/src/activities/text/Complete.js +0 -127
- package/src/activities/text/Evaluator.js +0 -534
- package/src/activities/text/FillInBlanks.js +0 -426
- package/src/activities/text/IdentifyText.js +0 -253
- package/src/activities/text/OrderText.js +0 -421
- package/src/activities/text/TextActivityBase.js +0 -557
- package/src/activities/text/TextActivityDocument.js +0 -658
- package/src/activities/text/WrittenAnswer.js +0 -557
- package/src/activities/textGrid/CrossWord.js +0 -565
- package/src/activities/textGrid/WordSearch.js +0 -458
- package/src/activities/textGrid/icons/hIcon.svg +0 -3
- package/src/activities/textGrid/icons/vIcon.svg +0 -3
- package/src/automation/AutoContentProvider.js +0 -182
- package/src/automation/arith/Arith.js +0 -864
- package/src/bags/ActivitySequence.js +0 -318
- package/src/bags/ActivitySequenceElement.js +0 -161
- package/src/bags/ActivitySequenceJump.js +0 -140
- package/src/bags/ConditionalJumpInfo.js +0 -113
- package/src/bags/JumpInfo.js +0 -136
- package/src/bags/MediaBag.js +0 -215
- package/src/bags/MediaBagElement.js +0 -516
- package/src/boxes/AbstractBox.js +0 -699
- package/src/boxes/ActiveBagContent.js +0 -494
- package/src/boxes/ActiveBox.js +0 -810
- package/src/boxes/ActiveBoxBag.js +0 -357
- package/src/boxes/ActiveBoxContent.js +0 -484
- package/src/boxes/ActiveBoxGrid.js +0 -179
- package/src/boxes/BoxBag.js +0 -500
- package/src/boxes/BoxBase.js +0 -398
- package/src/boxes/BoxConnector.js +0 -325
- package/src/boxes/TextGrid.js +0 -887
- package/src/boxes/TextGridContent.js +0 -215
- package/src/init-jsdom.js +0 -65
- package/src/jclic-node.js +0 -219
- package/src/media/ActiveMediaBag.js +0 -145
- package/src/media/ActiveMediaPlayer.js +0 -297
- package/src/media/AudioBuffer.js +0 -219
- package/src/media/EventSounds.js +0 -169
- package/src/media/EventSoundsElement.js +0 -155
- package/src/media/MediaContent.js +0 -328
- package/src/media/MidiAudioPlayer.js +0 -254
- package/src/media/icons/audio.svg +0 -3
- package/src/media/icons/generic.svg +0 -3
- package/src/media/icons/mic.svg +0 -3
- package/src/media/icons/movie.svg +0 -3
- package/src/media/icons/music.svg +0 -3
- package/src/media/icons/url.svg +0 -3
- package/src/media/sounds/actionError.mp3 +0 -0
- package/src/media/sounds/actionOk.mp3 +0 -0
- package/src/media/sounds/click.mp3 +0 -0
- package/src/media/sounds/finishedError.mp3 +0 -0
- package/src/media/sounds/finishedOk.mp3 +0 -0
- package/src/media/sounds/start.mp3 +0 -0
- package/src/project/JClicProject.js +0 -282
- package/src/project/ProjectSettings.js +0 -273
- package/src/report/ActionReg.js +0 -123
- package/src/report/ActivityReg.js +0 -271
- package/src/report/EncryptMin.js +0 -210
- package/src/report/Reporter.js +0 -727
- package/src/report/SCORM.js +0 -272
- package/src/report/SequenceReg.js +0 -275
- package/src/report/SessionReg.js +0 -340
- package/src/report/SessionStorageReporter.js +0 -131
- package/src/report/TCPReporter.js +0 -628
- package/src/shapers/ClassicJigSaw.js +0 -138
- package/src/shapers/Holes.js +0 -77
- package/src/shapers/JigSaw.js +0 -161
- package/src/shapers/Rectangular.js +0 -78
- package/src/shapers/Shaper.js +0 -386
- package/src/shapers/TriangularJigSaw.js +0 -121
- package/src/skins/BlueSkin.js +0 -80
- package/src/skins/Counter.js +0 -152
- package/src/skins/CustomSkin.js +0 -412
- package/src/skins/DefaultSkin.js +0 -376
- package/src/skins/EmptySkin.js +0 -82
- package/src/skins/GreenSkin.js +0 -94
- package/src/skins/MiniSkin.js +0 -130
- package/src/skins/OrangeSkin.js +0 -78
- package/src/skins/SimpleSkin.js +0 -92
- package/src/skins/Skin.js +0 -1021
- package/src/skins/assets/actionsIcon.svg +0 -3
- package/src/skins/assets/appLogo.svg +0 -8
- package/src/skins/assets/basic.css +0 -41
- package/src/skins/assets/closeDialogIcon.svg +0 -3
- package/src/skins/assets/closeIcon.svg +0 -3
- package/src/skins/assets/copyIcon.svg +0 -3
- package/src/skins/assets/fullScreenExitIcon.svg +0 -3
- package/src/skins/assets/fullScreenIcon.svg +0 -3
- package/src/skins/assets/infoIcon.svg +0 -3
- package/src/skins/assets/main.css +0 -43
- package/src/skins/assets/mainHalf.css +0 -23
- package/src/skins/assets/mainTwoThirds.css +0 -23
- package/src/skins/assets/mini.css +0 -15
- package/src/skins/assets/nextIcon.svg +0 -3
- package/src/skins/assets/okDialogIcon.svg +0 -3
- package/src/skins/assets/prevIcon.svg +0 -3
- package/src/skins/assets/reports.css +0 -156
- package/src/skins/assets/reportsIcon.svg +0 -3
- package/src/skins/assets/scoreIcon.svg +0 -3
- package/src/skins/assets/simple.css +0 -16
- package/src/skins/assets/simpleHalf.css +0 -11
- package/src/skins/assets/simpleTwoThirds.css +0 -11
- package/src/skins/assets/timeIcon.svg +0 -4
- package/src/skins/assets/waitAnim.css +0 -54
- package/src/skins/assets/waitImgBig.svg +0 -3
- package/src/skins/assets/waitImgSmall.svg +0 -3
- package/webpack.config.mjs +0 -169
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File : shapers/ClassicJigSaw.js
|
|
3
|
-
* Created : 25/05/2015
|
|
4
|
-
* By : Francesc Busquets <francesc@gmail.com>
|
|
5
|
-
*
|
|
6
|
-
* JClic.js
|
|
7
|
-
* An HTML5 player of JClic activities
|
|
8
|
-
* https://projectestac.github.io/jclic.js
|
|
9
|
-
*
|
|
10
|
-
* @source https://github.com/projectestac/jclic.js
|
|
11
|
-
*
|
|
12
|
-
* @license EUPL-1.2
|
|
13
|
-
* @licstart
|
|
14
|
-
* (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)
|
|
15
|
-
*
|
|
16
|
-
* Licensed under the EUPL, Version 1.1 or -as soon they will be approved by
|
|
17
|
-
* the European Commission- subsequent versions of the EUPL (the "Licence");
|
|
18
|
-
* You may not use this work except in compliance with the Licence.
|
|
19
|
-
*
|
|
20
|
-
* You may obtain a copy of the Licence at:
|
|
21
|
-
* https://joinup.ec.europa.eu/software/page/eupl
|
|
22
|
-
*
|
|
23
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
-
* distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
|
|
25
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
26
|
-
* Licence for the specific language governing permissions and limitations
|
|
27
|
-
* under the Licence.
|
|
28
|
-
* @licend
|
|
29
|
-
* @module
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import Shaper from './Shaper.js';
|
|
33
|
-
import JigSaw from './JigSaw.js';
|
|
34
|
-
import { PathStroke } from '../AWT.js';
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* This is the classic {@link module:shapers/JigSaw.JigSaw JigSaw} {@link module:shapers/Shaper.Shaper Shaper} used in puzzle toys, where teeth and slots
|
|
38
|
-
* are shaped by Bézier curves.
|
|
39
|
-
* @extends module:shapers/JigSaw.JigSaw
|
|
40
|
-
*/
|
|
41
|
-
export class ClassicJigSaw extends JigSaw {
|
|
42
|
-
/**
|
|
43
|
-
* ClassicJigSaw constructor
|
|
44
|
-
* @param {number} nx - Number of columns
|
|
45
|
-
* @param {number} ny - Number of rows
|
|
46
|
-
*/
|
|
47
|
-
constructor(nx, ny) {
|
|
48
|
-
super(nx, ny);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Overrides {@link module:shapers/JigSaw.JigSaw#hLine}
|
|
53
|
-
* @override
|
|
54
|
-
* @param {module:AWT.Path} sd - The Path to which the line will be added
|
|
55
|
-
* @param {number} type - Type of tooth: 0 is flat (no tooth), 1 means tooth up, and 2 means tooth down
|
|
56
|
-
* @param {number} x - X coordinate of the starting point
|
|
57
|
-
* @param {number} y - Y coordinate of the starting point
|
|
58
|
-
* @param {number} w - Width of the piece
|
|
59
|
-
* @param {number} h - Height of the piece
|
|
60
|
-
* @param {boolean} inv - The line must be drawn right to left
|
|
61
|
-
*/
|
|
62
|
-
hLine(sd, type, x, y, w, h, inv) {
|
|
63
|
-
const
|
|
64
|
-
kx = inv ? -1 : 1,
|
|
65
|
-
ky = type === 1 ? 1 : -1;
|
|
66
|
-
|
|
67
|
-
if (type === 0)
|
|
68
|
-
// Flat line
|
|
69
|
-
sd.addStroke(new PathStroke('L', [x + w * kx, y]));
|
|
70
|
-
else {
|
|
71
|
-
const
|
|
72
|
-
x0 = x + (w - w * this.baseWidthFactor) / 2 * kx,
|
|
73
|
-
wb = w * (this.baseWidthFactor / 12) * kx;
|
|
74
|
-
|
|
75
|
-
// Approximation to the tooth:
|
|
76
|
-
sd.addStroke(new PathStroke('L', [x0, y]));
|
|
77
|
-
// This is the tooth:
|
|
78
|
-
const hb = h * this.toothHeightFactor * ky / 8;
|
|
79
|
-
sd.addStroke(new PathStroke('B', [x0 + 4 * wb, y, x0 + 6 * wb, y - hb, x0 + 4 * wb, y - 3 * hb]));
|
|
80
|
-
sd.addStroke(new PathStroke('B', [x0 + 2 * wb, y - 5 * hb, x0 + 10 * wb, y - 5 * hb, x0 + 8 * wb, y - 3 * hb]));
|
|
81
|
-
sd.addStroke(new PathStroke('B', [x0 + 6 * wb, y - 1 * hb, x0 + 8 * wb, y, x0 + 12 * wb, y]));
|
|
82
|
-
// Draw the remaining line
|
|
83
|
-
sd.addStroke(new PathStroke('L', [x + w * kx, y]));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Overrides {@link module:shapers/JigSaw.JigSaw#vLine}
|
|
89
|
-
* @override
|
|
90
|
-
* @param {module:AWT.Path} sd - The Path to which the line will be added
|
|
91
|
-
* @param {number} type - Type of tooth: 0 is flat (no tooth), 1 means tooth right, and 2 means tooth left
|
|
92
|
-
* @param {number} x - X coordinate of the starting point
|
|
93
|
-
* @param {number} y - Y coordinate of the starting point
|
|
94
|
-
* @param {number} w - Width of the piece
|
|
95
|
-
* @param {number} h - Height of the piece
|
|
96
|
-
* @param {boolean} inv - The line must be drawn bottom to top
|
|
97
|
-
*/
|
|
98
|
-
vLine(sd, type, x, y, w, h, inv) {
|
|
99
|
-
const
|
|
100
|
-
ky = inv ? -1 : 1,
|
|
101
|
-
kx = type === 1 ? 1 : -1;
|
|
102
|
-
|
|
103
|
-
if (type === 0)
|
|
104
|
-
// Flat line
|
|
105
|
-
sd.addStroke(new PathStroke('L', [x, y + h * ky]));
|
|
106
|
-
else {
|
|
107
|
-
const
|
|
108
|
-
y0 = y + (h - h * this.baseWidthFactor) / 2 * ky,
|
|
109
|
-
hb = h * this.baseWidthFactor / 12 * ky;
|
|
110
|
-
|
|
111
|
-
// Approximation to the tooth:
|
|
112
|
-
sd.addStroke(new PathStroke('L', [x, y0]));
|
|
113
|
-
// This is the tooth:
|
|
114
|
-
const wb = w * this.toothHeightFactor * kx / 8;
|
|
115
|
-
sd.addStroke(new PathStroke('B', [x, y0 + 4 * hb, x - wb, y0 + 6 * hb, x - 3 * wb, y0 + 4 * hb]));
|
|
116
|
-
sd.addStroke(new PathStroke('B', [x - 5 * wb, y0 + 2 * hb, x - 5 * wb, y0 + 10 * hb, x - 3 * wb, y0 + 8 * hb]));
|
|
117
|
-
sd.addStroke(new PathStroke('B', [x - 1 * wb, y0 + 6 * hb, x, y0 + 8 * hb, x, y0 + 12 * hb]));
|
|
118
|
-
// Draw the remaining line
|
|
119
|
-
sd.addStroke(new PathStroke('L', [x, y + h * ky]));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
Object.assign(ClassicJigSaw.prototype, {
|
|
125
|
-
/**
|
|
126
|
-
* ClassicJigSaw needs a biggest base width
|
|
127
|
-
* @name module:shapers/ClassicJigSaw.ClassicJigSaw#baseWidthFactor
|
|
128
|
-
* @type {number} */
|
|
129
|
-
baseWidthFactor: 3.0 / 4,
|
|
130
|
-
/**
|
|
131
|
-
* ClassicJigSaw needs a biggest base height factor
|
|
132
|
-
* @name module:shapers/ClassicJigSaw.ClassicJigSaw#toothHeightFactor
|
|
133
|
-
* @type {number} */
|
|
134
|
-
toothHeightFactor: 3.0 / 5,
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
// Register this class in the list of known shapers
|
|
138
|
-
export default Shaper.registerClass('@ClassicJigSaw', ClassicJigSaw);
|
package/src/shapers/Holes.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File : shapers/Holes.js
|
|
3
|
-
* Created : 20/05/2015
|
|
4
|
-
* By : Francesc Busquets <francesc@gmail.com>
|
|
5
|
-
*
|
|
6
|
-
* JClic.js
|
|
7
|
-
* An HTML5 player of JClic activities
|
|
8
|
-
* https://projectestac.github.io/jclic.js
|
|
9
|
-
*
|
|
10
|
-
* @source https://github.com/projectestac/jclic.js
|
|
11
|
-
*
|
|
12
|
-
* @license EUPL-1.2
|
|
13
|
-
* @licstart
|
|
14
|
-
* (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)
|
|
15
|
-
*
|
|
16
|
-
* Licensed under the EUPL, Version 1.1 or -as soon they will be approved by
|
|
17
|
-
* the European Commission- subsequent versions of the EUPL (the "Licence");
|
|
18
|
-
* You may not use this work except in compliance with the Licence.
|
|
19
|
-
*
|
|
20
|
-
* You may obtain a copy of the Licence at:
|
|
21
|
-
* https://joinup.ec.europa.eu/software/page/eupl
|
|
22
|
-
*
|
|
23
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
-
* distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
|
|
25
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
26
|
-
* Licence for the specific language governing permissions and limitations
|
|
27
|
-
* under the Licence.
|
|
28
|
-
* @licend
|
|
29
|
-
* @module
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import Shaper from './Shaper.js';
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* This {@link module:shapers/Shaper.Shaper Shaper} consists of a set of arbitrary shapes placed over a main rectangle that
|
|
36
|
-
* acts as a enclosure.
|
|
37
|
-
* The components can be of type {@link module:AWT.Rectangle}, {@link module:AWT.Ellipse} or {@link module:AWT.Path}.
|
|
38
|
-
* This components have internal dimension values relative to the horizontal and vertical
|
|
39
|
-
* sizes of the enclosure. Its values (always between 0 and 1) must be scaled to real sizes
|
|
40
|
-
* of graphic objects.
|
|
41
|
-
* @extends module:shapers/Shaper.Shaper
|
|
42
|
-
*/
|
|
43
|
-
export class Holes extends Shaper {
|
|
44
|
-
/**
|
|
45
|
-
* Holes constructor
|
|
46
|
-
* @param {number} nx - Not used
|
|
47
|
-
* @param {number} ny - Not used
|
|
48
|
-
*/
|
|
49
|
-
constructor(nx, ny) {
|
|
50
|
-
super(1, 1);
|
|
51
|
-
this.customShapes = true;
|
|
52
|
-
this.nCols = nx;
|
|
53
|
-
this.nRows = ny;
|
|
54
|
-
this.showEnclosure = true;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Shapes are already loaded by {@link module:shapers/Shaper.Shaper Shaper}, so this function just sets `initiated` to `true`
|
|
59
|
-
* @override
|
|
60
|
-
*/
|
|
61
|
-
buildShapes() {
|
|
62
|
-
if (this.nCells > 0)
|
|
63
|
-
this.initiated = true;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Gets the rectangle that contains all shapes
|
|
68
|
-
* @override
|
|
69
|
-
* @returns {module:AWT.Rectangle}
|
|
70
|
-
*/
|
|
71
|
-
getEnclosingShapeData() {
|
|
72
|
-
return this.showEnclosure ? (this.enclosing || super.getEnclosingShapeData()) : null;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Register this class in the list of known shapers
|
|
77
|
-
export default Shaper.registerClass('@Holes', Holes);
|
package/src/shapers/JigSaw.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File : shapers/JigSaw.js
|
|
3
|
-
* Created : 01/04/2015
|
|
4
|
-
* By : Francesc Busquets <francesc@gmail.com>
|
|
5
|
-
*
|
|
6
|
-
* JClic.js
|
|
7
|
-
* An HTML5 player of JClic activities
|
|
8
|
-
* https://projectestac.github.io/jclic.js
|
|
9
|
-
*
|
|
10
|
-
* @source https://github.com/projectestac/jclic.js
|
|
11
|
-
*
|
|
12
|
-
* @license EUPL-1.2
|
|
13
|
-
* @licstart
|
|
14
|
-
* (c) 2000-2020 Educational Telematic Network of Catalonia (XTEC)
|
|
15
|
-
*
|
|
16
|
-
* Licensed under the EUPL, Version 1.1 or -as soon they will be approved by
|
|
17
|
-
* the European Commission- subsequent versions of the EUPL (the "Licence");
|
|
18
|
-
* You may not use this work except in compliance with the Licence.
|
|
19
|
-
*
|
|
20
|
-
* You may obtain a copy of the Licence at:
|
|
21
|
-
* https://joinup.ec.europa.eu/software/page/eupl
|
|
22
|
-
*
|
|
23
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
-
* distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
|
|
25
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
26
|
-
* Licence for the specific language governing permissions and limitations
|
|
27
|
-
* under the Licence.
|
|
28
|
-
* @licend
|
|
29
|
-
* @module
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import Shaper from './Shaper.js';
|
|
33
|
-
import { Path, PathStroke } from '../AWT.js';
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* This {@link module:shapers/Shaper.Shaper Shaper} returns a set of rectangular shapes with teeth and slots that fit between them.
|
|
38
|
-
* @extends module:shapers/Shaper.Shaper
|
|
39
|
-
*/
|
|
40
|
-
export class JigSaw extends Shaper {
|
|
41
|
-
/**
|
|
42
|
-
* JigSaw constructor
|
|
43
|
-
* @param {number} nx - Number of columns
|
|
44
|
-
* @param {number} ny - Number of rows
|
|
45
|
-
*/
|
|
46
|
-
constructor(nx, ny) {
|
|
47
|
-
super(nx, ny);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Builds the jigsaw shapes based on the number of rows and columns
|
|
52
|
-
* @override
|
|
53
|
-
*/
|
|
54
|
-
buildShapes() {
|
|
55
|
-
// Create two two-dimension arrays for storing the type of horizontal and vertical lines
|
|
56
|
-
let hLineType = [], vLineType = [];
|
|
57
|
-
for (let i = 0; i <= this.nRows; i++) {
|
|
58
|
-
hLineType[i] = [];
|
|
59
|
-
vLineType[i] = [];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
for (let row = 0; row < this.nRows; row++) {
|
|
63
|
-
for (let col = 0; col < this.nCols; col++) {
|
|
64
|
-
hLineType[row][col] = row === 0 ? 0 : 1 + (this.randomLines ? Math.round(Math.random() * 9) : row + col) % 2;
|
|
65
|
-
vLineType[row][col] = col === 0 ? 0 : 1 + (this.randomLines ? Math.round(Math.random() * 9) : col + row + 1) % 2;
|
|
66
|
-
if (col === this.nCols - 1)
|
|
67
|
-
vLineType[row][col + 1] = 0;
|
|
68
|
-
if (row === this.nRows - 1)
|
|
69
|
-
hLineType[row + 1][col] = 0;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const w = 1 / this.nCols, h = 1 / this.nRows;
|
|
74
|
-
for (let r = 0; r < this.nRows; r++) {
|
|
75
|
-
for (let c = 0; c < this.nCols; c++) {
|
|
76
|
-
const x = w * c;
|
|
77
|
-
const y = h * r;
|
|
78
|
-
const sd = new Path([new PathStroke('M', [x, y])]);
|
|
79
|
-
this.hLine(sd, hLineType[r][c], x + 0, y + 0, w, h, false);
|
|
80
|
-
this.vLine(sd, vLineType[r][c + 1], x + w, y + 0, w, h, false);
|
|
81
|
-
this.hLine(sd, hLineType[r + 1][c], x + w, y + h, w, h, true);
|
|
82
|
-
this.vLine(sd, vLineType[r][c], x + 0, y + h, w, h, true);
|
|
83
|
-
sd.addStroke(new PathStroke('X'));
|
|
84
|
-
sd.calcEnclosingRect();
|
|
85
|
-
// Save the Path in `shapeData`
|
|
86
|
-
this.shapeData[r * this.nCols + c] = sd;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
this.initiated = true;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Adds an horizontal line to the provided path
|
|
94
|
-
* @param {module:AWT.Path} sd - The Path to which the line will be added
|
|
95
|
-
* @param {number} type - Type of tooth: 0 is flat (no tooth), 1 means tooth up, and 2 means tooth down
|
|
96
|
-
* @param {number} x - X coordinate of the starting point
|
|
97
|
-
* @param {number} y - Y coordinate of the starting point
|
|
98
|
-
* @param {number} w - Width of the piece
|
|
99
|
-
* @param {number} h - Height of the piece
|
|
100
|
-
* @param {boolean} inv - The line must be drawn right to left
|
|
101
|
-
*/
|
|
102
|
-
hLine(sd, type, x, y, w, h, inv) {
|
|
103
|
-
const
|
|
104
|
-
kx = inv ? -1 : 1,
|
|
105
|
-
ky = type === 1 ? 1 : -1;
|
|
106
|
-
|
|
107
|
-
if (type === 0)
|
|
108
|
-
// Flat line
|
|
109
|
-
sd.addStroke(new PathStroke('L', [x + w * kx, y]));
|
|
110
|
-
else {
|
|
111
|
-
const x0 = x + (w - w * this.baseWidthFactor) / 2 * kx;
|
|
112
|
-
const wb = w * this.baseWidthFactor * kx;
|
|
113
|
-
// Approximation to the tooth:
|
|
114
|
-
sd.addStroke(new PathStroke('L', [x0, y]));
|
|
115
|
-
// The tooth:
|
|
116
|
-
const hb = h * this.toothHeightFactor * ky;
|
|
117
|
-
sd.addStroke(new PathStroke('L', [x0, y + hb]));
|
|
118
|
-
sd.addStroke(new PathStroke('L', [x0 + wb, y + hb]));
|
|
119
|
-
sd.addStroke(new PathStroke('L', [x0 + wb, y]));
|
|
120
|
-
// Draw the remaining of the line
|
|
121
|
-
sd.addStroke(new PathStroke('L', [x + w * kx, y]));
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
*
|
|
127
|
-
* Adds a vertical line to the provided path
|
|
128
|
-
* @param {module:AWT.Path} sd - The Path to which the line will be added
|
|
129
|
-
* @param {number} type - Type of tooth: 0 is flat (no tooth), 1 means tooth right, and 2 means tooth left
|
|
130
|
-
* @param {number} x - X coordinate of the starting point
|
|
131
|
-
* @param {number} y - Y coordinate of the starting point
|
|
132
|
-
* @param {number} w - Width of the piece
|
|
133
|
-
* @param {number} h - Height of the piece
|
|
134
|
-
* @param {boolean} inv - The line must be drawn bottom to top
|
|
135
|
-
*/
|
|
136
|
-
vLine(sd, type, x, y, w, h, inv) {
|
|
137
|
-
const
|
|
138
|
-
ky = inv ? -1 : 1,
|
|
139
|
-
kx = type === 1 ? 1 : -1;
|
|
140
|
-
|
|
141
|
-
if (type === 0) {
|
|
142
|
-
// Flat line
|
|
143
|
-
sd.addStroke(new PathStroke('L', [x, y + h * ky]));
|
|
144
|
-
} else {
|
|
145
|
-
const y0 = y + (h - h * this.baseWidthFactor) / 2 * ky;
|
|
146
|
-
const hb = h * this.baseWidthFactor * ky;
|
|
147
|
-
// Approximation to the tooth:
|
|
148
|
-
sd.addStroke(new PathStroke('L', [x, y0]));
|
|
149
|
-
// The tooth:
|
|
150
|
-
const wb = w * this.toothHeightFactor * kx;
|
|
151
|
-
sd.addStroke(new PathStroke('L', [x + wb, y0]));
|
|
152
|
-
sd.addStroke(new PathStroke('L', [x + wb, y0 + hb]));
|
|
153
|
-
sd.addStroke(new PathStroke('L', [x, y0 + hb]));
|
|
154
|
-
// Draw the remaining line
|
|
155
|
-
sd.addStroke(new PathStroke('L', [x, y + h * ky]));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Register this class in the list of known shapers
|
|
161
|
-
export default Shaper.registerClass('@JigSaw', JigSaw);
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File : shapers/Rectangular.js
|
|
3
|
-
* Created : 19/05/2015
|
|
4
|
-
* By : Francesc Busquets <francesc@gmail.com>
|
|
5
|
-
*
|
|
6
|
-
* JClic.js
|
|
7
|
-
* An HTML5 player of JClic activities
|
|
8
|
-
* https://projectestac.github.io/jclic.js
|
|
9
|
-
*
|
|
10
|
-
* @source https://github.com/projectestac/jclic.js
|
|
11
|
-
*
|
|
12
|
-
* @license EUPL-1.2
|
|
13
|
-
* @licstart
|
|
14
|
-
* (c) 2000-2020 Catalan Educational Telematic Network (XTEC)
|
|
15
|
-
*
|
|
16
|
-
* Licensed under the EUPL, Version 1.1 or -as soon they will be approved by
|
|
17
|
-
* the European Commission- subsequent versions of the EUPL (the "Licence");
|
|
18
|
-
* You may not use this work except in compliance with the Licence.
|
|
19
|
-
*
|
|
20
|
-
* You may obtain a copy of the Licence at:
|
|
21
|
-
* https://joinup.ec.europa.eu/software/page/eupl
|
|
22
|
-
*
|
|
23
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
-
* distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
|
|
25
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
26
|
-
* Licence for the specific language governing permissions and limitations
|
|
27
|
-
* under the Licence.
|
|
28
|
-
* @licend
|
|
29
|
-
* @module
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import Shaper from './Shaper.js';
|
|
33
|
-
import { Rectangle, Point, Dimension } from '../AWT.js';
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* This is the simplest {@link module:shapers/Shaper.Shaper Shaper}. It divides the graphic object in a set of rectangular
|
|
38
|
-
* shapes distributed in the specified number of rows and columns.
|
|
39
|
-
* @extends module:shapers/Shaper.Shaper
|
|
40
|
-
*/
|
|
41
|
-
export class Rectangular extends Shaper {
|
|
42
|
-
/**
|
|
43
|
-
* Rectangular constructor
|
|
44
|
-
* @param {number} nx - Number of columns
|
|
45
|
-
* @param {number} ny - Number of rows
|
|
46
|
-
*/
|
|
47
|
-
constructor(nx, ny) {
|
|
48
|
-
super(nx, ny);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Builds the rectangular shapes based on the number of rows and columns
|
|
53
|
-
* @override
|
|
54
|
-
*/
|
|
55
|
-
buildShapes() {
|
|
56
|
-
const
|
|
57
|
-
w = 1 / this.nCols,
|
|
58
|
-
h = 1 / this.nRows;
|
|
59
|
-
for (let y = 0; y < this.nRows; y++) {
|
|
60
|
-
for (let x = 0; x < this.nCols; x++) {
|
|
61
|
-
this.shapeData[y * this.nCols + x] = new Rectangle(new Point(x * w, y * h), new Dimension(w, h));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
this.initiated = true;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
Object.assign(Rectangular.prototype, {
|
|
69
|
-
/**
|
|
70
|
-
* Overrides same flag in {@link module:/shapers/Shaper.Shaper#rectangularShapes Shaper#rectangularShapes}
|
|
71
|
-
* @name module:shapers/Rectangular.Rectangular#rectangularShapes
|
|
72
|
-
* @override
|
|
73
|
-
* @type {boolean} */
|
|
74
|
-
rectangularShapes: true,
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
// Register this class in the list of known shapers
|
|
78
|
-
export default Shaper.registerClass('@Rectangular', Rectangular);
|