Changelog#
0.61.0#
Add
template_html
to specify inline template HTML on the component.Add
resolved
method which only fires once even when there are multiple actions, e.g. during a debounce.
0.60.0#
Silence warnings about multiple root elements for direct views.
Handle
force_render
in nested children for direct views #663.Handle error when manually refreshing direct views.
Handle component field type annotations for
dataclasses
andPydantic
BaseModel
#649 by siliconcow.Update
startunicorn
command to prevent spamming users and handle folder creation for nested components #642 by felipmartins.
Breaking changes
Unparseable
kwarg
argument passed into a component will be consideredNone
instead of being converted to a string.
<!-- If `abcde` is not a variable in the template context, it will get set to `name` as `None` whereas before it would get set as 'abcde' -->
{% unicorn 'hello' name=abcde %}
0.59.0#
0.58.1#
Try to prevent type hints from crashing components. #639
0.58.0#
This release could not have been made possible without the generous support of https://github.com/winrid and https://github.com/om-proptech. Thank you for sponsoring me and believing in django-unicorn
! It also includes critical improvements to nested components from https://github.com/imankulov.
Handle a list of
ValidationError
or just a string instead of requiring a thedict
version.Better support for type annotations for component fields.
Improved nested component support by imankulov.
Add
force_render
and$parent
.
Breaking changes
Child components will not by default render the parent component anymore. If this is required for your child component, specify self.parent.force_render = True
in any action that requires the parent to re-render. This change will reduce network bandwidth and isolates the amount of re-rendering required for nested components.
0.57.1#
Fix: Correctly serialize forms that have a a field with a Select widget.
0.57.0#
Warn if there is a missing root element.
Use
unicorn:id
to merge elements withmorphdom
.
0.56.1#
Handle Alpine.js being loaded with defer.
0.56.0#
Add support for using both Alpine.js and
Unicorn
together in a component (#597 by imankulov).Do not send a 304 if the child has a parent (#595).
Prevent sending the child DOM if there is a parent to reduce network payload size.
More verbose error message when a component can not be loaded (#453 by nerdoc).
0.55.0#
Support
List
/list
type annotations for component actions and fields (#582).Fix: calling a method in a parent will have the request available ([#583]https://github.com/adamghill/django-unicorn/pull/583).
Breaking changes
Dropped official support for Python 3.7 because its end of life was June 27, 2023.
Dropped official support for Django 2.2 because its end of life was April 1, 2022.
0.54.0#
0.53.0#
v0.52.0#
v0.51.0#
Fix: remove use of
ByteString
(#534) by hauntsaninja.Fix: Update
loading
on elements other than the current action element ([#512]https://github.com/adamghill/django-unicorn/pull/512) by bazubii).Fix: Negating a variable for
poll.disable
would not work correctly in some instances.
v0.50.0#
v0.49.2#
Fix: Calling methods with a model typehint would fail after being called multiple times (#476 by stat1c-void).
v0.49.1#
Fix: Missing
pp
import in Python 3.7.
v0.49.0#
Fix: Handle inherited (i.e. subclassed) models #459.
Add version and build date to minified JavaScript for easier debugging.
v0.48.0#
Reload JavaScript script elements when a template is re-rendered. Currently only enabled with the
RELOAD_SCRIPT_ELEMENTS
setting.
v0.47.0#
Fix: Include stacktrace for
AttributeError
errors.Fix: Only call
updated_
andupdating_
component functions once.
v0.46.0#
Support for loading nested components from a route that uses a class-based view.
Better support for children components.
v0.45.1#
v0.45.0#
Add ability to render initial data JavaScript inside the rendered component with
SCRIPT_LOCATION
setting
v0.44.1#
v0.44.0#
Add support for raising a
ValidationError
from component methods.
v0.43.1#
Fix: direct views were not caching the component correctly.
v0.43.0#
Defer displaying
messages
when an action method returns a redirect.Prevent morphing or other changes when redirecting.
v0.42.1#
Fix: dictionaries in a component would generate incorrect checksums and trigger a
Checksum does not match
errorRemove some serializations that was happening unnecessarily on every render.
Add Python 3.10 and Django 4.0 to test matrix.
v0.42.0#
Remove all blank spaces from JSON responses.
Optional support for minifying response HTML with
htmlmin
.Log warning message if the component HTML does not appear to be well-formed (i.e. an element does not have an ending tag). #342 by liamlawless35
Breaking changes
Bump supported Python to >=3.7.
v0.41.2#
Fix: Handle excluding a field’s attribute when the field is
None
.
v0.41.1#
Fix: Handle component classes with a
bool
class attribute and aform_class
with aBooleanField
. Reported by zurtri
v0.41.0#
v0.40.0#
Add direct view so that components can be added directly to urls without being required to be included in a regular Django template.
Add capability for
startunicorn
to create components in sub-folders. (#299)[https://github.com/adamghill/django-unicorn/issues/299]
v0.39.1#
Prefer
prefetch_related
to reduce database calls for many-to-many fields.
v0.39.0#
Explicit error messages when an invalid component field is excluded
Better support for serializing many-to-many fields which have been prefetched to reduce the number of database calls
Support excluding many-to-many fields with
javascript_exclude
v0.38.1#
Fix: Allow components to be
pickled
so they can be cached.
v0.38.0#
Include request context in component templates.
v0.37.2#
Fix: nested field attributes for
javascript_exclude
.
v0.37.1#
Support nested field attributes for
javascript_exclude
.
v0.37.0#
Revert loading and dirty elements when the server returns a 304 (not modified) or a 500 error.
v0.36.1#
More verbose error messages when components can’t be loaded (nerdoc).
More complete handling to prevent XSS attacks.
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)
v0.35.3#
Fix: Handle when there are multiple apps sub-directories 273 by apoorvaeternity.
v0.35.2#
Fix: Make sure
visible:elements
trigger as expected in more cases.Prevent the visible element from continuing to trigger if the visibility element method returns
False
.
v0.35.0#
Trigger an
input
orblur
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.
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.
v0.33.0#
Fix: Allow comments, blank lines, or text at the top of component templates before the root element.
v0.32.0#
Add debounce support to actions.
v0.31.0#
Move JavaScript static assets into
unicorn
sub-folderDetermine correct path for installed app passed to
startunicorn
management commandCall
startapp
management command if app is not already installed
v0.30.0#
Look in all
INSTALLED_APPS
for components instead of only in aunicorn
app 210Support
settings.APPS_DIR
which is the default fordjango-cookiecutter
instead of justsettings.BASE_DIR
214
Breaking changes
Require an application name when running the
startunicorn
management command for where the component should be created
v0.29.0#
Sanitize initial JSON to prevent XSS
v0.28.0#
Re-fire poll method when tab/window comes back into focus after losing visibility (https://github.com/adamghill/django-unicorn/pull/202 by frbor)
v0.27.2#
Fix bug with relationship fields on a Django model
v0.27.1#
Fix some issues with many-to-many fields on a Django model
v0.27.0#
Many-to-many fields on a Django model are now supported
Multiple partial targets
v0.26.0#
Completely redesigned and much improved support for Django models and QuerySets.
Fix the
startunicorn
command and add some ascii art.
v0.25.0#
Support calling functions in JavaScript modules.
Fix: use
unicorn:db
without aunicorn:model
in the same element.
v0.24.0#
Support custom CSRF headers set with CSRF_HEADER_NAME setting.
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 usingUnicorn
with libraries likeSelect2
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.
v0.22.0#
Use Django cache for storing component state when available
Add support for Django 2.2.x
v0.21.2#
Add backported
dataclasses
for Python 3.6. (@frbor)
v0.21.0#
Bug fix: Prevent disabled polls from firing at all.
Support
Decimal
field type.Support
dataclass
field type.Use type hints to cast fields to primitive Python types if possible.
v0.20.0#
Add ability to exclude component view properties from JavaScript to reduce the amount of data initially rendered to the page with
javascript_exclude
.Add
complete
,rendered
,parent_rendered
component hooks.Call JavaScript functions from a component view’s method.
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.
v0.18.1#
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 toUNICORN
.
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.
v0.17.1#
Remove stray print statement.
Fix bug where child components would sometimes lose their action events.
v0.17.0#
Target DOM changes from an action to only a portion of the DOM with partial updates.
v0.16.1#
Remove debounce from action methods to reduce any perceived lag.
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.
v0.15.1#
Fix bug where a component name has a dash in its name
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
orunicorn:action
v0.14.1#
Prevent the currently focused model element from updating after the AJAX request finishes (#100).
v0.14.0#
Disable poll with a component field
Dynamically change polling options with PollUpdate
Basic support for
pydantic
models
v0.13.0#
Component key to allow disambiguation of components of the same name
$returnValue
special argumentGet the last action method’s return value
v0.12.0#
Redirect from action method in component
v0.11.2#
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
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.
v0.10.0#
Add support for passing kwargs into the component on the template
Provide access to the current request in the component’s methods
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.
v0.9.3#
Handle child elements triggering an event which should be handled by a parent unicorn element.
v0.9.1#
Fix: certain actions weren’t triggering model values to get set correctly
v0.9.0#
Loading states for improved UX.
$event
special argument foractions
.APPS
setting for determing where to look for components.Add support for parent elements for non-db models.
Fix: Handle if
Meta
doesn’t exist for db models.
v0.8.0#
Add much more elaborate support for dealing with Django models.
v0.7.1#
Fix bug where multiple actions would trigger multiple payloads.
Handle lazy models that are children of an action model better.
v0.7.0#
Parse action method arguments as basic Python objects
Stop and prevent modifiers on actions
Defer modifier on model
Support for multiple actions on the same element
Django setting for whether the JavaScript is minified
Breaking changes
Remove unused
unicorn_styles
template tagUse dash for poll timing instead of dot
v0.6.5#
Attempt to get the CSRF token from the cookie first before looking at the CSRF token.
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.
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.
v0.6.2#
More robust fix for de-duping multiple actions.
Fix bug where conditionally added actions didn’t get an event listener.
v0.6.1#
Fix model sync getting lost when there is an action (issue 39).
Small fix for validations.
v0.6.0#
Realtime validation of a Unicorn model.
Polling for component updates.
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 ofinput
onunicorn:model
.Better support for
textarea
HTML element.
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.
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.
v0.2.3#
Fix for creating default folders when running
startunicorn
.
v0.2.2#
Set default
template_name
if it’s missing in component.
v0.2.1#
Fix
startunicorn
Django management command.
v0.2.0#
Switch from
Component
class toUnicornView
to follow the conventions of class-based views.Investigate using class-based view instead of the custom Component class
v0.1.1#
Fix package readme and repository link.
v0.1.0#
Initial version with basic functionality.