Changelog

v0.37.0

  • Revert loading and dirty elements when the server returns a 304 (not modified) or a 500 error.

All changes since 0.36.1.

v0.36.1

  • More verbose error messages when components can’t be loaded (nerdoc).

  • More complete handling to prevent XSS attacks.

All changes since 0.36.0.

v0.36.0

  • Security fix: for CVE-2021-42053 to prevent XSS attacks (reported by Jeffallan).

** Breaking changes **

  • responses will be HTML encoded going forward (to explicitly opt-in to previous behavior use safe)

All changes since 0.35.3.

v0.35.3

All changes since 0.35.2.

v0.35.2

  • Fix: Make sure visible:elements trigger as expected in more cases.

  • Prevent the visibile element from continuing to trigger if the visbility element method returns False.

All changes since 0.35.0.

v0.35.0

  • Trigger an input or blur event for a model element from JavaScript

  • Visibility event with unicorn:visible attribute

Breaking changes

  • db_model Python decorator, unicorn:db, unicorn:field, unicorn:pk template attributes are removed.

All changes since 0.34.0.

v0.34.0

  • Initial prototype for component template lifecycle events.

  • Fix: elements after a child component would not get initialized 262 by joshiggins.

  • Fix: cache would fail in some instances 258.

All changes since 0.33.0.

v0.33.0

  • Fix: Allow comments, blank lines, or text at the top of component templates before the root element.

All changes since 0.32.0.

v0.32.0

  • Add debounce support to actions.

All changes since 0.31.0.

v0.31.0

  • Move JavaScript static assets into unicorn sub-folder

  • Determine correct path for installed app passed to startunicorn management command

  • Call startapp management command if app is not already installed

All changes since 0.30.0.

v0.30.0

  • Look in all INSTALLED_APPS for components instead of only in a unicorn app 210

  • Support settings.APPS_DIR which is the default for django-cookiecutter instead of just settings.BASE_DIR 214

** Breaking changes **

  • Require an application name when running the startunicorn management command for where the component should be created

All changes since 0.29.0.

v0.29.0

  • Sanitize initial JSON to prevent XSS

All changes since 0.28.0.

v0.28.0

All changes since 0.27.2.

v0.27.2

  • Fix bug with relationship fields on a Django model

All changes since 0.27.1.

v0.27.1

  • Fix some issues with many-to-many fields on a Django model

All changes since 0.27.0.

v0.27.0

  • Many-to-many fields on a Django model are now supported

  • Multiple partial targets

All changes since 0.26.0.

v0.26.0

  • Completely redesigned and much improved support for Django models and QuerySets.

  • Fix the startunicorn command and add some ascii art.

All changes since 0.25.0.

v0.25.0

  • Support calling functions in JavaScript modules.

  • Fix: use unicorn:db without a unicorn:model in the same element.

All changes since 0.24.0.

v0.24.0

All changes since 0.23.0.

v0.23.0

  • Performance enhancement that returns a 304 HTTP status code when an action happens, but the content doesn’t change.

  • Add unicorn:ignore attribute to prevent an element from being morphed (useful when using Unicorn with libraries like Select2 that change the DOM).

  • Add support for passing arguments to Unicorn.call.

  • Bug fix when attempting to cache component views that utilize the db_model decorator.

All changes since 0.22.0.

v0.22.0

  • Use Django cache for storing component state when available

  • Add support for Django 2.2.x

All changes since 0.21.2.

v0.21.2

  • Add backported dataclasses for Python 3.6. (@frbor)

All changes since 0.21.0.

v0.21.0

All changes since 0.20.0.

v0.20.0

All changes since 0.19.0.

v0.19.0

  • Re-implemented how action method parsing is done to remove all edge cases when passing arguments to component view methods. (@frbor).

  • Add support for passing kwargs to component view methods.

All changes since 0.18.1.

v0.18.1

  • Fix regression where component kwargs were getting lost (#140, #141)

  • Fix startunicorn management command (#142)

All changes since 0.18.0.

v0.18.0

  • Only send updated data back in the response to reduce network latency.

  • Experimental support for queuing up requests to alleviate race conditions when functions take a long time to process.

  • Bug fix: prevent race condition where an instantiated component class would be inadvertently re-used for component views that are slow to render

  • Bug fix: use the correct component name to call a component method from “outside” the component.

  • Deprecated: DJANGO_UNICORN setting has been renamed to UNICORN.

All changes since 0.17.2.

v0.17.2

  • Don’t send the parent context in the response for child components that specify a partial update.

  • Add support for element models to specify a partial update.

  • Add support for polls to specify a partial update.

  • Handle date, time, timespan when passed as arguments from JavaScript.

  • Render child component template’s JavaScript initialization with the parent’s as opposed to inserting a new script tag after the child component is rendered.

  • Bug fix: prevent an error when rendering a Django model with a date-related field, but a string value.

All changes since 0.17.1.

v0.17.1

  • Remove stray print statement.

  • Fix bug where child components would sometimes lose their action events.

All changes since 0.17.0.

v0.17.0

  • Target DOM changes from an action to only a portion of the DOM with partial updates.

All changes since 0.16.1.

v0.16.1

  • Remove debounce from action methods to reduce any perceived lag.

All changes since 0.16.0.

v0.16.0

  • Dirty states for when there is a change that hasn’t been synced yet.

  • Add support for setting multiple classes for loading states.

  • Attempt to handle when the component gets out of sync with an invalid checksum error.

  • Performance tweaks when there isn’t a change to a model or dbModel with lazy or defer modifiers.

All changes since 0.15.1.

v0.15.1

  • Fix bug where a component name has a dash in its name

All changes since 0.15.1.

v0.15.0

  • Add support for child components

  • Add discard action modifier

  • Add support for referring to components in a folder structure

  • Remove restriction that component templates must start with a div

  • Remove restriction that component root can’t also have unicorn:model or unicorn:action

All changes since 0.15.0.

v0.14.1

  • Prevent the currently focused model element from updating after the AJAX request finishes (#100).

All changes since 0.14.0.

v0.14.0

All changes since 0.13.0.

v0.13.0

All changes since 0.12.0.

v0.12.0

  • Redirect from action method in component

All changes since 0.11.2.

v0.11.2

  • Fix encoding issue with default component template on Windows (#91)

  • Fix circular import when creating the component (#92)

All changes since 0.11.0.

v0.11.0

  • $toggle special method.

  • Support nested properties when using the set shortcut.

  • Fix action string arguments that would get spaces removed inadvertently.

Breaking changes

  • All existing special methods now start with a $ to signify they are magical. Therefore, refresh is now $refresh, reset is now $reset, and validate is now $validate.

All changes since 0.10.1.

v0.10.1

  • Use LRU cache for constructed components to prevent ever-expanding memory.

  • Loosen beautifulsoup4 version requirement.

  • Fix bug to handle floats so that they don’t lose precision when serialized to JSON.

  • Fix bug to handle related models (ForeignKeys, OneToOne, etc) fields in Django models.

All changes since 0.10.0.

v0.10.0

All changes since 0.9.4.

v0.9.4

  • Fix: Prevent Django CharField form field from stripping whitespaces when used for validation.

  • Fix: Handle edge case that would generate a null exception.

  • Fix: Only change loading state when an action method gets called, not on every event fire.

All changes since 0.9.1.

v0.9.3

  • Handle child elements triggering an event which should be handled by a parent unicorn element.

All changes since 0.9.1.

v0.9.1

  • Fix: certain actions weren’t triggering model values to get set correctly

All changes since 0.9.0.

v0.9.0

All changes since 0.8.0.

v0.8.0

  • Add much more elaborate support for dealing with Django models.

All changes since 0.7.1.

v0.7.1

  • Fix bug where multiple actions would trigger multiple payloads.

  • Handle lazy models that are children of an action model better.

All changes since 0.7.0.

v0.7.0

Breaking changes

  • Remove unused unicorn_styles template tag

  • Use dash for poll timing instead of dot

All changes since 0.6.5.

v0.6.5

  • Attempt to get the CSRF token from the cookie first before looking at the CSRF token.

All changes since 0.6.4.

v0.6.4

  • Fix bug where lazy models weren’t sending values before an action was called

  • Add is_valid method to component to more easily check if a component has validation errors.

  • Better error message if the CSRF token is not available.

All changes since 0.6.3.

v0.6.3

  • Fix bug where model elements weren’t getting updated values when an action was being called during the same component update.

  • Fix bug where some action event listeners were duplicated.

All changes since 0.6.2.

v0.6.2

  • More robust fix for de-duping multiple actions.

  • Fix bug where conditionally added actions didn’t get an event listener.

All changes since 0.6.1.

v0.6.1

  • Fix model sync getting lost when there is an action (issue 39).

  • Small fix for validations.

All changes since 0.6.0.

v0.6.0

All changes since 0.5.0.

v0.5.0

  • Call component method from JavaScript.

  • Support classes, dictionaries, Django Models, (read-only) Django QuerySets properties on a component.

  • Debounce modifier to change how fast changes are sent to the backend from unicorn:model.

  • Lazy modifier to listen for blur instead of input on unicorn:model.

  • Better support for textarea HTML element.

All changes since 0.4.0.

v0.4.0

  • Set shortcut for setting properties.

  • Listen for any valid event, not just click.

  • Better handling for model updates when element ids aren’t unique.

All changes since 0.3.0.

v0.3.0

  • Add mount hook.

  • Add reset action.

  • Remove lag when typing fast in a text input and overall improved performance.

  • Better error handling for exceptional cases.

All changes since 0.2.3.

v0.2.3

  • Fix for creating default folders when running startunicorn.

All changes since 0.2.2.

v0.2.2

  • Set default template_name if it’s missing in component.

All changes since 0.2.1.

v0.2.1

  • Fix startunicorn Django management command.

All changes since 0.2.0.

v0.2.0

All changes since 0.1.1.

v0.1.1

  • Fix package readme and repository link.

All changes since 0.1.0.

v0.1.0

  • Initial version with basic functionality.