Initial CRAN release. Complete overhaul of the package, including new features, accessibility improvements, unified design, and CRAN-ready packaging. Migrated from GitLab (private) to GitHub (public).
Renamed fillGaps() to fillBlanks() for consistency with the
"fill-in-the-blank" terminology used throughout the documentation.
Shiny render functions renamed to follow camelCase convention:
rendersingleQuestion -> renderSingleQuestion,
rendermultiQuestions -> renderMultiQuestions,
renderFillGaps -> renderFillBlanks.
Parameter naming unified across all quiz functions: all color parameters
now use the short form (Col/Bg), e.g. titleCol, titleBg,
questionCol, questionBg, mainCol, mainBg, optionBg.
Renamed submitButtonCol/submitButtonBg to navButtonCol/navButtonBg
in singleQuestion() and fillBlanks() for consistency with
multiQuestions().
Removed answersCol, answersBg, and hoverBg parameters from
multiQuestions(). Use mainCol and optionBg instead. Hover color is
now auto-derived (30% darker).
convert2JSON() is no longer exported (internal function only).
Default for scroll changed to FALSE in all quiz functions.
Set scroll = TRUE explicitly for HTML slide presentations.
Default for showSolutionButton changed to TRUE in all quiz functions.
Added multiple-choice support to singleQuestion() and
multiQuestions(). The mode is auto-detected from the answer vector.
singleQuestion() in multiple-choice mode shows Submit, Show tips, and
Show solution buttons with customizable colors.
Added shuffle parameter to singleQuestion() (shuffles answer options)
and multiQuestions() (shuffles question order, including on "Try again").
Added language parameter to all quiz functions. Built-in support for
English ("en"), German ("de"), French ("fr"), and Spanish ("es").
Translations stored in inst/translations.json.
Added rquizTheme() for creating reusable themes that can be applied to
any quiz function via the theme parameter. Explicit arguments always
override theme values.
Added input validation functions: checkSingleQuestion(),
checkMultiQuestions(), and checkFillBlanks(). These are called
internally but also exported for manual use.
Added titleAlign parameter to all quiz functions.
Added mainCol/mainBg parameters to singleQuestion() and
fillBlanks() (already existed in multiQuestions()).
Added optionBg parameter to singleQuestion() for styling answer
option rows (already existed in multiQuestions() as answersBg).
Added questionCol parameter to multiQuestions() for independent
question text color. Also added questionCol/questionBg to
fillBlanks() for the description container.
Added questionFontSize parameter to singleQuestion().
Added blanksWidth = "auto" mode to fillBlanks() that automatically
sizes input fields based on the longest correct answer (minimum 50px).
Added description parameter to fillBlanks() with automatic default
text based on language setting.
fillBlanks() description container now provides visual feedback
(green/red) after submission.
multiQuestions() now remembers selected answers when navigating back
to previous questions.
Added tip button support to multiQuestions() (per-question tips,
with auto-generated tip for MC questions showing number of correct
answers).
Added tip and solution button support to singleQuestion() in
single-choice mode.
Added ARIA attributes: role, tabindex, aria-label, aria-checked
on interactive elements; aria-expanded and aria-controls on toggle
buttons (Tip/Solution).
Added keyboard navigation: Tab through options and buttons, Enter/Space to select options, focus management on page transitions.
Added CSS :focus outlines for keyboard users (hidden for mouse clicks
via :focus-visible).
Click event propagation stopped inside quiz widgets to prevent conflicts with slide frameworks (e.g. slidy).
Removed jQuery dependency: all JavaScript code now uses Vanilla JS. This eliminates the bundled jQuery 3.5.1, jQuery UI, and jQuery UI Touch Punch libraries, reducing the package size.
Replaced fragile paste0()-based JSON generation in convert2JSON() with
jsonlite::toJSON(). Special characters in questions (quotes, backslashes)
are now correctly escaped.
Unified HTML structure across all three quiz types: consistent class naming (title, question, main, options, buttons), consistent padding, font sizes, and container hierarchy.
Unified design defaults across all three quiz types (consistent colors, button styles, border-radius, responsive layout).
Fixed widget scoping: all DOM queries are now scoped to the widget container, preventing conflicts when multiple quiz widgets appear on the same page.
Fixed unscoped CSS selectors that could affect elements outside the quiz (e.g. in ioslides presentations).
Responsive button layout: buttons wrap to next line on narrow screens.
Added pkgdown website with vignette, interactive gallery, and demo files for Quarto, Slidy, and RevealJS.
Changed license from CC BY 4.0 to MIT for CRAN compatibility.
Migrated repository from GitLab to GitHub (https://github.com/saskiaotto/rquiz).
dragAndDrop() due to persistent touch/interaction issues on
tablets and in slide presentations.fillGaps() as a replacement: a fill-in-the-blank cloze quiz
where users type answers into input fields instead of dragging items.dragAndDrop(): a cloze drag-and-drop quiz where users drag answer
options to blank fields in the text.singleQuestion(): Single-choice quiz with immediate feedback.multiQuestions(): Multi-page quiz with timer and results page.