Reimplemented selector and quiz editor, lots of bugfixes and more

This update (4bed6c98f) brings with it the following changes:

Security issues

  • Unicode control characters are now stripped from plain-text input fields to protect against certain types of injection attacks.

Performance improvements

  • The text-to-speech (TTS) feature now uses iterative tree traversal instead of recursion to mark all the words in the page. This should make it more performant because it avoids certain hard-to-optimize JavaScript features (arguments.callee).

New features

  • Added script used to transcode all RIFF WAVE objects to MP3. This script will run regularly to ensure uploaded wave files don't take up too much space.

Enhancements

  • Our TinyMCE plugins, the object/container selector and quiz editor, have been refactored extensively.
    • The code is now much more understandable and layout has been cleaned up quite a lot.
    • Various unimplemented behavior has been removed.
    • The template code parser has been made much more robust and simpler, allowing for further improvements in the future. It has also been separated out into a separate TinyMCE plugin.
    • Resizing of the dialog windows now expand the appropriate sections properly.
    • Popup windows now show up on the same monitor as the main window in multi-monitor setups.
    • Styles for these two dialog windows are in the behavior stylesheet, so that they are always available and consistent on any site.
    • User interfaces for the plugins are now implemented in the request_selector and request_quiz_editor templates, allowing for better localization and more.
    • TinyMCE language packs are no longer needed, allowing for somewhat faster loading.
  • Quiz editor playback language now defaults to current content language.
  • Quiz editor preview feature is now located on the quiz type image instead of a separate button.
  • Object selector preview thumbnail no longer generate invalid size warnings because of CSS units.
  • The existing HTML5 uploader is used in the object selector which enables drag-n-drop uploading, progress indicator and multiple file upload during file selection.
  • The object/container selector is now easier to use from other code. The metadata for the selected element in the selector can now be dispatched to a user-supplied callback function.
  • It is now possible to navigate in the object/container selector using the keyboard. Arrow keys, Up/Down, Home/End and Enter/Backspace can be used to navigate the tree with ease.
  • The tab pages in the object selector now uses jQuery UI tabs instead of TinyMCE tabs.
  • Object selector now uses browser-native color selector.
  • There is still an issue in the object/container selector where double-click events are not properly handled on mobile devices. They trigger page zoom instead. This is not a new issue introduced by the refactoring.
  • Simplified code in PORTFOLIO.is_uuid() and PORTFOLIO.is_integer().
  • Disabling/enabling DOM elements is now done using jQuery .prop() method.
  • The selector request handler now has a boolean variable called tinymce_mode which is set to true when called from the TinyMCE plugin.
  • The list_log request handler has been converted to use jQuery DataTables plugin, more consistent with other user interfaces. Now allows sorting on date.
  • Improved talkbook feature to not require sound files to be present on web worker nodes, simplifying deployment. The talkbook feature can now be automatically tested. Multiple variants of the same word is now made available to code that uses it instead of just the first variant.
  • The login page displayed when the anonymous user doesn't have access now always contain a link to the forgotten password page, allowing for easier password recovery.

Bugfixes

  • Fixed invalid CSS border shorthand syntax.
  • An obscure bug when using TT BLOCK constructs together with process_template() TT function has been fixed.
  • Fixed a long-standing layout issue with the element_nav_course template.
  • Adjustment functions that work with the standard layout exit early if DOM elements are not present in the page.
  • Added support for Spanish user-interface language properly. It impacted CEFR sites.
  • Tables rendered using jQuery DataTables now support Spanish language.
  • Tightened the valid email regular expression, avoiding some forms of invalid emails, minimizing mail server errors.

Feature removals / deprecations

  • The WebFX ColumnList library is no longer used anywhere, so it was removed.
  • The pf_ordbok TinyMCE plugin was no longer used anywhere. It has been removed.
  • Renamed use of tinyMCE global JavaScript variable to tinymce. This should've been done when migrating from TinyMCE version 2 to version 3.
  • The object/container selector UI is no longer implemented using an XSL template. The list_element XSL template was removed.
  • The update metadata on server and create folder features in the object/container selector has been removed. They never did anything.
Spinner

Login