Jump to >

Djblets 0.8 Alpha 2 Release Notes

Release date: January 16, 2014


  • Made more progress toward Python 3 support.


  • Marked all human-readable strings for translation.
  • Switched code to use ugettext_lazy where appropriate.
  • Djblets will now compile and ship localization files as part of the package.


  • Improved the default labels for RegistrationForm.

    RegistrationForm basically had to have a custom template to be usable before, as the default labels were terrible. We now provide sane defaults, allowing it to be rendered with the default templates.

  • Removed many old functions and classes.

    Much of djblets.auth was from the Django pre-1.0 days, and are no longer necessary. This removes:

    • djblets.auth.forms.ChangePasswordForm
    • djblets.auth.views.do_change_password()
    • djblets.auth.views.do_change_profile()
    • djblets.auth.views.login()
    • djblets.auth.util.get_user()
    • djblets.auth.util.internal_login()
    • djblets.auth.util.login_required()


  • Added support for checkbox columns.

    Checkbox columns allow for selecting one or more rows of items in the datagrid. The consumer can then act on those lines to perform batch operations.

    This is based on work by Graeme Coupar.

  • Allow the datagrid header to be anchored while scrolling.

    The datagrid contents can now scroll without scrolling the header. This makes it easier to see and manipulate columns without scrolling back to the top.

    To make it independently scrollable, a height must be assigned to the datagrid element, and datagrid.resizeToFit must be called on resize.


  • Rewrote the Manage Extensions view.

    This is a full rewrite that provides:

    • Fixes for several interaction issues with the page that broke in 0.8 alpha 1.
    • Dynamic updating when enabling or disabling an extension.
    • A button to rescan for extensions.
    • Better visual hints for enabled, disabled, and broken extensions.
    • Helpful error reporting when an extension fails to load, complete with a traceback.
    • Better shipped CSS for the page.
  • Added support for custom context processors.

    Context processors provide new variables for all templates. This allows extensions to provide new ones that will work so long as the extension is enabled.

  • Added support for Django admin widgets in extension configuration pages.

    Extension configuration pages can now make use of the same widgets a Django admin form can use. These include such useful widgets as SplitDateTimeWidget.

  • Added a signal to notify when an extension’s settings are saved.

    The djblets.extensions.signals.settings_saved signal is now emitted whenever an extension’s settings are saved. This allows the extension to act immediately on any new settings.

  • Provided include paths for .less files.

    Djblets will now provide a list of include paths based on all registered Django apps’ static directories. These can be used at runtime or package time to include .less files inside an extension’s .less file, in order to reuse any definitions or macros the app may provide.

  • Provided global variables for .less files.

    .less files will now have access to some built-in global variables. By default, this includes @DEBUG and @STATIC_ROOT. These are available both at runtime and at package time.

    These can be used to provide different styling based on, for instance, whether it’s running in debug mode or not.

    Consumers of Djblets can provide additional global variables as well.

    This requires LessCSS 1.5.1 or higher.

  • Added an optional extension parameter to custom middleware.

    Custom middleware provided by an extension can now take an optional extension parameter, in order to be able to reference configuration or methods on the extension.

  • Added ref-counting to apps.

    Apps provided or required by extensions are now reference-counted. This ensures that if two extensions list the same third-party app, disabling one extension won’t break the other.

  • Fixed breakages during initialization if an extension failed to load.

  • Fixed breakages with the extension list API when extensions failed to load.

  • Fixed evolving models provided by the extension.


  • Restructured much of djblets.util.

    Much of the code in djblets.util has been moved out into new modules. This introduces djblets.cache, djblets.db, djblets.forms and djblets.urls.

    Importing from the old locations will still work, but will log a deprecation warning. They will be removed in a future release.

  • Added support for custom “end” prefixes for @blocktag.

    @blocktag no longer hard-codes “end” as the prefix for the end tag. Consumers can change it to a custom prefix, such as end_, by calling:

  • json_dumps() now serializes lazy-localizable strings.

    Strings using ugettext_lazy() can now be properly serialized using json_dumps, instead of throwing an error.


  • Added accessors for the buttons of an inlineEditor.

  • Removed the fade in/out of the buttons, making the editor feel more snappy.

  • inlineEditor now provides resize events when the field changes size.

  • Fixed clicking on an inlineEditor on an <a/> element.

    When inlineEditor was created on a <a/> element, clicking the element would cause the link to be followed instead of opening the editor.

  • Fixed sizing when using inlineEditor on an element with a custom text-align CSS property.

  • Fixed fading the edit icon in after editing was completed.


  • Removed the default z-indexes for modalBox.

    It is now up to the consumer to decide what the appropriate z-indexes should be.


  • Added new arguments and better heuristics to $.fn.positionToSide.

    positionToSide had trouble matching an element when positioned, say, to either above/below another element, when the left or right would be scrolled off-screen. It now does a better job of deciding the optimal place to position the element so it fits on-screen.

    There are also new options for setting the distance and offset for the element in relation to the other element.

    xDistance and yDistance controls the distance in pixels between the elements.

    xOffset and yOffset control the offsets of the element in the direction not matched to a side, in order to shift the element by a few pixels for alignment.

    fitOnScreen controls whether the element must fit onto the screen.


  • Christian Hammond
  • David Trowbridge
  • Graeme Coupar