- Upgraded dependencies
- Add the
dist
folder to the webpack dev server static directory.
- Corrected an NPM warning in
package.json
- Corrected error parsing undefined
mediaBag
attribute in JSON files. - Always encode text-based data URLs.
- Removed unnecessary files from
/build
, affecting the NPM package.
- Upgraded dependencies
- NODE: Use
globalThis
instead ofglobal
(legacy in NodeJS 22) if available. - NODE: Avoid overwrite
global.navigator
and other new global objects in NodeJS 22.
- Upgraded dependencies
- Moved
xmldom
andjsdom
to Dependencies inpackage.json
(they are no longer devDependencies)
- Upgraded ESLint to v9. Config file is now:
eslint.config.mjs
. - Use specific file extensions to differentiate CommonJS (.cjs) and ECMAScript (.mjs) module formats.
- Converted
webpack.config
andbuild-locales
to ECMAScript module format. - Always use file extensions when importing sibling modules.
- Exported all JClic classes in the NPM package
- Simplified the initialization and loading of jclic.js as an NPM package.
- Allowed jclic.js to be loaded as an ES6 module from NodeJS.
- Upgraded tests for NodeJS.
- Upgraded dependencies.
- Removed dependency of 'clipboard-polyfill'. The clipboard API is now supported in all browsers.
- Reincorporation of
webpack-node-externals
, which is used when building the nodeJS package. - Upgraded dependencies.
- Upgraded dependencies..
- Uninstall
webpack-node-externals
due to an incompatibility withclipboard-polyfill
version 4. - Avoid font checking when running on NodeJS due to an error of JSDOM with jQuery XML node trees.
- Upgraded dependencies.
- Upgraded dependencies.
- Replace calls to
substr
(deprecated) bysubstring
.
- Upgraded dependencies.
- Use clean-jsdoc-theme instead of the outdated ink-docstrap theme to generate the technical documentation with JSDoc.
- Upgraded dependencies.
- Remove unnecessary dependencies:
scriptjs
. - Improve graphics performance setting willReadFrequently to
true
when acquiring CanvasRenderingContext2D in activities using BoxConnector.
- Upgraded dependencies.
- Detect swipe gestures on touch devices to go back or forward in the sequence of activities.
- Toggle full screen with "double touch" gesture.
- Clear
pos0
attribute inActiveBox
after bag resize or move.
- Upgraded dependencies.
- Calling
patch-package
inpostinst
does not work with the NPM package. Moved toprebuild
.
- Upgraded dependencies.
- Allow "inverse resolution" in word search activities: clues are initially shown, and gradually hidden when the user identifies them.
- Use of patch-package to avoid compilation warnings.
- Upgraded dependencies.
- Use ink-docstrap-template instead ink-docstrap to deal with updated components, thus avoiding security warnings.
- Direct use of jsdom instead of mock-browser (outdated) in
test/nodejs
, to avoid security warnings.
IdentifyText
activities were not fully implemented: only targets could be selected. You can now select any word (or letter inidentifyChars
mode), although not part of a target. To be successful with the activity, only the targets must be selected.
- Upgraded dependencies.
- Avoid bad URLs in local files when running on NodeJS with JSDOM.
- Recycle HTML audio elements instead of building one for each audio file at startup. This has been motivated by a breaking change introduced in Chrome 92+, limiting the maximum number of media player elements per document. (see: https://bugs.chromium.org/p/chromium/issues/detail?id=1144736). This improvement will reduce the startup time of JClic projects and the size of media bytes to be downloaded, but can have a side effect, introducing latency when playing audio because is now always fetched "on demand" (no more preloading).
- Added Romanian translation, thanks to Studio Davis Tutoriale Programe.
- Upgraded dependencies.
- Use real files instead of inline JS constants for CSS, SVG, PNG and MP3 assets. These files are finally codified and inlined by WebPack at compile time.
- Fixed an issue with i18n, which did not correctly apply the required language selection.
- i18n has been written from scratch, simplifying its operation and supporting different "locale" encodings.
- JClic projects can be now encapsulated in JSON format (files with extension
.jclic.json
). Current files in XML format (.jclic
) will be still supported, but JSON will be the default format from now. Both formats can also be packaged in ZIP files (files of type.jclic.zip
and.scorm.zip
). This will simplify the development of the upcoming new project JClic Author HTML5. - JClic.js uses now JavaScript modules instead of AMD modules and RequireJS. All members of complex modules like AWT and Utils can now be imported directly.
- Static factory methods in classes with multiple descendants.
- New methods
getAttributes
andsetAttributes
in core classes, used to serialize and de-serialize projects data. - Drop Bower support.
- Open source license updated to European Union Public License 1.2.
- Check for numeric digits in Arith activity answers before converting them to numbers.
- Page reloads when entering text to the first question on Written Answer activities (jQuery related)- Use 'idempotent-babel-polyfill' instead of 'babel-polyfill' as a workaround to this issue, causing problems in JClic module for Moodle.
- Use the
box-sizing
CSS attribute to compute the real with of the counters area inDefaultSkin
. - Audio recorder features now enabled for all modern browsers using MediaDevices.getUserMedia instead of the deprecated method navigator.getUserMedia.
- Find AudioContext with vendor prefix in MIDI audio player (needed for Safari)
- Unset
box-shadow
andtext-shadow
attributes in custom buttons. - Accessible components for
canvas
regions should always be created sinceHitRegions
have been deprecated. Also,CanvasRenderingContext2D.drawFocusIfNeeded
should be called on each call toupdateContent
onActiveBox
objects, not just at creation time. - Parse new JClic project multiple descriptions in XML files.
AWT.Font.cssFont
should usepx
asfont-size
unit for consistency with JClic.- Use underscore instead of blank space as filling character in
TextActivityDocument.TextTarget
. - Correct the vertical position of centered text in boxes and grid cells.
- Workaround for a bug on Chrome and Firefox XML parsers, throwing errors whith hexadecimal character entities.
- Updated core components to their latest versions.
- Use of
package-lock
instead ofnpm-shinkwrap
to lock version dependencies. - Restored semicolons in all source files.
- Deliverable files are now minimized with Terser intead of Uglifyjs.
- Full screen mode now using direct calls to the Full Screen API instead of screenfull.
- Upgraded components.
- Max audio recording time increased to 180".
- Provide visual feedback while recording audio.
- Map JDK logical fonts ("Dialog", "Serif", etc.) to HTML5 generic font family names.
- Improved experience with screen readers like ChromeVox and Chromevox Classic.
- Updated JSDoc comments. Published full API Docs with working links.
- Updated test suites.
- Implemented Clic 3.0 behavior on
panels/Explore
activities without buttons and automatic step forward. - Added a hidden message box to
skins/EmptySkin
, thus allowing activities to play audio at start. - Avoid browser's spell checking on written answer activities.
- Use the History API to record the list of played JClic activities, thus allowing to navigate between them with the browser's
back
andforward
buttons. - Interpret negative values as percentages when setting CSS sizes, useful for the JClic module for Moodle.
- Corrected a bug in
automation/arith/Arith.js
that affected operations with decimals with do not carry option.
- Numeric expressions generated by "Arith" (the mental arithmetics moduleof JClic) use now dot or comma as a decimal separator, depending on the browser's "locale" settings.
- The new
numericContent
activity flag is used by Arith activities to check written answers. So expressions like "0.1", "0.10" and "00,100" (with dot or comma) are considered equivalent.
- Explicit call to
HTMLAudioElement.load
inbags/MediaBagElement.build
to avoid the lack ofcanplay
events when just setting thesrc
attribute in Chrome on Android < 7. Now JClic always try to load audio content, also in Android!
- Basic support for MIDI files: Only one musical instrument (acoustic grand piano) is dynamically loaded and used for all tracks, in a single MIDI channel schema. No percussion sounds on channel 10. This feature must be improved on the future, but currently covers the basic necessities of most musical activities.
- JClic.js is now also available also in Polish, thanks to Waldemar Stoczkowski!
- Build scripts updated to work with Babel 7
- Allow projects to have multiple custom skins defined in XML files.
- Use of Webpack 4 to polyfill, transpile and build the main distributable file
jclic.min.js
.
- Avoid playing disabled event sounds.
- Declare the
document
member inActivity.prototype
. - Use of
Element.getAttribute
instead ofstyle.attributes.*
.
- Full implementation of JClic "legacy custom skins" (see v1.1.3) including counters and progress animations. This feature makes use of CSS animation and grid layout, so please update your web browser!
- Improved responsiveness: Now skin elements are reduced to 2/3 or 1/2 of its original size when running on mobile devices with small screens.
- Basic functionality of JClic "legacy custom skins" (based on XML files) are now supported in browsers compatible with CSS Grid Layout. This feature is currently used in many great JClic projects created by Imma Palahí.
- Solved a bug in Menu.js.
- Check for null values on AUDIO_BUFFERS and mbe.data.
- All the code has been updated to ECMAScript6 (ES6), taking advantage of new JavaScript features (classes, constants, arrow functions, array methods...) in modern browsers. The main file
jclic.min.js
will maintain compability with older browsers for some time, since it is transpiled to ES5 thanks to Babel and Webpack. - Updated test files.
- All media is now played at the end of the current event handling, so it's not blocked by mobile browsers (see this thread for more information about this issue).
- New JSDoc-Bootstrap theme for the API Docs.
- Catch
Enter
key in written answer activities. - Disable drop-down lists at the end of text activities.
- WrittenAnswer activities: always update the alternative content off cells when done.
- Text activities can now display pop-up windows and play helper sounds of targets, as in JClic Player.
- Avoid false positives with empty responses in text activities.
- Check always the ordering of cascading styles text activities.
- Always detect carriage returns in activities of type "fill-in blanks".
- Corrected a bug detected in cell placement inside ActiveBoxBag, affecting some exchange puzzles with gigsaw and other special shapers.
- New startup parameter
returnAsExit
treatsActivitySequence
elements of typereturn
as if they where of typeexit
, only whenPlayerHistory.sequenceStack
is empty.
- Major version number updated to 1.x to be compliant with semver. With this change, the project goes from Initial development (0.x) to Public API (1.x).
- New class
report/SessionStorageReporter
, storing report results insessionStorage
orlocalStorage
. - jclic.js is also available at CDNJS, thanks to Peter Dave Hello and LboAnn.
- New NPM scripts to build, debug and launch jclic.js, now based on webpack instead of Grunt and Browserify. See README.md for more information.
- Implemented the type of activity "Menu", used in legacy JClic libraries. Useful for JClic libraries hosted on school servers: now they can be served as HTML resources just placing an
index.html
in the root folder pointing to thelibrary.jclic
file, like in this example.
- Updated French translation, thanks to Heluga Valka.
- Control of the maximum display time of previous screen in text activities. This JClic feature was unimplemented until now. Probably closes #12.
- Backslashes in active media parameters and file names are now always converted to forward slashes. This avoids problems with chaining in big projects distributed among multiple folders.
- Set default value of
navButtonsAlways
tofalse
. Closes #11. - Avoid creating
AccessibleElement
when canvas has no surface. - Double-check the existence of
ActiveBoxBag
elements before using them. - Use index -1 in
jQuery.get
to avoid addeddiv style-scope
elements in Shadow DOM. - Put stylesheets within shadow-root when in shadow DOM.
- Use HTTPS as defaul protocol in
TCPReporter
. - Set an empty string as default value in dropdown lists on text activities.
- Flush always pending tasks in
TCPReporter
before exiting.
- Display a progress bar (in addition to the rotating animation) while loading project media elements.
- Transform full activity class names to
@className
expressions, so projects using this naming schema (like GeoClic) can now make use of JClic.js.
EmptySkin
has been implemented and is now used as initial player skin.- JClic java applets generated through
jclicplugin.js
are now always loaded as JClic.js HTML5 elements. This change has been motivated by the fact that Firefox 52 has dropped support for Java applets. - Updated NPM components.
- Check
AWT.WebFont
to avoid conflicts with other webfont loader packages already loaded. - Build always a skin for
JClicPlayer
, even when the requested one does no exist. - Force main container width and height when inside a
TD
. - Avoid incorrect placement of inner elements when parent container has the
align
attribute defined.
- Allow animated GIFs also over gradients.
- Solved incorrect startup of "complete text" activities with previous screen.
- Place "check" button always anchored at bottom of text activities.
- Properly initialize
Evaluator
withIntl.Collator
in text activities. - Solved problems when rounding and ceiling integers in Arith.
- Avoid calling
buildAccessibleElements
on null panels.
- Export third-party NPM packages in a new member of
Utils
calledpkg
, so external scripts can make use of it through the global vriableJClicObject
. This change was needed to implement downloading of JClic projects in JClic Repo.
- Use of es6-promise polyfill to support
Promise
in IE11 and other outdated browsers. - Explicit loading of fonts included in JClic projects. The
name
attribute of media elements is now used asfont-family
value.
- Resolve dependencies and browserless issues affecting
listProjectContents.js
(intest/nodejs
).
- Specific developer's settings for VS-Code, besides NetBeans IDE.
- Use of ESLint instead of JSHint. Same functionality, but better integration with VS-Code.
- Don't stop media on mouseup events.
- Play sounds also in grid B, when available.
- Animated GIF support extended to more activities: now panels with static (not scrambled) cells, using any type of shaper, can have an animated GIF as a main content. This applies to information screen, identify, associations, written answer and word search activities.
- Treat 'x' as zero when parsing data for Arith operators, thus avoiding "NaN" errors in some activities.
- Avoid keyboard hiding on tablets when in written answer activities.
- Ignore mouse events on accessible components.
- Added Japanese to the list of supported languages (thanks to Naofumi!).
- Improved log system.
- Fixed incorrect calculation of score in Identify activities.
- Improved accessibility based on WAI-ARIA specifications (still in progress).
- Experimental use of HTML canvas hit regions. In order to use it, flags
ExperimentalCanvasFeatures
(Chrome) orcanvas.hitregions.enabled
(Firefox) must be enabled. Checked with ChromeVox.
- Miscellaneous optimizations: conditional operators, jQuery expressions, allow reuse of JClicPlayer objects, etc. See git log for details.
- "Full screen" mode should work now as expected (when available).
- Avoid resizing of BoxBase prototype font attribute.
- Project license changed to EUPL-1.1 (compatible with GPL-2.0).
- Avoid "same-origin" policy exception when initializing SCORM from an embedded iFrame.
- JClic.js can now directly open
project.json
files generated by JClic Author.
- Merge styles with its base style (when defined) in
TextActivityDocument
. - Allow HTML text in
ActiveBox
cells. - Workaround for an Edge/Explorer SVG bug in 'close' button.
- Add
-webkit-flex-xxx
CSS properties for Safari 8 compatibility.
- Now JClic.js opens the new
.scorm.zip
files generated by JClic Author 0.3.2.0. - More strict settings when checking code with JSHint.
- Apply
JClicPlayer.defaultSkin
only whenJClicProject.skin
is not specified.
- Implemented support for SCORM 1.2 and SCORM 2004. Now JClic reports global score and session time when a SCORM API is detected.
- New method to calculate scores for SCORM: now "partial score" refers to the score average of all played activities and "global score" multiplies it by the ratio between the number of activities played at least once and the total number of activities in the project. For example, when playing a project with 20 activities, a student that has successfully finished only one activity will have a partial score of 100%, but its global score will be only 5%. When all activities are played at least once, global and partial scores have the same value.
- New logging system. Verbosity on the JavaScript console can now be adjusted with a 'logLevel' parameter that can have one of the values: all, trace, debug, info, warn, error and none. Default is: warn.
- Skin and player windows fully styled with CSS.
- Updated skin names. Expressions like '@___.xml' are no longer needed (but still supported).
- Added a
reset
method toJClicPlayer
.
- Set color and size for close icon.
- Waiting image changed from SVG animation (deprecated) to CSS keyframes.
- Skin support implemented with (almost) pure CSS.
- Implemented support for stock skins (standard, orange, blue, green, simple and mini).
- Created
loadProject
function in the globalJClicObject
, thus allowing the creation of JClic players from other scripts. - Allow JClic.js to be used as a Node.js module.
- Added example of Node.js usage in
test/nodejs
.
- New class
TCPReporter
allows now to connect with external services like JClic Reports and JClic module for Moodle. - i18n: New messages waiting for translation in Transifex. Contributions welcome!
- Upgrade to jQuery 3.0.
- Improved user interface in reports.
- Implemented
Skin.showDlg
.
- Use a
try
clause forcanvas.drawImage
to catch exceptions caused byHTMLImageElement
objects in broken state.
- Updated documentation and code comments.
- Unified
this
syntax in closures. - Added a Gitter badge to README.md.
- Set always base attributes when setting target style in text activities.
- i18n: Opened new project in Transifex to help translating messages to any language and locale. Initially filled with partial translations to
ar
,ast
,bs
,ca
,ca@valencia
,cs
,da
,de
,el
,en
,es
,eu
,fr
,gl
,he
,it
,nl
,pt
,pt_BR
,ru
,tr
,vec
andzh_TW
found on the main JClic translation project.
- Multi-language support using gettext (.po and .pot) files stored in
/locales
.
- Improved UI in reports.
- Added copy to clipboard and improved UI in reports.
- Optimized JQuery object builders.
- New counters (time, actions, score) and reports system.
- Use of Google WebFonts, with parameterizable font substitution list.
- Automatic detection of animated GIFs.
- Upgrade to JSZip 3.0.
- Suppressed 'test/lib' folder.
- Added some badges to
README.md
.
- Display animated GIFs out of canvas elements. Some complex paths will not be clipped, but native browser image animation is now used.
- Adjust borders in
ActiveBox
hosted components. - Partially reverted commit ba5330da that caused malfunctions in text activities.
- Hide
hostedComponent
when inactive.
- Script for exporting README.md to an HTML snippet, useful to update index.html in https://projectestac.github.io/jclic.js.
- New CDN: JClic.js is now also available from JSDelivr.
- Ignore
src
in Bower package. Now with justdist
files. - Updated readme and docs.
- Audio recording is now possible in JClic.js (browser permissions should be accepted on request).
- Converted
wav
files tomp3
in test activities. - Optimized hit test on Bezier curves, ellipses and complex paths.
Link event handlers to cells in text activities(reverted by 180c684).
- Solved bug in
MediaContent.isEquivalent
.
- Implemented
ActivitySequence.checkCurrentActivity
.
- Updated
npm
dependencies.
- Solved error in
ActiveMediaPlayer.linkTo
.
- Play video and Flash objects.
- Optimized loading of audio.
- Add
onClick
event tomsgBox
and process media content in the same thread where user gesture event is generated.
- Solved problems with
readyState
in media elements.
- "Check" button in text activities.
prevScreen
in text activities.
- Media content of type "URL" not working (fixes Issue #1).
- Corrected error in
EventSounds
inheritance.
- Use of event sounds.
- Updated base versions of
npm
packages. - "Identify text" activities.
- "Complete text" activities.
- Draw connection lines in "order text" activities.
- Compute relative paths in
PlayerHistory
. - Update
JClicPlayer
to support "file:" protocol.
- Correct the calculation of
nShapes
in "Holes" shaper. - Graphics workaround when working with local files.
- "order text" activities.
- Adjust automatic forwarding of activities.
- Avoid calls to nonexistent functions.
- Updated API docs.
- Normalize backslashes and avoid empty bags.
- Add 'close' button.
- Implemented
Skin.fit
. - JClic exports now the global variable
JClicObject
. - Use of
text()
instead ofhtml()
in text activities. - Multiple JClic objects in same document.
- Prevent browser spell-check in text activities.
- Tabulators in text activities.
- Allow passing project and options through global variables.
- Support sequences with multiple chained ZIP files.
- Chained calls to
PlayerHistory
push & pop. - Load
jclic.zip
files using JSZip. activityReady
method.- "Fill-in blanks" text activities.
- Implemented
BasicEvaluator
andComplexEvaluator
. - Moved
TextTarget
toTextActivityDocument.js
. - Implemented
TextTarget
. - "Cross word" activities.
- Blink cursor and optimized shape clipping.
- Action status listeners.
- "Word search" activities.
- New runtime parameters:
autoFit
,width
&height
. - Updated media icons.
- Activity panel fade-in.
- Full screen is now supported.
- "TextGrid" activities.
- Improved responsive design and passing of options.
- Seekable sounds.
- Improved waiting animation and activity borders.
- Form submit in "Written answer" activity.
- Support of touch devices.
- Added support to relative paths when loading projects.
- Added new test suite.
- "Written answer" activities.
- "Memory" activities.
- "Explore" activity.
- "Identify" activities.
- "Complex Association" activities.
- Improved
BoxConnector
. - "Simple Association".
- Implemented
AWT.Ellipse
. - "Hole" puzzle activity.
- Adjust "Holes" shaper.
- "Exchange" puzzle.
- Created "Arith" (automatic content provider).
- Implemented
BoxConnector
. - Cell scrambling.
- Clipping of multiple images into a single canvas.
- "JigSaw" shapers.
- "Double" Puzzle.
- "Information Screen" activity.
- Implemented
ActiveBoxGrid
. - Build
MediaContent
. - Implemented
TextActivityBase
. - Check CORS and HttpXMLRequest calls.
- Created
JClicPlayer
. - Created
DefaultSkin
.
- Solved invalid assignment of
nCols
andnRows
in "Holes" shaper. - Corrections in
PlayerHistory
. - Force
hasRemainer
inshapers.Holes
withbgImg
. - Avoid overlap of message boxes with transparent background.
- Avoid breaking lines in targets when CSS 'white-space' is set to 'pre-wrap' (only in Chrome).
- Check origin 'pos' and 'dim' in ctx.drawImage (Firefox crashes when out-of-range).
- Check for availability of
fullscreen.enabled
prior to use it. - Solved problem with double events stopping media.
- Solved problem with bad content type in $get.
- Solved erroneous calculation of remainder shape.
- Solved problem with
id
on empty cells. - Solved problems with parsing of shape data.
- Swap the loading of rows and columns in
ActiveBagContent
due to an old JClic bug. - Solved problem with color gradients.
- Activity start procedure revised.
- Updated class skeleton.
- Generate just one source map with Browserify.
- Optimized build process.
- Updated 'license' tag in package.json ('licenses' was deprecated).
- Updated npm module.
- Updated documentation and comments.
- Convert code comments to JSDoc format.
- Move static methods from prototype to constructor.
- Create scripts to convert svg and png files to inline data (in '/misc/scripts`).