1.2.0-beta1 (2014-11-14)

The third release of Neos focuses on adding translation support, improving the editor experience and implementing many new features. Neos is getting closer to being able to solve most project needs without custom code.

A lot of work has been put into this release to deliver a truly great user experience. Check out the online demo site (http://neos.demo.typo3.org/) for trying out the new version.

In total 92 new features, 265 tasks and 232 bugfixes made it into the beta and more non-breaking improvements will come during the finalization phase.

Upgrading from 1.1 can be done easily using the available migrations. If you experience any issues please report them to https://jira.typo3.org/browse/NEOS.

A big thanks goes out to all the contributors that made this happen.

Translation support

Support for creating localized websites with Neos is years in the making. We took all the experience from a decade of TYPO3 CMS customer projects into account and came up with a universal concept: Content Dimensions. This feature, which is deeply rooted in Neos’ content repository, allows for creating and combining an arbitrary number of variants of a piece of content. In Neos 1.2 we use Content Dimensions for realizing translations. Once the site integrator has defined which languages should be available, an editor can translate content by simply navigating to the part of the website he’d like to translate, switch to another language and type away.

All aspects of a node – which is the technical term for any kind of content - can be translated. A new implementation of the routing component for Neos even allows for translation and customization of the URL of a particular document.

For a first impression you might want to watch a talk about multi language websites with Neos 1.2 from this year’s T3CON: http://rlmk.me/neosmulti1-2

Information about the general UI approach to localization and full use of content dimensions, some of the planned concepts are explained at http://rasmusskjoldan.com/post/82289319462/localization-is-not-about-localization

Many more features regarding content translation and content dimensions in general are on our roadmap.

See the chapter Content Dimensions for details.


In a typical project, you will create lots of custom node types. However, many node types should only be used in a specific context and not everywhere. Using node type constraints, it is now possible to restrict the allowed child node types inside a given node type. Additionally for being able to specify direct child node constraints, it is also possible to specify grandchild constraints for auto-created node types.

See the chapter Node Type Constraints for details.

Node type constraints are supported in the following places in Neos:

  • “Create New” panel in content element handles
  • “Create New” panel in the navigate component (document and structure tree)
  • moving in Navigate component
  • changing node type in the inspector

Additional editor experience improvements

  • Link editor for nodes, assets and external links

    A link editor for the inspector that can handle internal and external links

  • Add ability to Shortcut to an external target

    Allows for linking to an external URL for shortcut pages

  • Crop aspect ratio lock presets (image editor)

    Allow locking or predefining aspect ratios for the image cropping

  • Tabs for property groups in the inspector

    Allow grouping properties and property groups across different tabs

  • Update Aloha editor

    Update to a stable version of the editor with various bugfixes and some new features

  • Improve exception handling during rendering

    Make broken pages less broken

  • Mark unpublished nodes in context structure tree

    Unpublished nodes are now highlighted in the context structure tree

  • Manual node selection in Menu element

    The menu content element now supports selecting specify menu items to show

  • Add new content element for inserting records

    New content element to insert other content elements

  • Improve usability of publishing button

    The publish button now has a active state during publishing, is disabled during saving and has become more responsive

  • Allow advanced default values for properties of type date

    Allows setting the current date and more advanced default values for date editors

  • Add icons to reference(s) inspector editor results

    The reference editor in the inspector now shows icons for the nodes

  • Allow closing dialogs with esc key

    All the different dialogs now support closing by hitting the escape key

  • Warn the user about an expired / lost session

    A login dialog appears when a session has expired allowing the editor to login again and resume work

  • Warn editors when navigating away during saving/publishing

    Warns the editor when navigating away or closing the page during saving/publishing to avoid loss of changes

  • Improve stability of content saving

    The saving of content has greatly been improved, preventing issues with content not being saved

  • Improve 404 handling in Neos backend

    When deleting the current page it would end in a 404, instead the closest parent page is found

  • Login screen removes username on failed login

    The username is kept on failed logins

  • Use correct icons for node results in Aloha link field

    Previously all results in the aloha link field had the same icon, now they have the one matching their node type

  • Use placeholder instead of default value in inline link editor

    Adds a placeholder, removes the “http://” and makes it clear that the field allows for searching

  • Improve usability of new/paste buttons in navigate component

    Adds indication that the new & paste buttons allows for altering insert/paste position

  • Sorting of node types in insert new panels

    Allows for sorting the node types in the new panels (navigate/content)

Inspector features

  • Dynamically loaded options for the inspectors SelectBoxEditor

    Support for loading option values dynamically from the server

  • Multiple selection & grouping in inspector SelectBoxEditor

    Support for selecting multiple options and grouping options

  • Time support for the inspector date editor

    Allows date selectors with time selection

  • Textarea inspector editor

    An editor used for multiple lines of text in the inspector (meta description e.g.)

  • Make button label and highlighting mode configurable

    Allows for more than the HTML format for the code editor in the inspector

  • Switch to PHP date format for inspector

    The default date format for the date editor is now the PHP date format for easier usage

  • Make NodeTree baseNodeType configurable

    It’s possible to filter the node tree in a custom way to exclude unwanted document nodes

Inline editing features

  • Placeholder support for inline editable properties

    Allows for having empty inline editable properties

  • add <code> tag to Aloha Editor (disabled by default)

    Enables the use of wrapping text in a <code> tag

TypoScript features

  • TypoScript prototype to handle HTTP headers and response status

    Allows adding custom headers from TypoScript to the response (e.g. application/xml)

  • Implement TypoScript inclusion globbing

    Include multiple TypoScript files with one include line

  • @if meta property for conditional evaluation of paths

    Use conditions to disable TypoScript keys

  • NodeUri TypoScript object for linking to nodes

    A TypoScript object for making linking to nodes easier (link view helper equivalent)

  • ImageTag and ImageUri TypoScript objects

    TypoScript objects for creating images directly in TypoScript (image view helper equivalents)

  • Has FlowQuery operation

    Like the jQuery has function for filtering nodes containing specific children

  • Implement BreadcrumbMenu to replace Breadcrumb

    Breadcrumb menu streamlined with the normal menu implementation (old one deprecated)

  • Menu item attributes should have access to item in context

    The menu implementation now has access to the current item when evaluating the attributes

Backend interaction features

  • External event for node creation / removal

    Allows for updating the dom when content is created/removed in the backend

  • Expose public JavaScript API for reloading the page

    Allows for externally reloading the current page in the backend

  • External events when panels open/close and layout changes

    Events that integrators can use to update the dom when the backend panels change

Fluid features

  • Use node label for link.node view helper

    Makes it easier to link to nodes with a relative path by making the linked node accessible

  • uri.module view helper

    Equivalent of the link.module view helper

  • Allow linking to site node in NodeLinkingService

    Allows for linking to the site node with the relative path ~ in the node link view helper

Additional features

  • Dimension/Language Menu

    A new menu for linking to other dimensions (e.g. between languages) – see demo site for an example

  • Configuration module

    A new backend module to display configuration (Settings, NodeTypes, Policies, Routes, Caches, Objects, Views)

  • Introduce mixins to avoid illogical inheritance

    Multiple mixins has been added which can be reused in custom elements (TYPO3.Neos.NodeTypes:TextMixin, TYPO3.Neos.NodeTypes:ImageMixin, etc.)

  • REST services

    New REST controllers were introduced to handle various backend requests (outputs both html/json)

  • Data sources

    A new way of providing content to the backend via AJAX easily.

  • Allow simple search/replace in ChangePropertyValue transformation

    Allow node migrations to search and replace in text properties

  • Commands to activate/deactivate domains

    ./flow domain:activate & domain:deactivate

  • Handle properties of type array

    Node type properties can now be arrays (used for multiple selection in the SelectBoxEditor)

!!! Breaking changes

  • Move FlowQueryOperations concerning nodes to TYPO3CR

    Breaking if you extended existing FlowQueryOperations concerning nodes

  • Fix linking behavior

    Links to shortcut nodes now point to the end target instead of intermediary URLs

  • HTML editor: Make button label and highlighting mode configurable

    This is breaking if you used the HtmlEditor in your node types. To adjust, you need to replace HtmlEditor with CodeEditor, either manually or with ./flow core:migrate –package-key <your package>

  • Use node label for link.node view helper

    This is breaking since it changes the behavior of empty links, so if you relied on that you need to use the f:link.uri view helper inside the href attribute of a normal a tag.

  • Update Aloha editor

    b and i tags are now replaced with strong and em (old ones can still be configured).

    Now automatically adds paragraph around non formatted blocks.

    Target _blank is now added automatically to external links.

  • Harmonize TypoScript paths

    The old path Private/TypoScripts(/Library)/Root.ts2 is deprecated in favor of /Private/TypoScript/Root.ts2

  • Add ability to Shortcut to an external target

    To adjust your existing Shortcut nodes, run the following node migration: ./flow node:migrate 20140930125621

  • Switch to PHP date format for inspector date editor

    To adjust the code use the new format, it should be enough to run this on your site package(s): ./flow flow:core:migrate –package-key <sitepackagekey>

  • Deprecate unused IncludeJavaScriptViewHelper

  • Menu state should not be calculated based on a shortcut

    This is only breaking compared to the 1.1 branch not to 1.0. If you need a link to the site root page with correct active state you shouldn’t create a shortcut pointing to it but rather include the real site root in the menu, by using the itemCollection property of the Menu TypoScript object.

  • Hide document layout properties by default

    If you rely on these properties, adjust your node type configuration by setting the group on the two layout properties.

  • Change default inline editing options

    Disables the underline tag as well as sub- and super script tags by default. They can be enabled again with configuration.

  • Use strong and em instead of b and i as default

    Breaking if relying on non-native browser styling of b and i tags.

  • Mark NodeInterface::getFullLabel deprecated

    The getFullLabel method is now deprecated. The getLabel method returns the full label instead.

  • New node label management

    The code migration 20140911160326 takes care of changing existing implementations of the old NodeLabelGeneratorInterface to the deprecated NodeDataLabelGeneratorInterface and to change the NodeTypes configuration to the new format.

  • Node Migrations work on NodeData

    This is considered breaking if you added your own Transformations or Filters for Node Migrations or rely on them to only apply to a specific workspace.

  • Change handling of empty, false and null attribute values

    This will be breaking if code relied on the previous conversion of values or the output is used for XML, where the new meta property @allowEmpty should be used to disable empty attributes.

Further details can be found in the commit messages of the changes

Known issues

  • Kickstarting a new site is not working if the demo site package is active

    Deactivate the demo site package with ./flow package:deactivate TYPO3.NeosDemoTypo3Org before you kickstart a new site

Overview of changes

Base Distribution

[TASK] Composer manifest: Switch to Flow 2.3 beta

[TASK] Composer manifest: drop dev stability and use Flow 2.3 branch

Related: NEOS-259

[TASK] Update composer manifest

See https://ci.neos.typo3.org/job/typo3-neos-branch/4/

[TASK] Update release scripts to include Media with Neos

This makes sure TYPO3.Media is released together with Neos.

[TASK] Add PHP_CodeSniffer to composer dev requirements

This change enables the possibility to run codesniffs with the following command:

bin/phpcs –standard=TYPO3Flow –extensions=php <path to sniff>

[TASK] Remove unneeded selenium testing configuration

This removes the Tests folder and build.xml from the Neos Base Distribution.

Resolves: NEOS-300

[TASK] Upgrade PHPUnit to 4.0.*


[TASK] Update references in documentation

See https://ci.neos.typo3.org/job/TYPO3%20Neos%20Release/20/

[TASK] Document custom validator/editor use for node properties

Documents the use of custom (JS) validators and editors for the inspector implemented with https://review.typo3.org/26005.

Resolves: NEOS-223

[TASK] Make preset name & preset configuration available in dimension menu

Related: NEOS-299

[FEATURE] Dimension/Language Menu

Create links to other node variants (e.g. variants of the current node in another dimension) by using this TypoScript object.

Minimal Example, outputting a language menu with all configured dimensions:

languageMenu = TYPO3.Neos:DimensionMenu {
        dimension = 'language'

If you only want to render a subset of the available dimensions or manually define a specific order for this language menu, you can override the “presets”:

Overridden presets:

languageMenu = TYPO3.Neos:DimensionMenu {
        dimension = 'language'
        presets = ${['en_US', 'de_DE']}

No matter how many languages are defined, only these two are displayed.

Resolves: NEOS-118

(cherry picked from commit 475a82e1c298c23e33d32f42a196b91a9f4adbd1)

[TASK] Add documentation about content dimensions and translating content

Resolves: NEOS-299

(cherry picked from commit b2fba7b2df308a99627ea05791177c568a0555c3)

[!!!][TASK] Move FlowQueryOperations concerning nodes to TYPO3CR

All FlowQuery operations concerning nodes have no dependencies on the TYPO3.Neos package, but only on the TYPO3.TYPO3CR package. The rightfully belong there and probably ended up in the Neos package before the TYPO3.Eel package became part of the Flow base distribution. Now that Eel is available all the time the operations can as well reside in TYPO3CR which allows to use them without installing the Neos package at all.

This change is breaking if you extended the FlowQueryOperations that are now moved. You need to extend from the same class in TYPO3CR now.

The needed namespace replacement is from:




Resolves: NEOS-405

[BUGFIX] Adjust code migration identifier pattern to contain the full timestamp

Previously code migrations are expected to have a class name with the pattern Version<YYYYMMDDhhmm> and the unique identifier was determined extracting the last 12 characters of the class name (which are expected to be the timestamp).

This change adjusts existing code migrations to use the full timestamp in order to establish the new guideline (note: those migrations still return the old identifier so that they won’t be applied again with a new identifier).

Related: FLOW-110

[TASK] Remove unused method in NodeView

[FEATURE] Dynamically loaded options for the inspectors SelectBoxEditor

Introduces a concept of data sources to allow easy integration of data source end points, to provide data to the editing interface without having to define routes, policies, controller.


          editor: 'Content/Inspector/Editors/SelectBoxEditor'
            dataSourceIdentifier: 'questions'
            # alternatively using a custom uri:
            dataSourceUri: 'custom-route/end-point'

Accompanied by a class that implements TYPO3\\Neos\\Service\\DataSource\\DataSourceInterface, preferably by extending TYPO3\\Neos\\Service\\DataSource\\AbstractDataSource.

Resolves: NEOS-529

[TASK] Improve exception handling during rendering

Improves the exception handling by changing the way exceptions are thrown for content and by rendering a fallback page if the whole page couldn’t be rendered.

The exception handling for content elements is changed so that it now only outputs a XML comment in the frontend in production context. When logged in a short message, without technical detail is displayed in production context. In development the output is the same as before, consisting of a exception message and a TypoScript path.

The exception handling for the whole page is improved so instead of just always displaying a message when broken, it renders an error page with a styled message. In development context a technical message is displayed, while it’s only outputted as a XML comment in production context. This makes it possible to navigate the backend, even though the current page is broken.

Resolves: NEOS-344

[!!!][BUGFIX] Fix linking behavior

This adjusts Neos’ way of dealing with links to shortcut nodes in several areas. Links to shortcut pages are now properly resolved: The label of the link will be taken from the shortcut page node but the link points directly to the target node or external URI.

This is a breaking change if you relied on the previous behavior. That is especially noticeable if the root node of a site is a shortcut. In that case a link pointing to the “homepage” will now directly point to the target of the root node instead of pointing to “/” and redirecting to the target on click.

Related: NEOS-564

[BUGFIX] Content dimensions fetched in modules

When opening a module the content dimension selector fetches the available dimensions, even though the content dimension selector won’t be displayed.

Related: NEOS-546

[TASK] Add QUnit for running JavaScript tests

This adds a new grunt task for running the JS tests. In the Neos package, do:

cd Scripts
grunt test

PhantomJS is installed automatically as a dependency via npm for this, see Scripts/install-phantomjs.sh for some dependencies you might need on top.

Resolves: NEOS-663

[TASK] Use grunt for building css and js

To have consistent results the processes for compiling scss and js files into those files loaded by the browser, we now use grunt to have a defined process. This also means we need to define exactly which version of the tools is used.

Therefore we install compass locally into the project instead of using a version installed into the system. To install compass the ruby package manager bundler is used.

For new developers it might be hard to figure out what needs to be installed. This therefore also adds a script which gives hints how to install necessary tools like node, npm and bundler. It then uses these tools to install grunt, compass, etc.


To prevent confusion with the old r.js -o build.js command the build.js is moved to the Scripts folder. Compiling all javascript and css can now be done by ‘grunt build’:

cd Scripts
grunt build

Related: NEOS-439

[BUGFIX] Fix duplicate error codes in PasswordValidator and HostnameValidator

This change assigns a new error code to the “invalid hostname” error in the HostnameValidator (the PasswordValidator is older and thus “wins”).

This is needed to allow correct detection, display and error message translation of that error.

The XLIFF files are adjusted as well and the (wrong) translations are reset to the original (english) string.

[TASK] Update the Page prototype to use the new TS prototype Http.Message

This adds a way to change the HTTP status code and headers in TypoScript:

prototype(YourPackage:Page) < prototype(TYPO3.TypoScript:Http.Message) {
        httpResponseHead {
                headers {
                        Content-Type = 'application/xml'
    content = TYPO3.TypoScript:Template {

Related: NEOS-449

[!!!][FEATURE] Make button label and highlighting mode configurable

The HTML editor uses code mirror and could thus be used to edit other types of textual content as well. To allow this two new editorOptions are introduced:

  • buttonLabel overwrites the text on the button to open the editor
  • highlightingMode overwrites the default (text/html) highlighting

This is breaking if you used the HtmlEditor in your node types. To adjust, you need to replace HtmlEditor with CodeEditor, either manually or with:

./flow core:migrate --package-key <your package>

Resolves: NEOS-379

[BUGFIX] Make legacy site import tests independent from demo site

Adjusts the LegacySiteImportServiceTest fixture so that the functional tests don’t fail if the TYPO3.NeosDemoTypo3Org package is not installed.

[TASK] Fix content cache clearing in Behat scenarios

The glob pattern could not match any directory, so the content cache produced wrong results for the scenarios.

Additionally a leaking detached Workspace instance is prevented by clearing all node instances before importing the site.

[BUGFIX] Incorrect handling of integer values in SelectBoxEditor

If a option value is can be interpreted as a finite number it is treated as an integer, regardless of it being a string value. This results in wrong behavior where the editor is marked as modified, without it actually being so.

Related: NEOS-419

[BUGFIX] Skip null values in inspector SelectBoxEditor

Values without configuration should be treated as unset values and not included as selectable options.

Related: NEOS-419

[FEATURE] Routing: content dimension / translation support

This change introduces translatable URI segments and general support for content dimensions in the frontend node route part handler. Editors may change the path segment of a specific document node (for example a page) in the inspector.

The route part handler which renders and matches the URIs does not use a node’s name anymore but refers to a new node property “uriPathSegment”. This finally decouples URI generation from the internal node structure and naming.

This change also makes sure that router caches are flushed if any node is updated, removed, published or discarded. That is refined in a separate change.

In order to migrate existing websites, you must run the “node:repair” command in order to fill the new uriPathSegment properties.

If you used the “LocalizedRoutePartHandler” from a development version of Neos, you need to remove the respective Objects.yaml configuration.

Resolves: NEOS-296

[TASK] Add icons to reference(s) inspector editor results

Resolves: NEOS-409

[TASK] Improve usability of publishing button

  • Change publish button state during publishing (add ellipsis)
  • Change dropdown button during publish all/discard actions (ellipsis instead of arrow)
  • Ensure buttons cannot be clicked during publishing/discarding
  • Disable buttons during saving of content changes/having pending content saves
  • Change publish button color to orange when save changes are pending
  • Ensure publish all count is updated after publishing/discarding
  • Display error messages if publish/discard failed
  • Only discard changes if actually nodes to be discarded are available

Related: NEOS-348

[FEATURE] Crop aspect ratio lock presets (image editor)

Introduces aspect ratio lock presets for the cropping in the inspector image editor. Multiple presets can be configured, additionally it’s optional to allow custom ratios and to enable the original ratio as an option.

Additionally a locked aspect ratio can be configured to ensure a specific aspect ratio of all images in that image property.

Example configuration:

          width: 1
          height: 1
          label: 'Square'
          width: 4
          height: 5
      enableOriginal: TRUE
      allowCustom: TRUE
        width: 0
        height: 0

Example of disabling available options:

# Disable ``square`` option
                  square: ~

Resolves: NEOS-557

[TASK] Document change in layout properties

(cherry picked from commit bd88d62e6942247744feba3da3977704a5870085)

[FEATURE] External events when panels open/close and layout changes

This change adds several new events that will be triggered a panel is opened or closed, causing the viewport of the content area to be resized.

  • Neos.LayoutChanged When the content window layout changes (when panels

    that alter the body margin are opened/closed).

  • Neos.NavigatePanelOpened When the navigate panel is opened.

  • Neos.NavigatePanelClosed When the inspector panel is closed.

  • Neos.InspectorPanelOpened When the navigate panel is opened.

  • Neos.InspectorPanelClosed When the inspector panel is closed.

  • Neos.EditPreviewPanelOpened When the edit/preview panel is opened.

  • Neos.EditPreviewPanelClosed When the edit/preview panel is closed.

  • Neos.MenuPanelOpened When the menu panel is opened.

  • Neos.MenuPanelClosed When the menu panel is closed.

Resolves: NEOS-408

[FEATURE] Extensible node search service

Add an interface for the node search service allowing it to be extended with a better search algorithm.

Resolves: NEOS-535

[TASK] Refactor usage of data attributes for node data

The usage and naming of data attributes for the node data is very inconsistent and there’s no clear rules.

  • Renames node attributes from data-neos-* to data-node-*. Direct properties of the node are prefixed with _ and internal non properties are prefixed with __.
  • Replaces all usage of .attr(‘data with .data(‘
  • Renames some of the attributes to match their actual content
  • Replaces usages of reserved word “arguments”
  • Adds missing dependency in PluginViewEditor

Resolves: NEOS-356

[TASK] Document TS include syntax in Integrator Guide

This adds a section on TypoScript include to the Integrator Guide chapter “Inside TypoScript”.

Related: NEOS-440

[BUGFIX] Deleting text in inline editable properties is slow

When deleting text in an inline editable property it is very slow. The problem was caused by inserting some elements that weren’t even used. The slowness was possibly caused by the elements being duplicated multiple times.

Fixes: NEOS-585 (cherry picked from commit a1bdb096475502ecaa39349698492895df6dca32)

[TASK] Adapt after the NodeInterface::getFullLabel removal

This change adapt the Neos navigate component to crop node label on the client site with CSS.

We also remove technical informations from the structure tree to have a more clean interface. The icon for Content Collection is now a folder.

Related: NEOS-441

(cherry picked from commit 4382d4d49179e073b1205456b03310f74006f185)

[TASK] Update composer manifest

See https://ci.neos.typo3.org/job/typo3-neos-branch/4/

[FEATURE] Make authentication provider an argument for user:* commands

This change allows using the CLI commands for user management for other authentication providers than the Typo3BackendProvider.

Resolves: NEOS-592

[BUGFIX] Class attribute for content elements breaks with arrays

Using a RawArray for the class attribute on content elements, an error is thrown for not being able to convert array to string. This happens because the node type processor tries to append to the value, which doesn’t work in case it’s an array.

Fixes: NEOS-315 Fixes: NEOS-513

[TASK] Login screen removes username on failed login

When a login failed on the login screen both the username and password fields are emptied, which is not very user friendly.

Improve it by keeping the username.

Resolves: NEOS-537

[BUGFIX] Editor options not merged recursively

When the editor options from different configuration sources is merged, it only merged on the first level. Now the merging is recursiv, which is needed for certain inspector property editors.

[BUGFIX] Node labels should not include tags

This fixes a regression introduced with I351b08ed576407222d32efbf35ed97668034b76a because the generated labels with the EEL expression still contained HTML tags which the original NodeLabelGenerator removed. This fixes it by applying String.stripTags to the label.

[BUGFIX] Hostname validator produces false negatives

The regex used in the hostname validator produced false negatives. The commit changes the regex and adds a unit test with commom test cases.

Fixes: NEOS-475

[TASK] Code cleanup in SelectBoxEditor

Related: NEOS-419

[FEATURE] Multiple selection & grouping in inspector SelectBoxEditor

Adds support for selection of multiple values in the SelectBoxEditor. Additionally support for grouping and icons is added. This change replaces the usage of Chosen with Select2.


    multiple: TRUE
    allowEmpty: TRUE
    placeholder: 'Choose'
        label: 'A'
        group: 'x'
        icon: 'icon-legal'
        label: 'B'
        group: 'x'
        icon: 'icon-fire'
  • Deselection for single
  • Placeholder for multi & deselectable single
  • Grouping for single & multi
  • Adds support for icons
  • Adds search icon
  • Adds no results text
  • Adds title for concatinated values
  • Fixes various issues with layout, scrolling & closing
  • Supports modified state
  • Supports revert of initial value (discard)
Affects additional editors:
  • ReferenceEditor
  • ReferencesEditor
  • LinkEditor
  • NodeTypeEditor
  • PluginViewEditor
  • MasterPluginEditor

Resolves: NEOS-419 Resolves: NEOS-421 Related: NEOS-420

[TASK] Adjust to newly available TypoScript conditions

Replace the TypoScript processors that removed the content in the live workspace with conditions. This is a lot quicker since the content is not generated in the live workspace.

Additionally it cleans up the usage of security and workspace checks.

Related: NEOS-109

[!!!][TASK] Update Aloha editor

Updates the Aloha editor to the latest stable version 1.1.3

Fixes several Aloha editing issues including the format changing not always triggering a visual change.

Implements the autoparagraph plugin to always wrap text in paragraph tags.

Target _blank is now added automatically to external links.

Replaces b and u tags with strong and em by default (old ones are still configurable).

Enables usage of del tag (strikethrough).

Update includes options for selecting different list stylings.

Resolves a naming conflict issue between jQueryUI and Twitter Bootstrap.

Updates jQueryUI to 1.10.4 from 1.10.3

Removes many unused parts of Aloha and jQueryUI from the build.

Fixes: NEOS-341

[TASK] Allow closing dialogs with esc key

Resolves: NEOS-217

[TASK] Missing compiled css for chosen-sprite@2x.png 404

I8adec20848fbec84eb00ac397825a46396b834f0 was missing some compiled css to work in all places.

Related: NEOS-149

[BUGFIX] Fix 404 on loading the chosen-sprite@2x.png background image

Fixes: NEOS-149

[BUGFIX] Use the original image in the image inspector editor

Fixes: NEOS-416

[BUGFIX] Table options not visible for inline editable properties

The Aloha table options are not displayed in the inspector when selecting a table inside an inline editable property.

Fixes: NEOS-586

[BUGFIX] Prevent error when selecting inline table elements

A regression was introduced with the node type constraints, causing an error when selecting a table in an inline editable property.

[TASK] Prevent warning when compiling CSS with compass 1.0

[TASK] Compile CSS using compass 1.0

[BUGFIX] Re-adds the old dummy-image.png to prevent breaking

Fixes: NEOS-584

[FEATURE] Tabs for property groups in the inspector

Enables defining tabs to organize the property editor groups in the inspector. Selects the last selected tab group if available when selecting different element. If no tabs are found, nothing is shown. Tabs can be positioned like groups.


          label: 'Statistics'
          icon: 'icon-bar-chart'
          label: 'Analytics'
          tab: stats

Resolves: NEOS-580

[TASK] Refactor site:* services to use TYPO3CR services

This changes the implementation of the site:export and site:import service to use the new TYPO3CR node export / import domain services instead. Only the “site” specific part remains in Neos.

If the “legacy” (1.0 and 1.1) Sites.xml format is detected, the old parser is used (which has been renamed to LegacySiteImportService).

Resolves: NEOS-166

[BUGFIX] Assign account only if securityContext can be initialized

With the change I10fab119aeab6f6e2e86a217ba71c6f2b5c1efe0 rendering TS in a CLI context from Neos became impossible (again). This change makes sure the account is only assigned if the security context can be initialized.

Related: NEOS-183

[TASK] Redirect if navigating to the login page while logged in

Redirect to the backend if the user navigates to the login page while logged in.

Resolves: NEOS-553

[BUGFIX] Content dimension selector and format bar clashes

Additionally fixes some overflow issues.

Related: NEOS-361

[BUGFIX] Node type editor fails for document nodes without parents

Related: NEOS-34

[BUGFIX] Error action not allowed for service controllers

Fixes: NEOS-410

[BUGFIX] Failed Ajax requests leads to JS error

Related: NEOS-183

[BUGFIX] Deselecting image elements leads to an error

When deselecting an element containing an image property, the request for the image is aborted if it’s still in progress.

However the abort method was removed in I10fab119aeab6f6e2e86a217ba71c6f2b5c1efe0 as part of a cleanup.

This change reintroduces the abort method, preventing the error from happening.

Fixes: NEOS-555

[BUGFIX] MenuImplementation breaks with external shortcut targets

The introduction of external targets for shortcuts broke the MenuImplementation, as that did not know how to deal with strings being returned as resolved shortcuts.

Fixes: NEOS-547

[BUGFIX] Test failure in TypoScriptViewTest

The change I10fab119aeab6f6e2e86a217ba71c6f2b5c1efe0 did not adjust one unit test as needed, leading to failure.

Related: NEOS-183

[TASK] Warn the user about an expired / lost session

When a session has expired or been lost, a popup appears if a Ajax request throws a 401 status code. The blocked request is then deferred until a successful login has been made.

Resolves: NEOS-183

[BUGFIX] Default value not used in structure tree

When you create a node from the content structure tree it loses the title. The default title of the node should be always the title for the structure tree. Before the node is rendered in the structure tree there should be shown “Loading”.

Fixes: NEOS-82

[BUGFIX] Breadcrumb in Inspector has one element too much

Fixes: NEOS-123

[!!!][TASK] Harmonize TypoScript paths

All TypoScript is now in: Resources/Private/TypoScript/

The TypoScript autoInclude will now try to include a file Resources/Private/TypoScript/Root.ts2 along with the old path which is marked as deprecated and will not be supported startingwith 2.0.

In site packages the Root.ts2 file should be at the same path.

The included code migration will take care of moving files to the right places, but you might still need to adjust include statements in your ts2 files that point to older paths.

Resolves: NEOS-390

[TASK] Adjust unit test to changed CLI output handling

Related to the changes in https://review.typo3.org/33112.

[TASK] Update exception message to mention the new node:repair command

Related: NEOS-296

[BUGFIX] FlowQuery find operation on multiple nodes

Now the find operation finds descendants for all given nodes in the context. This could lead to more results than before if the FlowQuery context contains more than one node.

Fixes: NEOS-430

[BUGFIX] NumberRangeValidator shows incorrect message

Fixes the issue where the NumberRangeValidator evaluated every number as invalid. Fixes the issue where wrong feedback was given depending on the input type. Removes the check for the empty value as it wasn’t working and that is actually a different validation.

Resolves: NEOS-477

[BUGFIX] Publishing the page after moving a content element broken

After moving a content element on a page and publishing using the “Publish” button, a “Conflict” error is thrown. This is due to the shadow node being rendered and being included as a unpublished node, but when trying to publish it cannot find it since it’s removed.

Related: NEOS-389

[BUGFIX] Timezone for date properties overwritten in backend

When logged in date properties for nodes get their timezone overwritten, because it’s set in the content element wrapping service directly instead of on a clone.

Related: NEOS-203

[BUGFIX] Not inline editable overlay exclude padding

The overlay added to content elements without inline editable properties, doesn’t fill out all the space within the outline. This makes it possible to click it, which shouldn’t be possible.

Resolves: NEOS-436

[TASK] Warn editors when navigating away during saving/publishing

Adds listeners to the “beforeunload” event for showing an alert in case content changes are still pending or an active AJAX request is in progress.

A request manager is introduced to keep track of active AJAX requests.

Resolves: NEOS-347

[TASK] Improve stability of content saving

  • Improves the responseness of the saving indicator
  • Changes the behavior of saving changes, instead of checking and saving every 5 seconds, it now checks every 100 ms, debounce the save by 500 ms so changes made in a short timespan delays the save. Last the actual persist to the server is throttled to 2500 ms to prevent bottle necks on the server side.
  • Ensures pending changes are saved before loading a new page
  • Listens directly to create.js’s changes, to change the state as soon as a save is pending and not just when saving to the server
  • Moves the saving indicator to the publishing button

Resolves: NEOS-179

[TASK] Improve 404 handling in Neos backend

Currently if the editor discards a page that doesn’t exist in the live workspace, Neos returns a server error.

This patch solves the problem by returning a proper 404 error and handle this error in the HttpClient. Neos will try to go up in the tree until it find a valid document to display.

This patch also introduces a new aspect to add the current node identifier as a cache tag. This allows more flexible cache invalidation in Neos.

Resolves: NEOS-138

[FEATURE] Expose public JavaScript API for reloading the page

This change exports a function of the Neos backend to reload the current page. It can be called using the global Typo3Neos namespace:


This API can be extended in the future to expose more functions as needed.

Resolves: NEOS-394

[!!!][FEATURE] Add ability to Shortcut to an external target

In the previous commit the Shortcut document type gained the ability to link to an external target.

To adjust your existing Shortcut nodes, run the following node migration:

./flow node:migrate 20140930125621

Related: NEOS-375

[BUGFIX] NodeViewHelper test using testing view helper

Related: NEOS-302

[FEATURE] Add ability to Shortcut to an external target

The Shortcut document type gains the ability to link to an external target with this change.

Resolves: NEOS-375

[BUGFIX] Fix wrong key in node migration for languages dimension

The newDimensionName had a typo in the migration YAML file.

[TASK] Move node:// and asset:// conversion code to LinkingService

To be able to use code for conversion of asset:// and node:// links elsewhere this change moves it from ConvertUrisImplementation to the LinkingService.

[FEATURE] add <code> tag to Aloha Editor (disabled by default)

In order to enable the <code> tag, the following NodeTypes.yaml is needed:

            code: TRUE

For testing this, make sure to compile the SASS, else the button will not be visible at all.

Resolves: NEOS-364

[BUGFIX] Adjust to new nodes & assets REST services

This change adjusts the LinkEditor and the Aloha link plugin to use the nodes & assets REST services.

Related: NEOS-199 Related: NEOS-231

[FEATURE] Basic RESTful Assets service

This change refactors and introduces more functionality for a RESTful service providing access to assets in Neos. The preferred output format is HTML, but JSON is also supported (triggered via Accept header).

The existing AssetController was renamed to AssetsController and references to it were corrected accordingly.

The change also fixes the JSON output for the Nodes service.

Resolves: NEOS-200 Related: NEOS-199

[BUGFIX] Fatal error when using content element view helper with root page

Related: NEOS-34

[TASK] Add option force conversion in ConvertUris processor

In certain cases (e.g. links that are not inline editable) the link conversion should happen in workspaces other than live. This can now be enforced using the forceConversion flag on the processor.

Related: NEOS-375

[TASK] Rename NodeLinkingService to LinkingService

This is in preparation of moving some functionality to the service that is not only related to nodes (assets to begin with).

Related: NEOS-375

[TASK] Hover state for date time editor remove button

Related: NEOS-14

[BUGFIX] Reference editor keeps searching if no results are found

Fixes: NEOS-352

[TASK] Replaces the dummy image used in the image inspector editor

This is just a small and quick change to make the image look nicer. We now use an SVG instead of a PNG.

[TASK] Adjust documentation to node type constraint inheritance

Related: NEOS-239

[TASK] Code cleanup in NodeTypes.yaml

[TASK] Document TypoScript conditions

Related: NEOS-109

[FEATURE] External event for node creation / removal

This change adds two new events Neos.NodeCreated and Neos.NodeRemoved that will be triggered when a node was created/removed on the page.

Resolves: NEOS-393

[BUGFIX] Incorrect documentation for external JavaScript events

Fixes: NEOS-406

[TASK] Adapt to new node label management

Node labels can now be defined with EEL. This change sets an expression to the TYPO3.Neos:Node that does the same as the former DefaultNodeLabelGenerator for full backwards compatibility. For information on how to change the expression or use a NodeLabelGenerator see the related change in TYPO3.TYPO3CR.

Related: I1d5e3c79f43fa658f4fc28999cc2bde729cf9781 Resolves: NEOS-257

[BUGFIX] Inline editable properties outline doubled

A regression was introduced in I455ad1b431882930e2f422095ccab73b807215b8, causing a double outline for inline properties inside content elements that weren’t active.

[BUGFIX] NodeController deals with unneeded context information

The NodeController set context properties depending on the backend access of the current user. This is unnecessary as the NodeConverter already takes care of that. Only thing the NodeController needs to take care for is to redirect to login if the requested Node is not in live workspace and the user has no access to the backend.

Resolves: NEOS-246

[FEATURE] Allow asset import during site:import

The site:export would export Assets just fine, but during site:import an error would be thrown.

This changes adds AssetInterface import capability to the SiteImportService so an exported site can be imported again.

[TASK] Allow linking to site node in NodeLinkingService

The TypoScript object and view helpers will now accept the string value “~” for the node argument to resolve the current site node.

Resolves: NEOS-279

[BUGFIX] Menu item attributes should have access to item in context

This change updates the Fluid templates for menu rendering to pass the item variable to the attributes rendering.

Resolves: NEOS-276

[TASK] Use more specific entry tag for cached ContentCollection

Change Ida9227b1d0731ab48ad7dd6c446b6a771f76ff67 introduced a new cache tag to publish new ContentCollection when creating new documents. The additional tag can be restricted to just the ContentCollection node for less flushing on changes to descendant nodes of the parent document.

Related: NEOS-339

[BUGFIX] Exception for missing site package in sites module

An exception is thrown if a site’s package cannot be found when displaying details of a site. Instead a flash message error is shown.

Fixes: NEOS-380

[FEATURE] NodeUri TypoScript object for linking to nodes

Introduces a new TypoScript object for making linking to nodes easier.

The commit also extracts the node linking view helper logic into a new NodeLinkingService that the two node linking view helpers can use as well as a new NodeUri TypoScript object.

Resolves: NEOS-302

[BUGFIX] Better error checking for missing content collection nodes

This change introduces a backward compatible helper that will search for a content collection node on the current or parent node. If none is found a speaking error message is generated in an exception that should help to solve the error.

Fixes: NEOS-150

[BUGFIX] Focus lost for inline editing after deletion on every save

After a content element has been deleted the “contentChanged” event is triggered for every “contentSaved” event afterwards. Instead it should only happen once. Regression introduced in I7104d0ceab260c8e679e67cdc716ca33e2880836.

The focus is only lost if the structure tree is open.

Fixes: NEOS-368

[BUGFIX] Backend not loaded on first request

The backend breaks if the node type configuration isn’t cached in the session, due to a race conditiion. Problem introduced with I1848117ba4440e6cefade219b5b1ed40d0ab0487.

[BUGFIX] Context dependent exception handler causes fatal error

The context dependent exception handler doesn’t pass on the TypoScript runtime to the new exception handlers, leading to a fatal error when the exception handling checks if the content cache should be disalbed.

[TASK] Generate outdated reference documentation appendixes

[TASK] Enhance documentation

[TASK] Improve usability of new/paste buttons in navigate component

  • Adds a hint to the title of the button
  • Adds a trinagle in the lower left corner of the button indicating there’s something more

Resolves: NEOS-215

[FEATURE] Commands to activate/deactivate domains

  • Adds “domain:activate” and “domain:deactivate” commands
  • Adds active state to output of list command
  • Sorts domains in list command by site and then host pattern

Resolves: NEOS-98

[TASK] Add documentation for updated Attributes behavior

Related: NEOS-275

[FEATURE] Apply constraints to content element handles

This change introduces checks for the insert / paste handles. They now take the nodetype constraints into account.

Besides that the NodeActions and ContentCommands objects are refactored to do all actions on the node object

Resolves: NEOS-160 Resolves: NEOS-175

[TASK] Move tests from Neos package to TYPO3CR

The move of the ConfigurationContentDimensionsPresetSource from Neos broke a unit test, this showed some of the tests should have been moved as well (see If52b4b570d52c9f39c06ce192421d785e85f54bc).

[BUGFIX] Keep PHP version requirements on 5.3

[BUGFIX] Add missing compiled css

[TASK] Remove false comment in aloha.js

[BUGFIX] Inline editable properties for documents not visible

When a property is inline editable directly on the document, it’s not visible in any way. Now a gray outline is displayed on hover as well as a blue outline when focussed matching the behavior of the content elements.

Fixes: NEOS-362

[BUGFIX] Format bar hidden for inline editables

The formatting bar is hidden for inline editable properties for the document, meaning not inside a content element. This happens because it’s only shown when the class “neos-contentelement-selected” is set, but that only happens for content elements.

Fixes: NEOS-361

[!!!][TASK] Unify dimension settings into TYPO3CR

This change adapts to the according change in TYPO3CR by moving configuration of dimensions to the TYPO3CR and reducing the ContentDimensionPresetSource to uri handling that is only important for Neos.

Related: If52b4b570d52c9f39c06ce192421d785e85f54bc

[TASK] Prevent empty class attribute in wrapped elements

[FEATURE] Make Aloha formatless pasting configurable

Allow the Aloha formatless pasting to be configurable. It’s possible to enalbe/disable the button, set the default behavior as well as define which elements should be stripped.

Resolves: NEOS-260

[TASK] Rename node:autocreatechildnodes command to node:repair

This change renames the node:autocreatechildnodes to node:repair and by that creates a command which can perform further “repair” tasks in the future. From a user’s perspective simply running “repair” will likely solve all structural node problems.

Further more, the command controller is moved to the TYPO3CR package and thus consists of two commits: this one which removes the controller from TYPO3.Neos and a second one which adds it to TYPO3CR.

Related: NEOS-325

[TASK] Adapt functional tests to changes in CR

TYPO3CR test have been made independent from other packages by putting all used node types in a testing namespace. This change adapts Neos to those new node type names.

Related TYPO3.TYPO3CR change: I46e08720632aa70504a3ab98634816474b841619

Related: NEOS-34

[BUGFIX] Behat test “Toggle Preview Mode” is broken

The “Toggle Preview Mode” test is broken as the “Full Screen” button might not yet be rendered during the test. This change introduces a new @When method to the Behat feature context to support waiting for an element to be rendered.


When I wait for the "Open full screen" button to be visible

The element should be added to the switch statement in the namedElementSelectorExists method of the FeatureContext.

Fixes: NEOS-173

[TASK] Set default date editor format in Settings.yaml

This serves as a reference making it unnecessary to read the documentation for learning about it.

Related: NEOS-203

[TASK] Add time to date format for TYPO3.Neos:Timable

Related: NEOS-203

[!!!][FEATURE] Switch to PHP date format for inspector date editor

Switch from a custom date format used in the inspector date editor to the standard PHP date format. This is a format that more people are familiar with so it makes sense to use it instead. It also makes the format indenpendent of the date edtior implementation.

Example configuration:

  format: 'd-m-Y H:i'

This is marked breaking due to the format change, meaning that if you have changed the default date format you have to migrate to the new one.

To adjust the code use the new format, it should be enough to run this on your site package(s):

./flow flow:core:migrate --package-key <sitepackagekey>

Resolves: NEOS-205

[BUGFIX] a property “type” might not be set

This checks if a property actually has a type defined in NodeTypes configuration, because it will result in PHP warnings if not.

Related: NEOS-297

[BUGFIX] 404 Error on select2x2.png

The select2 selectboxes use an incorrect path to a sprite image that we don’t even use. This change suppresses the background image to be used.

[TASK] Make pagination styles globally available

Move styles for pagination widget to global place so that backend modules can also make use of it.

[FEATURE] Apply ConvertUris to inlineEditable properties

With this change all string properties that are inline editable have the TYPO3.Neos:ConvertUris process automatically applied.

That means a property title configured with:

type: string
  inlineEditable: TRUE

Will have the additional TypoScript line:

title.@process.convertUris = TYPO3.Neos:ConvertUris

automatically generated.

Resolves: NEOS-297

[!!!][TASK] Deprecate unused IncludeJavaScriptViewHelper

This VH has been mostly untouched since it’s inception and is no longer used. The best practice for including JS is now a different one: either have your scripts in a section of your template or add them to the TS Array in page.head.javascripts in your TypoScript.

Thus this VH is deprecated and will be removed in three versions from now.

[BUGFIX] Content collection falls back to first child if nodePath is empty

When a content collection cannot find a node in the given path, it falls back to the first found child node on the current page. This leads to very unexpected and confusing results, e.g. rendering the main content collection right before the content collection with the unfound node.

[BUGFIX] Site Export should be able to handle broken assets/images

This is a workaround for NEOS-121 which fixes the site export e.g. with the demo site.

In order to test this, the demo site should be exported directly after it was imported. This broke without that change.

Related: NEOS-121

[BUGFIX] Importing of resources broken due to wrong argument order

Creating resources during site import was broken for assets in arrays that were not used elsewhere.

[FEATURE] Improved workspace:* commands

This change renames and improves the workspace:publishall and workspace:discardall commands. The new commands workspace:publish and workspace:discard accept a new argument “–dry-run” which allows for simulating publishing and discarding of the given workspace.

The old commands are still available for backwards compatibility. They are now marked as deprecated.

[TASK] Configure behat to use saucelabs for behavior tests

Adds example configuration and documentation on how to run javascript behat tests on saucelab’s virtual machines for cross browser testing.

[BUGFIX] Wrapping pages results in PHP notice

Using the ContentElementWrappingService on document nodes can lead to PHP notices because the attribute class might not have been defined prior to concatenating. This leads to Flow exceptions and break the site. This change fixes it by initializing the empty class array entry at the beginning. The problem was introduced with the related change below.

Related: Ia11ac5b6c7bef4c30e005b53f21215d0b17637c1

[TASK] Code cleanup in node controller

Related: NEOS-338

[FEATURE] Sorting of node types in insert new panels

This change enables the node types that appear in the insert new panels to be sortable according to their position setting from the configuration.

[TASK] Change RUBY_VERSION check to match versions > 1.9

The current check for the RUBY_VERSION only checked if a 1.9 version of Ruby is installed and as such does not work on 2.0 or higher. This change updates the comparison so it works for all versions higher than 1.9

[FEATURE] Apply constraints to new/paste buttons in navigate component

Applies constraints to the new/paste buttons in the navigate component trees (node tree/context structure tree). This is done by checking if the selected node allows children or siblings and if so allows the matching position. In case of pasting the cut/copied node is checked against the allowed children/siblings. If there’s no available position the buttons are disabled. If the chosen position is not available the last available option is chosen by default (into/after). Takes the unmodifiable levels configuration into account.

Resolves: NEOS-187 Resolves: NEOS-159 Related: NEOS-215

[BUGFIX] UnpublishedNodes includes root node in PublishingService

The getUnpublishedNodes method in the PublishingService shouldn’t include the root node, since it’s not publishable.

Besides that the getUnpublishedNodes() method now returns 0 if it’s called for the live workspace as this workspace will never have unpublished nodes.

[BUGFIX] Content collections marked unpublished for new pages

When creating a new page and publishing the changes, the content collections remain shown as unpublished changes. This is due to the cache for the content collections not being flushed when publishing the first time. Afterwards the content collections will remain in the live workspace, so clearing the content cache solves the issue for existing pages.

It is solved by adding a entry tag for all content collections directly in the document, making sure that content collections are flushed when the document is.

Fixes: NEOS-339

[TASK] Use primary button styling in Site management

The button should be blue.

Resolves: NEOS-221

[FEATURE] “workspace:list” command

Adds a new list command to the workspace commands to list existing workspaces needed for the existing commands.

Resolves: NEOS-324

[BUGFIX] lastVisitedNode should be reset when changing sites

The lastVisistedNode session variable is always pointing to the node that was last open in frontend to redirect to that page. If the node is removed this redirect will lead to a “page not found” error. This can happen for example if something is changed in sites management. Therefore changes in sites management should clear this session variable.

Fixes: NEOS-127

[BUGFIX] Throw exception for missing node in editable view helper

This happens when a node is could not be found, but the view helper is still used. Now a catchable exception is thrown instead.

Fixes: NEOS-328

[BUGFIX] Tests for Publishing Service fix

These are updated tests for the previously merged fix for NEOS-308.

Related: NEOS-308

[BUGFIX] Publishable nodes in Neos UI uses wrong dimensions

This fixes a bug in the Neos Publishing Service which did not consider content dimensions when retrieving the currently unpublished nodes.

Requires a related change in TYPO3CR (see topic NEOS-308).

Resolves: NEOS-308

[TASK] Add missing title attribute for “Toggle context structure”

[FEATURE] Time support for the inspector date editor

Add support for date formats with time in the inspector date editor. To support this the format is changed to include time and timezone offset, to ensure consistency between server and client.

Example configuration:

  format: 'dd-mm-yyyy hh:ii'

Additionally fixes a bug where the date isn’t reset when the inspector changes are discarded.

Resolves: NEOS-203

[TASK] Change “TYPO3’s” to “TYPO3 Neos” in RoutingLoggingAspect comment

[TASK] Swap some access checks with workspace checks

This change inverts a number of checks for the workspace being not the live workspace and for access to the TYPO3_Neos_Backend_GeneralAccess resource.

This makes it possible to render full Neos pages in a CLI context (where the security framework cannot be initialized) and should speed up things a tiny bit along the way (by avoiding security checks in case of live being rendered).

[BUGFIX] Fix failing unit test

In I54cc0776d56d58c77955225b7484b39dde465b64 some code was added that broke a unit test. This change fixes that test.

[BUGFIX] respect “workspace” argument consistently when auto-creating child nodes

How to reproduce

  • Create a new page (which then only exists in your user workspace)
  • Then, modify NodeTypes yaml to add a new (auto-created) child node
  • Then, run ./flow node:autocreatechildnodes. We’d expect no changes on your newly created page, because it only exists in your user workspace, but not in live workspace (where auto-creation is applied).
  • However, without this change, the node (with all childnodes) gets created in live workspace as well, leading to duplicated nodes in the node tree.
  • Commit: 2748340

[BUGFIX] Robust initialization of ContentDimensionSelector

The ContentDimensionSelector is sometimes not initialized. This seems to happen because the observed properties on the Controller are already set when the view is initialized thus never triggering the _initialize method. Calling it in the init method of the view seems to fix the problem.

Additionally Ember.run.next is used now.

Fixes: NEOS-288

[FEATURE] Set current locale in Flow from language dimension

This sets the current locale in Flow to the current language dimension when rendering TypoScript. The fallback rule in Flow is set as well.

[TASK] Notify users of log out in final setup step

[TASK] Make site import setup step clearer

[BUGFIX] Doctrine eventListener registered without key

Because the Doctrine event listener for the account post listener is registered without a key, registering another event listener in another package will result in overwriting the listener causing undesired side-effects.

[BUGFIX] Class names missing for setup steps

[BUGFIX] Stylesheet out of sync with source

[BUGFIX] Root node points to wrong language after switching languages

Fixes an issue with the node tree, whose root node link pointed to a wrong content dimension after switching the dimension (for example the language) in the content dimension selector.

Resolves: NEOS-289

[BUGFIX] Update select2 in jquery-with-dependencies.js

This is a follow-up to I7f2bb6b19694d6f93e5b7c4930bbfe6cf64dba00 and includes an update to select2.js, fixing the unstyled dimension selector.

Related: NEOS-14

[FEATURE] Hide content dimensions selector if there are not enough options

This change introduces a check which hides the content dimensions selector altogether if no dimensions or no dimensions with more than one preset exists.

Resolves: NEOS-277

[BUGFIX] Selector forgets current dimension and has no multi-dimension support

This change addresses an issue where the content dimension selector looses the current selection after switching the dimension. It also improves support for scenarios with multiple content dimensions.

The code design was also improved: the content dimension selector is now less coupled to the content module (Application.js) and reloads the node tree more reliably.

Resolves: NEOS-284

[TASK] Rename neos-page-metainformation to neos-document-metadata

In order to become more consistent with the “document” paradigm we follow in Neos, this change replaces all occurrences of the “neos-page-metainformation” attribute used in the Neos UI with “neos-document-metadata”.

Resolves: NEOS-283

[TASK] Rename “languages” content dimension to “language”

This renames the content dimension “languages” to “language”.

Note that if you already have content in your content repository which has been using the “languages” dimension, you will need to run a node migration:

./flow node:migrate 20140723115900

Resolves: NEOS-211

[BUGFIX] Fix JsonView configuration in NodesJsonView

The configuration was configured based on outdated assumptions.

Related: NEOS-199

[TASK] Tweak select2 implementation

We aim for rendering all DOM elements below #neos-application. Select2 adds itself to the closes body element effectively rendering outside the Neos DOM structure.

This change automatically builds a version of select2 that renders the selectbox below #neos-application. Besides that it tweaks the implementation removing unneeded jQuery wraps and tunes setting the placeholder.

Related: NEOS-14

[FEATURE] Neos UI: content dimensions selector

This change provides a first implementation of a content dimensions selector (which can be used, for example, as a language selector) for the Neos user interface.

In order to translate website content with this rudimentary feature you must make sure to have content dimension fallbacks defined for the languages you want to translate, otherwise you’ll end up with multiple completely separate content trees.

This selector has mainly been tested with a single dimension (that is, “languages”). It does support multiple content dimensions, but true support for more than one dimensions requires additional features in the routing system first (if dimensions should be triggered through a frontend URL, see NEOS-176).

Please note that you still need to enable the LocalizedFrontendNodeRoutePartHandler manually in order to test multi language support.

Resolves: NEOS-17

[FEATURE] Rudimentary RESTful Nodes service

This change refactors and introduces more functionality for a RESTful service providing access to nodes in Neos. The preferred output format is HTML, but JSON is also supported (triggered via Accept header).

The existing NodeController was renamed to NodesController and references to it were corrected accordingly.

Related: NEOS-199

[TASK] Fix code in nodetype examples

This fixes two typos in the node type examples in the Integrator’s Cookbook.

[FEATURE] REST HTTP client implementation for the user interface

This change introduces a simple HTTP client for accessing the Neos REST services. As we start using this service, it will be improved and enhanced. This version at least support simple operations like GET http://foo.com/neos/service/nodes and GET http://foo.com/neos/service/nodes/123467890abcdef

Resolves: NEOS-204

[FEATURE] Make site available in page body template

Usually you will have a link to the homepage in your body template therefor it makes sense to expose the site node in the template by default.

[BUGFIX] NodeSearchService working as before

Due to the fix of case sensitive like queries merged in Flow (I53cd80e145eb49bcf8251f0045b9f3ec4fd61105) the NodeSearchService currently returns wrong results as it cannot properly lowercase the content of the properties blob field.

As we already discussed this cannot be fixed easily so for now the NodeSearchService will not attempt to search case insensitive.

This also needs to be backported to all branches that will get the Flow bugfix.

Fixes: NEOS-267

[TASK] Document missing configuration options for aloha

Resolves: NEOS-263

[TASK] Improve ViewHelper documentation, add reference

The documentation of the Neos ViewHelpers is amended and fixed with this changes.

A Neos ViewHelper reference (in an appendix) is added to the documentation with this change.

[TASK] Update processed create.js

[FEATURE] NodeType constraints

This change adds support for NodeType constraints in the new node wizard from the content element handles and in the new node wizard for the navigate component.

Additionally, it also supports these restrictions while changing node types and moving nodes in the Navigate component.

See the changelog and documentation (which is included in this change) for a detailed description of the feature.

Resolves: NEOS-34

[BUGFIX] Clicking outside the body should deselect active element

When a page is shorter than the height of the browser window and a content element is selected, clicking outside the body tag doesn’t deselect the active content element like it normally does when clicking outside any content elements.

Fixes: NEOS-207

[BUGFIX] Emptying a collection breaks create new

When a element in a content collection is removed it’s not possible to create new elements without reloading the page. This happens when there are removed elements in the collection and it checks if it should insert before one of them, which fails because they cannot be found.

Fixes: NEOS-182

[BUGFIX] Set correct cache mode for ContentCollection by default

Change the default TypoScript for ContentCollection to make it cached or embedded depending on the context.

With the power of prototype context dependent TypoScript declarations we can mitigate the problems when updating to Neos 1.1 or when new static ContentCollections are created.

The documentation and comments are updated to remove the need for user action in these cases.

Resolves: NEOS-227

[BUGFIX] Remove neos-contentelement class from page metainformation

The page’s metadata wrapper gets the class neos-contentelement set.

This change also makes sure the class attribute is trimmed, which can be necessary for content collections.

[BUGFIX] Enable/disable edit in create uses different selector

The enable/disable edit methods in create uses a different selector, meaning that it could happen that some entities are not disabled correctly.

[BUGFIX] Backend redirects breaks with invisible/inaccessible nodes

If a node is inaccessible or invisible (hidden after/before) the backend redirect service cannot find it thus leading to not being able to redirect to the page. In case the fallback redirect is used to the site’s root node and the root node is inaccessible/invisible the backend will throw a 404, even though the page can be accessed just fine in the content module.

This is caused because the context created for finding the nodes in the backend redirect service doesn’t allow inaccessible/invisible nodes.

Fixes: NEOS-225

[BUGFIX] Structure tree contains removed nodes after removal

Removing content outside the structure tree does not remove node from structure tree. This is due to the structure tree being reloaded before the removal has been saved to the server. To resolve this issue a new event ‘contentSaved’ has been introduced to storage.js. The remove nodeAction listens to the first ‘contentSaved’ event and triggers ‘contentChanged’ afterwards.

[BUGFIX] Content element overlay not displayed

This change fixes the content element overlay to display properly over the actual content by getting the full width/height including padding of content and apply to the overlay.

[BUGFIX] Find FlowQuery operation breaks with empty context

When the find operation is used on an empty context an exception is thrown because the canEvaluate method will return FALSE. This happens because there is no fallback operation for find and it can only evaluate if the first context element is a NodeInterface.

Fixes: NEOS-208

[BUGFIX] Has FlowQuery operation breaks with empty context

When the has operation is used on an empty context an exception is thrown because the canEvaluate method will return FALSE. This happens because there is no fallback operation for has and it can only evaluate if the first context element is a NodeInterface.

Fixes: NEOS-209

[BUGFIX] Children operation should only work with nodes

[TASK] Rename NodeTypeSchemaBuilder to VieSchemaBuilder

[TASK] Hide content handles for elements outside collections

When a content element is rendered directly outside a collection the handles should not be shown.

[BUGFIX] Inspector Image Cropper should not open if dummy-image is shown

Else, this is very confusing for users which accidentally open the (empty) image cropper by clicking on the Neos dummy image

Fixes: NEOS-130

[BUGFIX] Pages created without entering a name should work

Creating pages wihout entering a name for the new page ended up in an exception and wrong “null” entry for the page that was not created. With this change a new page that has got no name will be “unnamed” automatically and prevent the exception.

Fixes: NEOS-86

[BUGFIX] Fix small typo in 1.1.0 change log introduction

[BUGFIX] (Sites Management) Importing site fails if kickstarter is not installed

When the site kickstarter is not installed, the “Package Key” and “Site Name” input fields are not rendered in the “Create Site” dialog. Because they are marked as required parameters, the following property mapping exception occurs on form submission:

The bug is 'Required argument "packageKey" is not set.'

This is fixed with this change by marking the arguments as optional.

Fixes: NEOS-128

[TASK] Hide search field if a select box has less than five items

A select box with less than 5 items does not need to be searchable. If a select has only 2 items, the search box is even very confusing due to the contrast.

Resolves: NEOS-133

[BUGFIX] Secondary Inspector Panel should close on changed node

Secondary inspector panels are used for additional editors that do not fit the inspector like the HTML editor or the media selector. The secondary panel should close when the selected node changes (for example by changing the page).

[TASK] Add change log for 1.1.0

[TASK] Add release notes and change log for 1.1.0

[TASK] Add ContentCache documentation to the documentation index

[TASK] Add Content Cache documentation

[BUGFIX] Content element wrapping should fail gracefully

If the content element wrapping can’t find a node on the node variable it should return the content instead of throwing an exception.

This e.g. happens if a TypoScript object like “Text” is rendered standalone without a Node.

[!!!][BUGFIX] Menu state should not be calculated based on a shortcut

Fixes wrong behavior of menu states, introduced with the refactored MenuImplementation. Especially behavior of shortcuts pointing to a subpage of themself showed wrong current states.

This is only breaking compared to the 1.1 branch not to 1.0. If you need a link to the site root page with correct active state you shouldn’t create a shortcut pointing to it but rather include the real site root in the menu, by using the itemCollection property of the Menu TypoScript object.

TypoScript example:

itemCollection = ${q(site).add(q(site).children('[instanceof TYPO3.Neos:Document]')).get()}

[BUGFIX] Exception on deleting used Assets

Referenced Assets (like images) were not checked for usage in nodes so on next rendering an exception would be thrown effectively rendering the site unaccessible. This change prevents deletion of Assets that are still referenced.

Needs: I56f8e922f84c00d9402837591d308583f7069b3f

[BUGFIX] UserPreferenceController indexAction missing template

The index action in UserPreferenceController is lacking a fluid template so any call will raise an exception. This was now changed to return a json representation of the preferences.

Note: it seems at the moment this action is never called in the Neos backend.

[BUGFIX] The site import / export does not handle properties of type array

The AssetList stores an array of images / assets on a node which are not exported or imported. This change adds support for importing and exporting them.

There is still a bug wit serializing the Image objects on persist for which NEOS-121 is created.

[TASK] add alignment example for Aloha

[BUGFIX] Alignment configuration for Aloha editor broken

It’s not possible to use the alignment configuration due to broken logic in the plugin itself and wrong configuration of Aloha settings.

[BUGFIX] Site import service duplicates image resources

If a site is imported multiple time the images in the database get duplicated.

[BUGFIX] Content cache should be cleared when discarding changes

The WorkspacesController discarded changes by direct calls to the NodeDataRepository, which is highly discouraged as important signals will not be emitted by that.

This change updates the controller to use the PublishingService that will emit the correct signals and does not change behavior.

[BUGFIX] Use NodeNameGenerator to ensure unique node names

[BUGFIX] Hide formatting button when no options are available

When configuring the aloha editor not to have any formatting options, the selector is still shown although useless. This makes sure it’s hidden if no options are available.

[BUGFIX] Page tree reloads on every page change

When not using content dimensions the page tree gets reloaded on every page change due to a broken check if there are no content dimensions in the node path.

Introduced in Ic06ff0c679d5a141959c031e3dc296523a8dd2e1

[BUGFIX] Title used in publishing notice relies on page reload

Currently the title used when publishing relies on the page being reloaded since it gets the property from the DOM instead of the VIE entity. This is needed when the title is inline editable.

[TASK] Move CreateJS to InlineEditing folder

This change also removes typo3MidgardEditable, which was not used anymore.

[TASK] Add Unit Test for NodeTypeSchemaBuilder

[TASK] Update createjs

Updates CreateJS to after alpha4 and including the pull requests made by Christopher.

[TASK] Move vie/instance and vie/entity

[TASK] Update FlowQueryOperationReference

[FEATURE] Activate and deactive user commands

[FEATURE] List command for listing existing users

[BUGFIX] Publishing nodes gives a server error

Publishing changed and removed nodes gives a internal server error because of an incorrect property mapping configuration. Besides that possible validation errors resulted in a 403 access denied as the errorAction on the AbstractServiceController was not added to the Policy.yaml

Since I304e0b76164f83a85c3ca3f4d0ed630b04319426 the convertNodes method is also obsolete and removed in this change.

[BUGFIX] Asset editor calls server without identifier

When the list of assets allows multiple assets and has no value set it will send a json encoded empty array to the asset metadata endpoint. This results in an internal server error that is thrown to the user without further reason as we can just remove the loading state.

[TASK] Add generated Eel helper documentation

Add generated documentation for Eel helpers. The documentation can be generated using the TYPO3.DocTools package with the following command:

./flow reference:render --reference EelHelpers

[FEATURE] Make NodeTree baseNodeType configurable

Allows configuring the baseNodeType used in the node tree. The naming of the configuration keeps into account that the node tree should support multiple presets in the future.

Example configuration:

              baseNodeType: 'TYPO3.Neos:Document,!My.NodeType:ToIgnore'

[TASK] Move Aloha to InlineEditing/Content/Editors/Aloha

[TASK] Remove unused testrunners

[FEATURE] Configuration module

A configuration module to get an overview of merged configuration. All types of configuration can be viewed and are validated when viewing. The state of the viewed configuration is stored and expanded with every generation.

[TASK] Include require as non-conflicting in modules

To be able to use require for more than just bootstrapping the backend inside modules, we need to not rely on the data-main attribute and instead use it directly like it’s done in the content module for the same reason.

[BUGFIX] ConvertUris throws exception with NULL values

This happens if a node property doesn’t have a default value, but uses the processor on the value.

[FEATURE] Placeholder support for inline editable properties

Instead of using a default value to ensure that the editor can edit the inline editable properties, it’s now possible to define a placeholder text that will be shown if the property is empty.

Example configuration:

      type: string
        inlineEditable: TRUE
          placeholder: 'Enter text here'

[FEATURE] Support message for inline notifications

Also fixes an issue where html entities were escaped in titles.

[FEATURE] Textarea inspector editor

A textarea editor for the inspector that looks like the normal input text, but expands when focussed allowing for extended lengths of text.

Example usage:

      type: 'string'
        label: 'Description'
          group: 'document'
          editor: 'TYPO3.Neos/Inspector/Editors/TextAreaEditor'
            rows: 7

[TASK] Add class name for inspector editor container

Introduce a generated class name for all inspector editor to be able to style the editors container.

[FEATURE] Has FlowQuery operation

A operation for reducing the set of matched element to those that have a descendant that matches the selector or given elements.


closestParentWithImageChild = ${q(node).parents()
  .has('[instanceof TYPO3.Neos.NodeTypes:Image]').first()}

[BUGFIX] Find FlowQuery operation returns array with NULL

Instead of returning an empty array the find operation returns an array with NULL when a child node cannot be found.

[BUGFIX] Children operation optimization bypasses filters

Additional attribute filters are bypassed when doing early optimization of filters for the FlowQuery children operation, limiting the possibilities of the children operation.

[BUGFIX] Filter operation instanceof only works with node interface

[BUGFIX] Adjust UnitTest to changed console implementation

Adjusts the UserCommandControllerTest to the CommandController that has been adjusted with I063742aca1898695f2e40f36b3e207248ac6e55c

[BUGFIX] Instanceof Fizzle operator only works with nodes

Neos overwrites the instanceof Fizzle operator behavior breaking the normal behavior when not dealing with nodes.


[image instanceof TYPO3\\Media\\Domain\\Model\\ImageVariant]

[TASK] Remove custom ArrayConverter

With I304e0b76164f83a85c3ca3f4d0ed630b04319426 the custom ArrayConverter that has been implemented in order to properly convert arrays of entities is no longer required.

Depends: I304e0b76164f83a85c3ca3f4d0ed630b04319426 * Related: #58696 * Commit: f1c9cbe

[BUGFIX] Inline editable properties re-initialized after publishing

When publishing changes all inline editable properties are re-initialized by Aloha in the callback due to the VIE entity being updated. This causes the cursor to be moved among other issues. To prevent this we update workspace for the entity silently.

[TASK] Document != operator in Fizzle for FlowQuery

[TASK] Add typehints for NodeInterface to RoutePartHandlers

[TASK] Replace a few remaining occurrences of “locales” dimension

Replaces occurrences of “locales” with “languages” and changes the UI label for the languages dimensions to “Language”.

[BUGFIX] Commit correct changelog for 1.1.0-beta3

[TASK] Add 1.1.0-beta2 and 1.1.0-beta3 changelogs to master

[TASK] Add basic validation for content dimension preset configuration

This adds some basic safe guard to the setConfiguration() method which throws an exception if a non-existing content dimension preset has been defined as the default preset.

[TASK] Adjust NodeTypes.schema.yaml

Adjusts the NodeTypes schema to allow all supported headlines in the aloha format setting.

Besides this removes a left-over “nonEditableOverlay” from the NodeTypes configuration.

[TASK] Remove request from context

This removed the request from the TypoScript context as with I9c95bccce0f34dc4d4c9faa85a16b8a36006cd96 the context is added in the default context to always have the current request in the context.

Needs: I9c95bccce0f34dc4d4c9faa85a16b8a36006cd96

[TASK] Cosmetic changes and clean ups

As a preparation for the further development of the content dimensions support, this change contains a few cosmetic changes to existing code.

[TASK] Rename content dimension “locales” to “languages”

This change renames the previously introduced content dimension “locales” to “languages” as “locales” was too unspecific.

If you relied on the name previously, you’ll have to adapt your code accordingly.

Resolves: NEOS-116

[TASK] Only show images in image media browser

This change adds a second controller next to the MediaBrowserController to browse only images. This controller is used for the media selection in the ImageEditor.

[TASK] Amend documentation in EditableViewHelper

This tries to explain the user the need for correct metadata wrapping if the ViewHelper is used with a given node.

Also some unused import statements are removed.

[BUGFIX] Node tree search/filtering incompatible with PHP 5.3

Due to the use of $this inside a Closure it throws an error on PHP 5.3. To circumvent that problem the class instance is referenced instead.

[TASK] Make items in Breadcrumb prototype an array, not FlowQuery

The items in a Breadcrumb were a FlowQuery instance. This changes unwraps the query and makes items a simple array.

That way it is consistent with the other menu types’ behavior.

[BUGFIX] Resolve hardcoded URIs in Backend context

This removes occurrences of hard coded URIs to end points, modules etc. This finally enables using Neos with custom routes or being installed below a subdirectory.

[FEATURE] uri.module view helper

This introduces an uri.module view helper as counterpart to the link.module view helper.

[TASK] Small addition to the Developer Guide’s “Behat” chapter

[BUGFIX] Padding for sub headers in create dialog

Add more space around sub-headers in the create new dialog.

[FEATURE] Cancel button after selecting image for upload

Makes it possible to go back after having selected an image for upload in the image editor without having to unselect and reselect the element.

[BUGFIX] Show correct TypoScript path in exception handler messages

This change sets the default TypoScript exception handler to “ThrowingHandler”. This way an exception will be re-thrown until it is handled by a path that has another exception handler configured (e.g. the NodeWrappingHandler). A new “ContextDependentHandler” is introduced to switch between HtmlMessageHandler in Development or XmlCommentHandler in Production. It’s configured at the TypoScript root-level to catch unhandled exceptions.

This way we can show the correct TypoScript path in messages and not stop at all calls to tsRuntime->render(...) that was handled with an “HtmlMessageHandler” by default.

[TASK] Remove duplicate method in reference editor

[BUGFIX] Preview of image not matching uploaded image

When selecting an image for upload a preview is shown, this upload preview didn’t match the selected image preview shown after upload.

Additionally the solution is made more simple and removes unnecessary code from the asset editor.

[TASK] Implement “cacheLifetime” and “context” FlowQuery operations

Implement FlowQuery operations to get the cache lifetime of nodes in a content collection. This is done with modular operations that can also be used when rendering nodes outside of a content collection (e.g. rendering a list of document nodes with a filter).

Additionally fix a functional test that broke through a Runtime refactoring.

Resolves: NEOS-69

[TASK] Hide empty inspector groups

An inspector group with no properties should not be shown.

[BUGFIX] Wrong arguments for pasteBefore in node actions

[BUGFIX] Position of icons incl. loader in content handles

[BUGFIX] Auto-publish causes connection error loop

When auto-publishing is enabled a loop of connection errors occurs due to the controller not allowing an empty array of nodes.

Fixes: NEOS-113

[BUGFIX] Discard all workspace command broken

[TASK] Replace old syntax Fluid if conditions

[TASK] Code cleanup and CGL violation fixes

  • Import of FQL namespaces
  • Inline type hinting
  • CGL violations
  • Missing class references
  • Minor tweaks
  • Commit: 871166b

[BUGFIX] Loading indicator when pasting never stops

When pasting content using the content element handles the loader never stops and also it’s not tied to the specific element that the paste button was clicked on.

Fixes: NEOS-41

[BUGFIX] Context structure tree not updated when pasting

Fixes: NEOS-84

[FEATURE] Introduce “user:show” command for showing user details

This commit adds a new command “user:show” which mainly allows for checking if a given user exists. If it does, a few user details are shown, such as username, person name and email address.

[BUGFIX] FrontendNodeRoutePartHandler should resolve node by context path

Currently the FrontendNodeRoutePartHandler ignores node dimensions for the live workspace, which causes the frontend to fail to render localized plugins in the frontend that try to render URIs.

[BUGFIX] Behat Tests are green again

Adapts the behavior tests to the changes in the UI.

Note: The scenario Features/Content/InlineEditing.feature:7 is unstable because of server communication errors showing up sometimes.

Resolves: NEOS-74

[BUGFIX] Use node full label in Menu and Breadcrumb

Currently the Menu and Breadcrumb use the NodeInterface::getLabel(). The label is created by the NodeLabelGeneratorInterface and cropped if longer than 30 characters. This change use the NodeInterface:getFullLabel() to display the full label in the menu.

[TASK] Disable notifications for aborted HttpClient requests

When HttpClient requests are aborted it’s application logic and not something we want to display as an error. E.g. when clicking between image elements before the request finished.

[BUGFIX] Backend endpoints with CSRF must not be cached

The “neosBackendEndpoints” header part must not be cached because it contains the CSRF token that depends on the user session.

[TASK] Fix documentation version

Sets the version of this documentation to “master” to match the released version.

Also enable PDF rendering of the documentation.

[TASK] Push changelog for 1.1.0-beta1 to master

[FEATURE] Implement BreadcrumbMenu to replace Breadcrumb

This streamlines the “items” property provided by the Breadcrumb TypoScript prototype to match the “items” array provided by the Menu prototype.

This change is not breaking, but deprecates the TYPO3.Neos:Breadcrumb TypoScript object. Switch to TYPO3.Neos:BreadcrumbMenu for additional features and future compatibility.

Resolves: NEOS-107

[BUGFIX] Workspace wide publishable entities not cleared immediately

Related: #NEOS-105

[TASK] Reload the nodeTree if the content dimensions change

If a link is clicked in Neos that results in a change of the content dimensions (like a link to a different language) the NodeTree now refreshes.

[TASK] Navigate to newly created pages automatically

When creating a new page the normal use case is to add content to that page so it should be navigated to automatically.

That also solves the issue with having to reload the page to update the menus in case the new page should be displayed.

Resolves: #NEOS-102

[FEATURE] Mark unpublished nodes in context structure tree

Show a unpublished indicator for each content element that is unpublished in the context structure tree. This gives an overview over unpublished changes on the current page.

Resolves: #NEOS-104

[BUGFIX] Edit/preview mode slider breaks without modes

[FEATURE] Scrolling for multiple edit/preview modes

Integrate the “Sly” plugin to add smooth scrolling behaviour inside the edit/preview panel.

The scrolling function is enabled as soon as the width of all buttons exceeds the width of the edit or preview panel.

[FEATURE] Linking to assets in Aloha editor

This change introduces the possibility to link to files within text elements. The autocomplete wizard of the link wizard now displays pages and assets in the result list.

The ConvertNodeUrisImplementation is also renamed to ConvertUrisImplementation to reflect that it does convert uris and not only node uris.

Aloha’s table wizard and link wizard are also moved below the #neos-application element for better separation of styling.

Resolves: NEOS-20

[BUGFIX] Publish/discard all count not updated

When a page or all changes are published or discarded the publish/discard all count isn’t updated accordingly.

Fixes: #NEOS-105

[TASK] Use HttpClient instead of $.get in references editor

[TASK] Mark newly created pages unpublished instantly

[BUGFIX] Notifications not shown after publishing/discarding

Fixes: #NEOS-106

[BUGFIX] Publishable nodes count not context aware

The total count of unpublished changes does not take context in account leading to several problems, e.g. not being able to mark dirty pages when using content dimensions.

Fixes: #NEOS-103

[BUGFIX] Creating or moving a page does not update publishing state

Fixes: #NEOS-85

[TASK] Improve notification for failed AJAX requests

[BUGFIX] AJAX error handlers using undefined variable

I5e964543e9b67209859dccbb0b84e9fcf2980beb introduced a regression regarding handling of the error responses.

[BUGFIX] Unpublished indicator in node tree pushes title

Nodes marked dirty in the node tree are indented more than their siblings due to an extra left border.

[TASK] Pasting in node trees should paste after by default

The most common usage case for pasting nodes is wanting to paste after a specific node, this also keeps the default consistent with the create new position.

Resolves: #NEOS-80

[BUGFIX] Loading 404 pages breaks backend by reloaded the page

Fixes: NEOS-77

[TASK] Remove unnecessary duplicate of internal node type

Instead of adding an additional node type property for internal use, we use the typeof that already contains the node type.

The node type switching also introduced the node type as a property, but that can’t be relied on since it depends on the node type configuration.

[TASK] Prevent multiple initializations of publishable nodes

[BUGFIX] Creating a new page won’t activate the publish button

When a new page is created in the node tree that page should be navigated to. When navigating to a new page the publishable nodes is re-initialized ensuring the publish button is activated and the publish count updated.

Fixes: #NEOS-96

[TASK] Publish/discard all changes in one request

Instead of sending one request for each change when publishing/discarding changes, they’re all send in one request to prevent race conditions and unnecessary requests.

Fixes: #NEOS-95

[BUGFIX] Fix adding nodes with a cached version of a collection

The content cache will be flushed when a Node is created. But the flushing was moved to a shutdown method, so it’s done after the content for the collection containing the new node was rendered. This causes problems if a cached version of that collection already existed.

The change introduces a flag for the Neos version of the TypoScript view that allows to disable the content cache for this case.

Fixes: #NEOS-78

[FEATURE] AssetEditor for inspector

This change adds an editor and updates Neos to support two new property types: TYPO3\Media\Domain\Model\Asset for a single reference to an Asset entity and array<TYPO3\Media\Domain\Model\Asset> to select or upload multiple assets.

The ContentElementWrappingService was changed to export all public properties only for the ImageVariant type and support for the Asset types was added. This part of Neos needs more refactoring in the future.

Revert “[BUGFIX] Publishable nodes count not context aware”

This reverts commit 18412635ba056b97a11f91d14277c0db8f598fef

[BUGFIX] Publishable nodes count not context aware

The total count of unpublished changes does not take context in account leading to several problems, e.g. not being able to mark dirty pages when using content dimensions.

Fixes: #NEOS-103

[BUGFIX] Content cache is not domain specific

The content cache does not take the visited domain into account. This leads to problems when multiple domains point to the same site node. The first domain used while accessing a node will be used for generating the cache entries, and will be served for subsequent requests even if those originates from a different domain. This is a problem as it would redirect the user to a different domain, and can even break AJAX requests in the Neos backend as they will be blocked by browser policies as being cross-domain requests.

[BUGFIX] Discard all operation must reload the page tree

Fixes: #NEOS-55

[TASK] Fix typo in comment for method generateUriForNode

[BUGFIX] New nodes not included in publishable node count

After creating new content elements rendered through AJAX the publishable node count doesn’t regard the new nodes as publishable because the attributes doesn’t contain the workspace due to the VIE entity not having it’s template for getting the custom attributes when needed

Fixes: #NEOS-44

[BUGFIX] File upload doesn’t work without global jQuery

There was a missing RequireJS dependency to jQuery that causes the global jQuery instance to be used (if available).

[TASK] Update translations from translation tool

[TASK] Clean up docblock in NodeWrapping exception handler

[BUGFIX] Negative entryLevel renders wrong menu

When using a negative entryLevel on a Menu, the rendered menu renders “one level above” the expected.

This is caused by calculateNodeDepthFromRelativeLevel() returning a 0 based result in certain cases.

[TASK] Update translations from translation tool

[TASK] Rework the NodeTypeService to cache the NodeTypeSchema

This change makes sure the NodeTypeService will always directly returning the schema without doing a separate ajax request to the server with a superType filter on the NodeTypeSchema.

[TASK] Ext.Direct replacement

This change removes the dependency to the TYPO3.ExtJS package. It replaces the usage of the global ExtDirect controllers and uses instances of the HttpClient which should from now on be used for server communication.

The HttpClient handling uses Ember.Deferred. Also the usages of $.Deferred are replaced by Ember.Deferred.

This change will be the basis for more refactoring in the server side services and JavaScript code, but is already a good improvement.

[TASK] Update translations from translation tool

[FEATURE] Node type switching support

This patch adds a new select box in the Inspector for node types based on TYPO3.Neos:Content and TYPO3.Neos:Document to allow changing the current node type.

[BUGFIX] Discarding changes does not flush TS content cache

When changes in a workspace are discarded the TS content cache is not flushed because the discard operation does a direct removal of NodeData instances.

[BUGFIX] Transparent text for editing titles in node tree

When editing titles in the node tree the text color of the input field is blue for the current page and transparent for other pages.

[FEATURE] allow to set dimension values in URL if not in live workspace

As preparation for a translation user interface, we need the ability to set dimension values (like “locale”) in the URI, such that it can be set like:


This change allows to set the dimension-values in the URI if not in live workspace.

This is not yet integrated into the LocalizedFrontendNodeRoutePartHandler.

Additionally, removed a leftover conversion from UUID to nodes when generating URIs.

[BUGFIX] Select box editor values inaccessible in inspector

If a select box editor has options that are longer than the available height in the inspector they are inaccessible.

Also removes the mouse scroll binding that makes it impossible to scroll the inspector down when after scrolling the options to the bottom.

[TASK] Grunt concat inconsistent with library file

The NProgress source file doesn’t match the current preprocessed file, this change just updates with the output from grunt concat.

[FEATURE] Localized node routing and consistent use of context path

This change adds a LocalizedFrontendNodeRoutePartHandler that can be configured for sites using localization. A new strategy for getting the locales dimension values from a URI segement is added with ContentDimensionPresetSourceInterface and a Settings based implementation.

For consistent use of content dimensions in nodes, several parts of Neos are updated to use the context path consistently.

Controllers and services in Neos are updated to use the new methods in the ContextInterface instead of directly accessing the node data through NodeDataRepository.

How to use

In order to use the localized routing, the following needs to be inserted to Objects.yaml:

  className: TYPO3\\Neos\\Routing\\LocalizedFrontendNodeRoutePartHandler

Furthermore, a “locale” dimension must be configured, e.g. by using the following Settings.yaml:

        default: mul_ZZ

After that, the site must be re-imported from XML.

This must be merged together with the corresponding changes in the TYPO3CR package.

[TASK] Make use of TYPO3.TYPO3CR PublishingService

Adjust to change If13788febbf94a905080daea749b6d8bad50a931 where the package is made independent of TYPO3.Neos, allowing the default publishing service to be replaced using Objects.yaml

[TASK] Update CodeMirror from version 2 to 3

Also fixes and improves various styling.

[TASK] remove unused TypoScript for Raw Content Mode

[TASK] Update translations from translation tool

[BUGFIX] Fix product-name in ValidationErrors.xlf

[TASK] Update translations from translation tool

[BUGFIX] add missing property initialization

For testing edit for example the node title more than once in the inspector and the title in the trees should also be actualized.

[FEATURE] Prune a single site on command line

Introduces the new argument site-node-name for the site prune command to prune a single site based on the root node name. Will clear all nodes and domains for this site as well as the site object.

[FEATURE] Recursive node type and identifier support in FindOperation

Adds support for finding a node by its identifier within the node context by using the syntax:


Adds support for finding all nodes of a specific node type inside the scope of the node context using the syntax:

${q(site).find('[instanceof TYPO3.Neos.NodeTypes:Text]')}

Depends on I08b957467eea91f52cc6f2fea71ab45c797e4a8f

[BUGFIX] Fix wrong publishable node counts with custom rel=”x” markup

The VIE library that is used to parse entities via RDFa returns entities also for every “rel” attribute that is used to mark a relation to other entities in RDFa (see http://www.w3.org/TR/rdfa-syntax/#A-rel).

The check for entities outside the “live” workspace did not check if the entity attributes contain a workspace at all and just returned true for unknown entities.

[BUGFIX] improve documentation for PluginViews

[TASK] Clarify documentation for nodePublished signal


[TASK] Mark migration as merged

This commit marks some migrations as merged that are not needed on this package. This speeds up core:migrate and avoids potential errors.

[BUGFIX] Adjust remaining code migration identifier

This is another follow-up for I3dc57f55ba052bee2399ba5b97e5f985fd0a4e3a that fixes the identifier for a code migration. Besides this contains the corresponding “Migration” footers so that migrations won’t be applied again.

Related: FLOW-110

[BUGFIX] Adjust code migration identifier pattern to contain the full timestamp

Previously code migrations are expected to have a class name with the pattern Version<YYYYMMDDhhmm> and the unique identifier was determined extracting the last 12 characters of the class name (which are expected to be the timestamp).

This change adjusts existing code migrations to use the full timestamp in order to establish the new guideline (note: those migrations still return the old identifier so that they won’t be applied again with a new identifier).

Related: FLOW-110

[BUGFIX] Adjust remaining code migration identifier

This is a follow-up for I3dc57f55ba052bee2399ba5b97e5f985fd0a4e3a that adjusts a remaining code migration that has been left out in the previous commit.

Related: FLOW-110

[TASK] Adjust HtmlEditor to CodeEditor

Related: NEOS-379

[!!!][TASK] Hide document layout properties by default

Since many websites won’t use the layout features, it’s disabled by default but still easily available by setting the inspector group for the properties.

If you rely on these properties, adjust your node type configuration by setting the group on the two layout properties:

          group: 'layout'
          group: 'layout'

(cherry picked from commit 1e0b3112416e53bf16a365e2946c6b39be02e514)

[TASK] Update composer manifest

See https://ci.neos.typo3.org/job/typo3-neos-branch/4/

[!!!][TASK] Change default inline editing options

Disables the underline tag as well as sub- and super script tags by default. This is done since their usage is not common enough to have as defaults.

Additionally a new del (strikethrough) tag option is added, but disabled for easy configuration reference.

Confirmed by other editors like medium.com, squarespace, CKEditor and TinyMCE.

[!!!][TASK] Use strong and em instead of b and i as default

Might be breaking if relying on non-native browser styling of b and i tags.

[TASK] Use different icon for Headline to distinguish from Text

[BUGFIX] Fix a spelling error in NodeTypes.Content.yaml

Resolves: NEOS-503

[BUGFIX] Menu item attributes should have access to item in context

This change updates the Fluid template for menu rendering to pass the item variable to the attributes rendering.

Resolves: NEOS-276

[FEATURE] Manual node selection in Menu element

This change allows manual selection of reference nodes in the menu node type.

Resolves: NEOS-371

[TASK] Introduce mixins to avoid illogical inheritance

Introduces new reusable mixins to use for building node types. Additonally the inheritance chain is altered so TextWithImage no longer super types Text and Image.

The following mixins are introduced:

  • TYPO3.Neos.NodeTypes:TitleMixin
  • TYPO3.Neos.NodeTypes:TextMixin
  • TYPO3.Neos.NodeTypes:ImageMixin
  • TYPO3.Neos.NodeTypes:ImageCaptionMixin
  • TYPO3.Neos.NodeTypes:ImageAlignmentMixin
  • TYPO3.Neos.NodeTypes:LinkMixin
  • TYPO3.Neos.NodeTypes:ContentImageMixin

Resolves: NEOS-382 Related: NEOS-239

[TASK] Replace dummy image for image elements with SVG

[BUGFIX] Incorrect indentation for document properties

[TASK] Swap access check with workspace check

Change I038acef327dea63393f1fe4925c6746582265d30 added a new template.

This change inverts a check for the workspace being not the live workspace and for access to the TYPO3_Neos_Backend_GeneralAccess resource.

See Ibe30042ec079ececf7441295dd21ffd9b0259760 for more details.

Related: NEOS-337

[TASK] Add default settings for node type position

This change adds setting for position to node types that appear in the insert new panels so that they have a default sorting.

[FEATURE] Add new content element for inserting records

Add a new content element for inserting one or more records from either the same page or another page as a reference which then make editing possible from both locations.

Resolves: NEOS-337

[BUGFIX] Avoid exception when rendering new asset list element

A freshly created asset list element contains no assets array, thus a foreach triggers a notice throwing an exception. This change fixes that by checking for the assets value being an array before using it.

Resolves: NEOS-229

[TASK] Work around Image serialize bug

This change adds a workaround typoscript object for the AssetList node type that prevents the related assets from being serialized during the site import.

Related: NEOS-121

[TASK] Remove obsolete “priority” from NodeTypes configuration

Replaces an occurrence of the deprecated “priority” setting by “position” in NodeTypes.Content.yaml.

[TASK] Update to use TYPO3.Neos:ConvertUris

This change updates the TypoScript to use the TYPO3.Neos:ConvertUris TypoScriptObject which is now introduced to handle node:// and asset:// links.

Related: NEOS-20

[FEATURE] Add asset list node type

This change adds a new AssetList node type that allows to select multiple assets and renders them as a list of links to the files.

[TASK] Split node types configuration into documents and content

Related: NEOS-72


[TASK] Adjust Sites.xml template to new format

With support for content dimensions the XML format has been adjusted. This change updates the template used to kickstart sites to that new format.

The indentation is changed from tabs to spaces, as the site export uses spaces to indent as well.

Related: NEOS-166 Related: NEOS-158

[TASK] Update composer manifest

See https://ci.neos.typo3.org/job/typo3-neos-branch/4/

[TASK] Kickstarter should use the proper TypoScript path

Create the same folder structure for TypoScript in all packages.

Related: NEOS-390

[TASK] Update page TypoScript to match best practice

The page TypoScript declaration needs to use the correct property for head javascripts. The includes also had to be declared as an Array property instead of overriding the complete “javascripts” definition for further extension.

This change additionally adds the body javascripts as an additional section to the template for an easier start for the integrator.

[TASK] No namespace include in autogenerated TypoScript

The namespace include in the generated TypoScript is not saving much typing and will just confuse beginners, therefor it is removed.


[BUGFIX] Allow importing/exporting DateTime properties

Fixes: NEOS-727

(cherry picked from commit 095cbe9e3aab5e70f23fc012cb6cde49b8f87e8c)

[BUGFIX] Adjust code migration identifier pattern to contain the full timestamp

Previously code migrations are expected to have a class name with the pattern Version<YYYYMMDDhhmm> and the unique identifier was determined extracting the last 12 characters of the class name (which are expected to be the timestamp).

This change adjusts existing code migrations to return the old identifier so that they won’t be applied again.

Related: FLOW-110

[TASK] Don’t flush the complete routing cache for moved nodes

With Ic131d828f491b8559d93647625298a5eccaeb131 only routing cache entries for related nodes will be flushed.

Related: NEOS-296

[TASK] Type cast integer properties to actual integers

Related: NEOS-419

[BUGFIX] Node type migration filter’s withSubTypes option broken

The node type node migration filter’s `withSubTypes option breaks for unstructured nodes.

[BUGFIX] adoptNode to context with different dimension and workspace

Adopting a node to a different context that will also change the workspace results in wrong dimension values that were persisted by cloning the original NodeData. This change fixes the problem by creating a new NodeData and using similarize. A Behat scenario reproduces the problem.

Fixes: NEOS-651

[TASK] Add current node data to nodePathChanged signal

This extends the signal nodePathChanged in the NodeData class that is triggered whenever the path of a node is changed by adding the changed node data instance as argument.

This is backwards compatible because exceeding arguments will be ignored by the slot.

We currently need this to flush related routing caches only.

Related: NEOS-296

[TASK] Introduce signal for node property changes

This adds a signal nodePropertyChanged to the Node class. The signal is triggered whenever the property of a node is added or changed.

We currently need this signal to flush related routing caches whenever the “uriPathSegment” property of a node is modified.

Related: NEOS-296

[TASK] Add on cascade delete on NodeDimension NodeData property

As a NodeDimension must have a NodeData relation, if we remove the NodeData, we need to remove the NodeDimension. By using on cascade delete, the database can handle this in a performant way.

Resolves: NEOS-531

[!!!][TASK] Mark NodeInterface::getFullLabel deprecated

Currently the NodeLabelGenerator has support for cropping and the method NodeInterface::getFullLabel returns the label of the current node without cropping. For consistancy and flexibility, the cropping should be done in the view. Therefor Node::getLabel() will now return the full label without cropping.

In this change, the method NodeInterface::getFullLabel is marked deprecated since 1.2 but returns the same full label as before that is now also returned by NodeInterface::getLabel.

This change is marked breaking because NodeInterface::getLabel now returns labels of any length so you need to take care to shorten the labels if needed and additionally because NodeInterface::getFullLabel is considered deprecated and the NodeLabelGeneratorInterface no longer mentions the $crop argument.

Resolves: NEOS-441

(cherry picked from commit 0894df29dd18e28e94e9d6ac0c94018e407890a6)

[BUGFIX] Renaming nodes to an existing path is accepted

When a node is renamed CR doesn’t check if the target path already exists. This leads to the unexpected behaviour that all subnodes are basically moved to the already existing node, and the moved node disappears.

This change throws adds an exception to setPath() if the path already exists. Additionally a case where a node is renamed to a previously renamed node is supported.

Fixes: NEOS-591

[TASK] Adjust Behat scenarios for inheritance of node type constraints

The change I4e541185fdfb49a145a09d8a2286e59c518b861e did not update the Behat feature for node type constraints to the new behavior.

Related: NEOS-239

[BUGFIX] UnitTest adapted to change in NodeData::createSingleNodeData

The change I5945de459b8564d67698e189e956ed93664d2ac6 introduced a regression in this UnitTest as the call structure changed.

[BUGFIX] Node type set afterwards leads to race conditions

When creating new node data instances, the node type is set after the initial persisting which can lead to race conditions. Problem is that doctrine executes update statements in specific order. Then when querying the node data repository in the same request the query might fire before the update, causing the new node not to be found.

Fixes: NEOS-355

[BUGFIX] Exclude shadow nodes from unpublished nodes

Publishing a workspace with a moved node in a new ContentCollection left an open change due to a shadow node that overlapped the moved node when getting the unpublished nodes.

This is solved by excluding shadow nodes in the repository method.

Fixes: NEOS-507

[BUGFIX] Renaming nodes is broken

When a node property is set and the node name is changed (node is renamed) a unique constraint occurs since the introduction of the shadow nodes.

This is fixed by considering added nodes (the node is materialized when updating any property) when searching for other node variants to set the node path.

Fixes: NEOS-578

[BUGFIX] Correctly adjust shadow nodes for materialized nodes

Moving nodes in a workspace creates shadow nodes to hide the original version of a live workspace. For some scenarios the shadow node was not created correctly, so that the original node re-appeared.

In order to fix this we have to work around the order of SQL operations that is executed by Doctrine to keep the unique key constraint correct.

Resolves: NEOS-447

[BUGFIX] Method with CompileStatic needs to be called with static

For an effective CompileStatic cache the method needs to be called with “static” to use late static binding instead of calling the original uncached method with “self”.

[FEATURE] Node export / import service with content dimensions support

This change introduces a new export / import service written which allows to programmatically export a TYPO3CR node tree including all of its resources.

For conversion of special property types to and from XML this services uses the property mapper.

Resolves: NEOS-165

[TASK] Remove useless require_once call

[TASK] Add missing PostgreSQL migration

In change I5425ff41fa2ac9e9b240dc4871098573f08492ae a migration for MySQL was added, but the one for PostgreSQL was missing.

Related: NEOS-313

[FEATURE] Introduce plugin functionality for the node:* commands

This extracts the create-missing-childnodes functionality of the node:repair command into a “plugin”. This allows us to introduce further tasks which are executed by node:repair but are implemented in other packages than TYPO3CR.

More specifically we need this feature for being able to generate missing URI path segments for the translated URI functionality in Neos.

Related: NEOS-296

[TASK] Expose isShadowNode method for node

Related: NEOS-389

[BUGFIX] Moving nodes on same level should only apply on user workspace

Fixes a regression where a node was moved in the live workspace when the path of the node did not change (and thus the node was not materialized by setPath).

[!!!][BUGFIX] Consistently move all nodes across dimensions

In order to have a predictable behavior for TYPO3CR when working with different dimensions, moving a node in one dimension should also move the same node in other dimensions consistently. However, a different workspace should not be affected.

Resolves: NEOS-370

[FEATURE] Allow simple search/replace in ChangePropertyValue transformation

This adds simple search/replace to the ChangePropertyValue transformation, so that adjusting existing values becomes possible (as opposed to setting new values).

[FEATURE] Handle properties of type array

Related: NEOS-419

[!!!][TASK] New node label management

Node label generation is moved from NodeData into Node with a few additional changes and improvements.

The NodeLabelGeneratorInterface and DefaultNodeLabelGenerator were renamed to NodeData* and both deprecated.

The new NodeLabelGeneratorInterface now expects a NodeInterface to generate the label with. Default implementation is the ExpressionBasedNodeLabelGenerator that accepts an EEL expression to generate the node label. To make this easy to use the simplest way of configuring an alternative expression is now:

  label: "{q(node).property('someLabelProperty')}"

If you need more complex logic you can still employ an implementation of the NodeLabelGeneratorInterface and configure it like this:

    generatorClass: 'My\\NeosSite\\TYPO3CR\\SomeNodeLabelGenerator'

In the deprecation phase this will also accept implementations of NodeDataLabelGeneratorInterface for backwards compatibility reasons.

The code migration 20140911160326 takes care of changing existing implementations of the old NodeLabelGeneratorInterface to the deprecated NodeDataLabelGeneratorInterface and to change the NodeTypes configuration to the new format.

Resolves: NEOS-257 Resolves: NEOS-399

[BUGFIX] findOneByPathInContext does not respect isRemovedContentShown

[FEATURE] Inheritance for NodeType constraints

Needs documentation, maybe more tests, but should work.

Direct constraints have precendence over inheritance, besides the * constraint. SuperTypes nearer to the actual type have precedence, in case there is a FALSE and TRUE on the same, highest level the FALSE will win.

Resolves: NEOS-239

[FEATURE] Allow advanced default values for properties of type date

This patch makes node date properties support default values like “now”, “+1 day”, “tomorrow”, “next monday” etc.

Resolves: NEOS-172

[BUGFIX] Changing node types uses custom logic for default properties

This patch refactors the NodeService so creation and changes to content nodes uses the same logic for getting default values for properties.

Fixes: NEOS-286

[BUGFIX] Correctly handle node variant fallbacks in workspaces

  • Respect content dimensions before workspace hierarchy when reducing possible node results
  • Create shadow NodeData when moving nodes to handle shine-through nodes correctly, set a reference between the moved node and the shadow node
  • Refactor large parts of the NodeDataRepository for unified querying

Resolves: NEOS-313

[TASK] Move tests from Neos package to TYPO3CR

The move of the ConfigurationContentDimensionsPresetSource from Neos broke a unit test, this showed some of the tests should have been moved as well (see If52b4b570d52c9f39c06ce192421d785e85f54bc).

[!!!][TASK] Unify dimension settings into TYPO3CR

With this change dimension presets are mandatory for dimension configuration in TYPO3CR, only setting the default value is not enough anymore. That makes sure that the TYPO3CR knows about all possible dimension values.

Additionally the ContentDimensionPresetSource service and interface have been moved to TYPO3CR.

Related: If1f56f9a8cab7ba1dff46f7835acf9893ebcb9e9

[TASK] Remove external package dependencies in tests

This change removes the external dependencies to TYPO3.Neos and TYPO3.Neos.NodeTypes and the demo site package for running the tests of TYPO3.TYPO3CR.

Related: NEOS-34

[TASK] Rename node:autocreatechildnodes command to node:repair

This change renames the node:autocreatechildnodes to node:repair and by that creates a command which can perform further “repair” tasks in the future. From a user’s perspective simply running “repair” will likely solve all structural node problems.

Further more, the command controller is moved to the TYPO3CR package and thus consists of two commits: this one which adds the controller to TYPO3CR and a second one which removes it from Neos.

Resolves: NEOS-325

[BUGFIX] Searching node properties works only case sensitive

Search for the given identifier in the repository method findByRelationWithGivenPersistenceIdentifierAndObjectTypeMap should be done case sensitive because case insensitive search won’t work on blob fields in MySQL.

Since case sensitive like was merged in Flow with I53cd80e145eb49bcf8251f0045b9f3ec4fd61105 the feature to prevent deletion of used assets was broken.

[BUGFIX] Auto created childNodes can not be copied

When a node type has auto created child nodes that are not explicitly allowed in a constraint the node creation is still allowed. As copying a node is a similar operation we should also allow those nodes to be created on copy operations.

This change allows copied auto created child nodes to be created even if the node type constraints would not allow the node type if the node would not be auto created.

Besides fixing the copy command the change adds a test to verify that moving node types with similar constraints on auto created child nodes is possible.

Fixes: NEOS-319

[BUGFIX] RenameDimension transformation should not delete all

The RenameDimension transformation was previously deleting all existing NodeDimensions therefor removing all nodes from existence for any API methods. The nodes itself still existed. This change fixes the behavior to work as expected.

Revert “[TASK] Minor comment changes to Node class”

This reverts commit 4c9e688356e4d840008defd009e4bf23dc2503a2.

[TASK] Minor comment changes to Node class

[TASK] Make Behat context extendable

This change adds a private getter for the publishing service in the step definition trait to allow the trait to be reused by the Neos Behat tests where it can return the Publishing service available in Neos.

For the master branch this change applies to the trait, for the 1.1 branch the method has to be added to the FeatureContext as the trait didn’t yet exist.

[BUGFIX] UnpublishedNodes includes root node in PublishingService

The getUnpublishedNodes method in the PublishingService shouldn’t include the root node, since it’s not publishable.

Besides that the getUnpublishedNodes() method now returns 0 if it’s called for the live workspace as this workspace will never have unpublished nodes.

[TASK] Replace occurrences of the “languages” dimension with “language”

This change adjusts code examples in comments and tests to follow the renaming of the “languages” content dimension to “language” in Neos.

Related: NEOS-211

[BUGFIX] Default value support for internal node data properties

This fixes setting default values for internal node data (_*) properties. Before setting a default value meant that it would end up being set in the property array with the prefixed key never to be used again.

Fixes: NEOS-169

[FEATURE] Custom Node implementations

To allow custom build-in functionality for NodeTypes it is now possible to configure a class for a NodeType. All nodes of this type will then be instances of the given class. Note that the class HAS TO implement from NodeInterface and currently should extend the default Node. The configuration can look like this:

  class: 'My\\Custom\\TYPO3CR\\NodeTypeWithClass'

Resolves: NEOS-298

[TASK] Allow all child nodes by default if nothing is configured

When no constraints have been configured the default behavior is to disallow all child nodes. Instead all child nodes are allowed if nothing is configured, since the feature should only take affect in intentionally used.

Resolves: NEOS-321

[BUGFIX] Publishable nodes in Neos UI uses wrong dimensions

This fixes a bug in the TYPO3CR Publishing Service which did not consider content dimensions when retrieving the currently unpublished nodes.

See also the related change in TYPO3.Neos (see topic NEOS-308).

Related: NEOS-308

[TASK] Code cleanup in node type converter

[BUGFIX] ContextFactory does not check dimension configuration

The ContextFactory should check if the given dimension values are arrays as specified or something else to prevent non meaningful error messages. The case now produces an exception with a clear error message stating that the dimension configuration is wrong.

Fixes: NEOS-280

[BUGFIX] pathExists anonymous function uses $this

The query without authorization checks should not use this in the anonymous function scope. This fixes a bug introduced with the mentioned related change, that didn’t happen during testing.

Related: Ic05fd961da353f3166e17f11e1744431ed272433

[TASK] Make error message a tiny bit more helpful

When copying a node fails due to node type constraints, express that reason to help the developer.

[TASK] Make properties optional in ContextFactory->create()

Since there are defaults and one could already pass an empty array to ContextFactory->create() this change makes the $contextProperties argument optional.

[BUGFIX] Remove removed nodes without existing node when publishing

Nodes that are created and removed in a user workspace were not removed when publishing them to the live workspace. This can have sideeffects in the Neos backend where removed nodes are rendered and causes problems where a changed or removed node type throws exceptions.

This change fixes the problem and provides a migration to remove any of these removed nodes that stayed in the content repository.

Run the following node migration to remove published nodes that are removed:

./flow node:migrate 20140708120530

Fixes: NEOS-236

[BUGFIX] ContextFactory: PHP throws notice if dimension doesn’t exist

This change fixes the error handling within ContextFactory which didn’t throw an exception on an invalid dimension name because of a wrongly built exception message.

[FEATURE] NodeType constraints in TYPO3CR

Introduces constraint configurations for Nodes. Currently allowing/disallowing of NodeTypes is implemented for direct child nodes and for grand-child nodes that are auto created.

An example configuration looks like this:

      'TYPO3.Neos:ContentCollection': TRUE

This whitelists ‘TYPO3.Neos:ContentCollection’ as only possible child node type for ‘TYPO3.Neos.NodeTypes:Column’.

Using the Node API will result in a NodeConstraintException if the operation cannot be completed due to configured constraints.

In order to understand the full API possibilities, please look at the ChildNodeConstraints.feature which is part of this commit.

Related: NEOS-34

[BUGFIX] Danish/Norwegian letters converted incorrect in node name

The Danish/Norwegian letters “Ø/Å” are converted incorrect when the node title is transliterated into a valid node name. Instead of being converted to “oe/aa” they are just converted into “o/a”.

Fixes: NEOS-170

[TASK] Support time and time zone offset in date properties

Use the \DateTime::W3C format for converting dates for date properties in the node converter, which supports time and time zone offsets.

The time zone is then converted to the servers default time zone to match the systems time zone.

Related: NEOS-203

[TASK] Behat: Move step definitions into re-usable trait

This change moves the Behat step definitions of this package’s feature context to a trait which can be used in other package’s feature contexts (e.g. in TYPO3.Neos).

I favoured a trait over Behat’s sub context feature because the latter would only provide the step definitions per se and not the other useful functions. Another reason was that the step definitions rely on Flow’s object manager - a dependency which I wasn’t able to implement as nicely as with traits.

Related: NEOS-167

[BUGFIX] Behat Feature works with PHP 5.3

Array Access to an array return from a function is not allowed in PHP 5.3. It was replaced by a backwards compatible access to the value.

[TASK] Prevent entity constraints in pathExists() method

[BUGFIX] createVariantForContext() fails if workspace differs from source

This change fixes a bug with Node::createVariantForContext() which fails if the specified target workspace differs from the workspace of the reference node’s workspace.

The root cause for this bug is that Node Data objects have been update()d on every modification regardless if they are new or not. Since most of the other operations were typically only used on nodes which have been persisted previously, the bug did not appear. createVariantForContext() however will create a clone of the reference node if the workspace differs which causes Repository->update() to fail.

This change also contains some small cosmetic changes and doc comment improvements related to content dimensions.

[TASK] Skip failing functional test on SQLite

Followup to I56f8e922f84c00d9402837591d308583f7069b3f, the tweak is included in the change for the 1.1 branch directly.

[TASK] Method to find entity relations in Node properties

Needed to detect linked media assets in nodes. But useful to find all kinds of related entities.

[TASK] Method to find if a given path exists anywhere in the CR

[BUGFIX] Fix three risky unit tests

[BUGFIX] Copy into the correct reference node

A copyAfter() and copyBefore() call will currently first copy the node into the reference node and then move after it in a second step. This is not only resource inefficient but also error prone.

[TASK] Adjust NodeType schema to recent changes

Validating the NodeType configuration shows some errors due to the recently introduced “validation” key. This adjusts the NodeType YAML schema accordingly.

[BUGFIX] Nodes copied recursive under circumstances

The copy of a node leads to recursive copy. Result is f.e. and endless copy of an image on itself. This happens because a comparison of objects fails. I don’t know exactly wich property is not equal, but i think it is the FirstLevelNodeCache, wich is a part of the node context. I guess, this cache changed during runtime in some circumstances. So the check is done now by comparison of the node->getIdendifier().

[BUGFIX] Remove var_dump() from RenameDimension

no comment

[TASK] Remove support for “locale” context property

In a previous change, some backwards compatible handling of the “locale” context property was introduced which set the “locales” content dimension value accordingly if a “locale” context property was found.

This change removes support for this old context property and silently ignores it if present.

Background: although the “locale” context property was allowed previously it never had any effect in terms of Neos’ or Flow’s behaviour. Supporting the “locale” context property like we did before this change would additionally bind TYPO3CR to the Neos content dimension for languages.

Also provides a Node migration to move from locales to languages to keep existing translations from previous betas:

./flow node:migrate 20140516221523

Related: NEOS-116

[TASK] Adjust to renaming of “locales” dimension to “languages”

Event though TYPO3CR does not specifically support or even know about the “languages” content dimension in Neos, tests do mention this dimension for testing purposes. Since “locales” has been renamed to “languages” in Neos, all occurrences of “locales” have been replaced by “languages” by this change.

[BUGFIX] Fix findNodeDataInTargetWorkspace to work with shine-through nodes

This change fixes a bug which was the cause that created multiple new nodes of node variants instead of updating / removing the existing ones. The main issue here was, that the “findNodeDataInTargetWorkspace” method didn’t take the real node dimensions into account which can be different from the context dimensions that that method used so far.

[BUGFIX] Make the Behavior test more compatible to custom Setups

Currently the “iShouldHaveTheFollowingNodes” asserts the properties to be exactly as specified. Problem is that this can cause the Tests to fail when custom properties with defaults are added by local Sitepackages. This change alters that test to assert each specified property to be equal ignoring additional existing properties.

[FEATURE] Add FileMonitor to watch changes in NodeTypes.yaml

Custom FileMonitor to watch for changes in NodeTypes used to flush the Neos Content Cache.

Needs Id4aebb951f27b7befe1c1be81301b12679440bfc in TYPO3.Flow

[FEATURE] Migration to dimensions

Adjusts NodeData to actually allow changing the dimensions. Adds Migration Filter for DimensionValues and a Transformation to SetDimensions. With those you can migrate from a state without dimensions to the default dimension values and also from any specific dimension set to another set. Which is useful to change the default language at some point.

The Node Migration added is to move a site from a state without dimensions to configured default dimension values.

[TASK] Add documentation to NodeDataRepository about internal use

The internal use of that class was not documented correctly.

[BUGFIX] Node references throws exception during mapping

If44540ce476c6c85f4665ab3c4bf938fa0cf7d33 introduced a regression caused by trying to parse all node property types, causing InvalidTypeException for unknown types like “reference” and “references”.

[BUGFIX] Adopted node ignores dimensions within context

When adopting a node that already exists in the context it’s returned even if the node dimensions don’t match the context target dimensions. Same happens for nodes that can be retrieved through fallback dimensions in another context. Instead the node should be adopted to the specific target dimensions of the context or an existing node that matches the target dimension values should be reused.

[TASK] Add test for node createVariantForContext

[FEATURE] Support array with element type for node properties

This change adds support for arrays with element type (e.g. array<TYPO3\Media\Domain\Model\Asset>) as a node property type.

This is needed for multi-valued node properties (AssetEditor in Neos).

[BUGFIX] Node factory ignores dimensions for internal cache

When creating new nodes from node data the node factory ignores the dimension values of the node data causing it to return cached nodes with different dimension values.

[BUGFIX] Show master plugins in PluginView inspector

The integration of “content dimensions” (implemented with I96dd82bc2b9861508d180cc265da0e22e8ee56f3) introduced a regression that prevents the “master plugin” from being displayed in the PluginView inspector.

This change fixes this by adjusting NodeDataRepository::findByParentAndNodeTypeRecursively() to the modified signatures of the lower level methods.

[TASK] Use caching when adoptNode creates new variants

[TASK] Use caching for getNodesOnPath in context

[!!!][TASK] Node Migrations work on NodeData

Node Migrations now work on NodeData directly and do not take Context into consideration anymore.

Another change will follow to filter by workspace if that is really needed for a migration.

This is considered breaking if you added your own Transformations or Filters for Node Migrations or rely on them to only apply to a specific workspace.

Resolves: NEOS-43

[BUGFIX] Revert automatic child node cleanup on publish

With I0119e356d415f5d1d881a09fdcb6aedba97a0d46 a regression was introduced that could lead to loosing content on publishing of ContentCollections due to the automatic cleanup of child nodes.

The automatic removal was removed, child nodes are no longer cleaned up after switchting the node type. This problem will be solved in a later commit.

Fixes: NEOS-94

[BUGFIX] Use generated node identifier for stable child node creation

The change I71e9ae994c361d72804f49a3080f6706e8e62e82 introduced a regression when creating multiple nodes without an identifier that are nested and have the same child node names. The identifier of a node created with “createNode” and no given identifier will be always the same for all child-nodes.

Fixes: NEOS-90

[BUGFIX] Child nodes that are auto-created have to be materialized

If a node is adopted to a different context or materialized to a different content dimension the child nodes that are auto-created were not correctly processed.

Additionally fix a problem with auto-created child nodes and multiple dimensions through createNode() where the child nodes hat different identifiers.

[BUGFIX] Child nodes are not deleted when a node is deleted

This moves deletion of child nodes of a node from NodeData::remove() to Node::remove() so that all child nodes get materialized into current workspace and marked for deletion.

Fixes: #NEOS-49

[BUGFIX] Consistent generation of dimension hash

Removes some duplicated code for generating the dimension values and moves the generation of the hash into the same method that generates the array of dimension values to have them in sync all the time. Additionally sorts the dimension array by key to have consistent hashes generated at all times.

[BUGFIX] isNodeOfType() uses method call on string

The isOfNodeType() method on NodeService accepted strings per docblock but inside the argument was handled like a NodeType instance. Now NodeType is used and requested.

[FEATURE] Allow split source for node types configuration

Resolves: NEOS-72

[FEATURE] Node Type Switching

Adds NodeType switching support to the NodeConverter. The NodeConverter now supports:

  • Changing the NodeType of a given Node
  • Creating missing child nodes
  • Setting node default values

Changing the NodeType is not allowed in live workspace. The invalid properties / child nodes are not removed, to allow the use to restore the previous NodeType without data lost. The Node will be cleaned up during publishing.

This patch also makes sure care that a published node contains only valid properties and child nodes. Currently all child nodes based on TYPO3.Neos:Document are never removed. This means that if the child node based on TYPO3.Neos:Document is declared in the childNodes section of NodeType, it will not be removed.

[FEATURE] Add discard methods to the PublishingService

Changes could be published but not discarded from user workspaces. Now the PublishingService had discardNode() and discardNodes() for that purpose.

[TASK] Fix doc block for NodeDataRepository findOneByPathInContext

[TASK] code cleanup in NodeConverter and NodeTemplateConverter

[BUGFIX] followup to Idf348e02bb581ffde1db849375c30088b82de1bb, fixing a fatal error

[BUGFIX] support multiple-value dimensions

Before this change, this was not supported in the regex which parses context node paths.

[TASK] refactored dimension value extraction

[TASK] add functional tests for NodeConverter

Related: NEOS-35

[FEATURE] Remove dependency on TYPO3.Neos PublishingService

Remove dependency to publishing service in TYPO3.Neos by providing a PublishingServiceInterface that can be overwritten in Objects.yaml

Also introduce a generic publishing service for easy extending of another publishing mechanisms.

[BUGFIX] Dimension support in NodeConverter and removal of UUID string support

Because UUID strings do not carry dimension information, we cannot support them anymore.

[TASK] Use DQL in NodeDataRepository::renumberIndexesInLevel

This patch improve performance if a lots of node are in the current level by using DQL for the select and the update operation.

[BUGFIX] The context path of a node should always contain the workspace name

This is a bugfix for content dimensions.

[TASK] Introduce removeAllInPath

To be able to remove all nodes inside a certain path a new low level method was introduced that accepts a node path and will remove all NodeData entries below that path (but not the node with the exact path). This method does not care about workspaces or dimensions it will directly delete all matching NodeData entries.

[BUGFIX] fix boolean property conversion when not using ExtDirect

There are not only _hidden and _deleted as boolean properties, but they can be arbitrary. That’s why this conversion must be done for all conversions in the schema.

This bug was not triggered yet because the change which gets rid of ExtDirect was not yet merged.

[FEATURE] Add recursive flag to findByParentAndNodeTypeInContext

Add a recursive flag to the findByParentAndNodeTypeInContext, which findByParentAndNodeType supports.

[TASK] Fix various CGL violations

[BUGFIX] PostgreSQL migration error: “dimensionshash” contains null

This fixes an error while doctrine:migrate on a PostgreSQL database when adding a NOT NULL column to table typo3_typo3cr_domain_model_nodedata already having rows in it.

[TASK] Clarify documentation for NodePublishing signals


[TASK] Mark migration as merged

This commit marks some migrations as merged that are not needed on this package. This speeds up core:migrate and avoids potential errors.

[BUGFIX] Adjust code migration identifier pattern to contain the full timestamp

Previously code migrations are expected to have a class name with the pattern Version<YYYYMMDDhhmm> and the unique identifier was determined extracting the last 12 characters of the class name (which are expected to be the timestamp).

This change adjusts existing code migrations to return the old identifier so that they won’t be applied again.

Related: FLOW-110

[TASK] Wrap HTML message exception handler title

Related: NEOS-344

[FEATURE] TypoScript prototype to handle HTTP headers and response status

This change add a new TypoScript prototype that can be used to generate a standard HTTP head response:

prototype(TYPO3.TypoScript:Http.ResponseHead) {
    statusCode = 200
    headers {
            Content-Type = "application/json"

This change also introduces another prototype TYPO3.TypoScript:Http.Message which extends TYPO3.TypoScript:Array and makes it easier to work with HTTP messages. It is mostly a base prototype to render documents that support setting HTTP header data.

Resolves: NEOS-449

[FEATURE] Implement TypoScript inclusion globbing

The “include: ” statement of TypoScript now allows normal and recursive file globbing.

  • * – includes all of the ts2 files on that level
  • **/* – includes all of the ts2 files recursively starting with that level.

This works with relative and resource:// links. Recursion is avoided by not allowing to include the same .ts2 file as the one from which it was called.

Example Root.ts2:

# Include all .ts2 files in NodeTypes and it's subfolders recursively
include: NodeTypes/**/*

Resolves: NEOS-440

[!!!][TASK] Adapt TypoScript path patterns

We want to have the same folder structure for TypoScript in all packages.

Related: NEOS-390

[BUGFIX] Uncached context does not work with Doctrine Proxy

Realted: NEOS-448

[FEATURE] @if meta property for conditional evaluation of paths

Introduce a new @if meta property that can be used to add conditions to paths. If one of these conditions (simple value, expression or object) evaluates to FALSE, the path is evaluated to NULL.

The @if meta property can be applied to all TypoScript paths.


example {
        @if.isSpecial = ${q(node).property('special')}

Resolves: NEOS-109

[BUGFIX] Ignore empty tags in @cache.entryTags configuration

When unsetting a tag in TypoScript, the resulting value will be an empty (null) tag. This is not allowed in the caching framework which will throw an exception for this case.

This change ignores empty tag values so unsetting a key in the entryTags configuration is possible.

[!!!][TASK] Change handling of empty, false and null attribute values

This change updates the rendering of boolean and null attribute values. A boolean value is rendered as an empty attribute or no attribute at all. A null or empty string attribute value will be rendered as an empty attribute (HTML5 syntax).

This will be breaking if code relied on the previous conversion of values or the output is used for XML, where the new meta property @allowEmpty should be used to disable empty attributes.

Resolves: NEOS-275

[TASK] Allow configuring exceptionHandlers on any TypoScript object

Without this change the configured exceptionHandler is only used on the root TypoScript object that is rendered by the Runtime::render() method. Now every configured exceptionHandler is taken into account.

For this to work the change introduces a differentation between “inner” (triggered by Runtime::evaluateInternal()) and “outer” (triggered by Runtime::render()) exception handling to have different default handlers. the default “inner” handler is the new “BubblingHandler” that wraps the Exception in a RuntimeException and so bubbles it up until handled by another handler. That way all “inner” Exceptions are at some point handled by the “outer” Exception handler as before so in most cases behavior is unchanged. Behavior is changed in cases where an inner exceptionHandler is configured via TypoScript (for example the TYPO3.TypoScript:ResourceUri prototype) that was ignored without this change.

Additionally handling an exception that is not handled by an “AbsorbingHandler” will disable caching (which was before only done in the “outer” exception handling in Runtime::render()).

Resolves: NEOS-326

[BUGFIX] Underscore is not allowed as a TypoScript path value

Furthermore, fixed some comment indentations in the Parser

[TASK] Add JsonHelper to default context for TypoScript

The newly added JsonHelper is available as Json in TypoScript contexts now.

Related: I042025b5515bda19d09b5ddcab3c46bb3a2f61d9

[FEATURE] Allow direct evaluation of Matcher renderer

with the new configuration setting “renderer” the matcher can now directly evaluate TypoScript as return value. This setting has precedence over the renderPath and type settings.


root {
  fooMatcher {
    condition = ${TRUE}
    renderer = ${q(node).property('title')}

[BUGFIX] TypoScriptRuntime should not intercept Login redirect

This changes changes the TypoScript Runtime to rethrow any Security exception it encounters. Without this the login redirect does not work.

[BUGFIX] Request in context cannot be serialized

The request in the TypoScript context cannot be serialized for uncached segments. This means an uncached TypoScript cannot use the request. To have the current Request at any time in the context it is injected together with the default context variables.

Additionally default context objects now come from the object manager so singleton scope objects are correctly object managed.

[TASK] Apply migration TYPO3.Neos.NodeTypes-201309111655

This is a tweaked version of the TYPO3.Neos.NodeTypes-201309111655 code migration that break unit tests when applied without changes.

[BUGFIX] Context-specific prototype inheritance should work

Let’s imagine you have the following TypoScript:

prototype(A).value = "Foo"
prototype(B) < prototype(A)

myValue.prototype(A).value = "Bar"
myvalue.element = B

When rendering myvalue/element, we’d expect the “value” property to evaluate to “Bar”, because it has been overridden inside myvalue.*

Without this change, this did not work because the prototype inheritance hierarchy was flattened on toplevel; and not recursively at runtime.

Fixes: NEOS-59

[TASK] Improve exception handling in TypoScript rendering

If Fluid object access is used to render TypoScript objects (which is the default of the generated template in the site kickstarter) and an exception occurs during rendering, the rendered message should be at the correct position in the template.

This change adds tests to verify the correct output of exception messages in different scenarios.

[TASK] Refactor cache functionality in Runtime

Add a new class RuntimeContentCache that serves as the integration point between the TypoScript Runtime and the ContentCache. The class holds all runtime-global state and makes the Runtime implementation much easier to follow.

[TASK] Support configurable cache lifetime through TypoScript

Add a @cache.maximumLifetime configuration for _every_ path in TypoScript. A cached segment will use the minimum of the maximumLifetime values (from embedded cache segments and itself).

All cached segments have an independent cache entry lifetime.

This allows to render time dependent data (like nodes with hiddenAfterDateTime or hiddenBeforeDateTime) using additional helpers to find the relevant lifetimes.

Resolves: NEOS-68

[TASK] Flush content cache in more occasions

At the moment we clear the content cache if TypoScript, Fluid or NodeTypes.yaml changes. This covers most cases, but not all.

This change also clears the content cache if settings, translations or PHP code changes. This makes sure that the content cache does not cause problems for people working in PHP plugins / TypoScript objects or translation files.

[FEATURE] Re-throw unchanged exception in ThrowingHandler

To get accurate TypoScript paths for the original exception, the ThrowingHandler should just throw the given exception without unwrapping a TypoScript RuntimeException.

Since there could now be a RuntimeException at the outer TypoScriptView render call, we need to catch it and unwrap it there.

The system logger calls are moved to the exception handlers to save some calls since duplicated exceptions would show up for each instance of a ThrowingHandler.

[FEATURE] Add FileMonitor for TypoScript and Cache clearing

Custom FileMonitor to watch changes in TypoScript files. Adds flushing of the content cache when either NodeTypes, TypoScript or Template files are changed.

Needs: Id4aebb951f27b7befe1c1be81301b12679440bfc in TYPO3.Flow

[TASK] Build entryIdentifier from valid context values by default

This change updates the Runtime to use all valid context values (string, integer, boolean, object implementing CacheAwareInterface) as the default cache identifier values if no “@cache.entryIdentifier” configuration is given.

If the user specified an invalid value in the “@cache.entryIdentifier” configuration an exception will be thrown.

Resolves: NEOS-75

[TASK] improve functional test coverage of TypoScript

[BUGFIX] Remove cache segment markers also if an exception occurred

This removes cache segment markers also if an exception occurred in an inner cached path. This fixes the problem where leftover cache segment markers showed up in the content.

[TASK] Throw an exception if an uncached segment has no context

Currently an uncached TypoScript cache segment without at least one context variable throws a really nasty exception. The user can not understand that the problem came from the cache configuration. This patch adds a proper Exception for this case.

Resolves: NEOS-83

[BUGFIX] Fixes Incompatibility with PHP 5.3

Replaced call to self:: in an anonymous function to prevent PHP 5.3 from throwing a Fatal Error (Cannot access self:: when no class scope is active).

[TASK] Fix various CGL violations

[TASK] Register the TYPO3.Eel MathHelper in the TypoScript EEL context

This change enables the use of MathHelper functions inside TypoScript EEL expressions:

maximumWidth = ${Math.round(1200 / gallery.rows)}

Note that there aren’t so many functions in MathHelper for now, but that will probably change.

[TASK] Disable content caching if an exception occurs

This change disables the content cache in the render() method of the TypoScript runtime if an exception occurred. Previously, error messages might have been cached and thus displayed even if the error does not occur anymore.

While this is not the most graceful or beautiful solution, it solves the problem of cached error messages.

[TASK] Clean up docblocks in core exception handlers

[BUGFIX] TYPO3.TypoScript:UriBuilder uses undefined method

The TYPO3.TypoScript:UriBuilder objects uses getTsRuntime() internally.

This is probably a leftover because it first extended the TemplateImplementation object. This change replaces the call by accessing the tsRuntime property directly.


[TASK] Mark migrations as merged

This commit marks some migrations as merged that are not needed on this package. This speeds up core:migrate and avoids potential errors.

[FEATURE] ImageTag and ImageUri TypoScript objects

Extracts some duplicate code into the ImageViewService and provides TypoScript counterparts of the image and uri.image view helpers.

ImageTag example:

# Create an img tag with alt attribute for 100*100 cropped image
exampleImageTag = TYPO3.Media:ImageTag {
      asset = ${q(node).property('image')}
      maximumWidth = 100
      maximumHeight = 100
      allowCropping = TRUE
      allowUpScaling = TRUE
      attributes.alt = 'Do not forget the alt text'

ImageUri example:

# Create an image URI for 100*100 cropped image
exampleImageUri = TYPO3.Media:ImageUri {
      asset = ${q(node).property('image')}
      maximumWidth = 100
      maximumHeight = 100
      allowCropping = TRUE
      allowUpScaling = TRUE

Resolves: NEOS-491

[TASK] Throw correct exceptions in view helpers

Throw actual view helper exceptions so Fluid can handle them properly.

Additionally adds missing unique exception codes.

[TASK] Optimize the asset repository’s countByTag method

Optimizes the count by tag query by a factor 400-500% by not joining all the subtype tables and tag table on, which doctrines does on its own.

This is needed because when having lots of tags results in long load times for all media browser views where all the tags are displayed. This is due to the count for each tag takes quite some time (16-30 ms), which is a lot when multiplied by 100+.

Fixes: NEOS-642

[TASK] Export identity of images and resources in ArrayConverter

This exports the identity of Images contained in ImageVariants and of Resources in Assets to the target array.

Related: NEOS-158

[BUGFIX] ImageVariant processing instructions ignored for thumbnails

When the getThumbnail method on a image variant is called, the image variant’s processing instructions are ignored.

When creating a thumbnail for a image variant it doesn’t make sense to show the original image’s thumbnail instead, if that is desired that can easily be achieved.

Fixes: NEOS-386

[TASK] Replace assign with assignMultiple in AssetController

This commit replaces the usage of assign with assignMultiple where it is possible in the AssetController.

[FEATURE] Support all assets in ArrayConverter

This makes the ArrayConverter accept all AssetInterface instances and provide basic conversion.

Related: NEOS-166

[TASK] Unify button styling in Media management

The submit button should be blue.

Resolves: NEOS-222

[TASK] Escape caption text in thumbnail view

Fixes: NEOS-237

[TASK] Add support for animated GIF

This change detects if the current image is an animated GIF to process every layer correctly and keep the gif as animated.

Support for animated GIF is not available with the Imagine Gd or Gmagick drivers, you must use Imagick. The driver can be configured in the settings of TYPO3.Imagine package.

Resolves: NEOS-243

[TASK] Update default options, based on recent changes in Imagine

The “quality” option of Imagine library has been renamed to “jpeg_quality” and support for a new “png_compression_level” options has been added.

This patch keeps our existing “quality” settings. This setting is converted internally to the native Imagine options.

This change is related to I63683bc2c4dc77db98a1a53d9541cbd1db1fa45f

Resolves: NEOS-242

[FEATURE] Add Image(Variant) to array type converter

This change adds a TypeConverter to use with the PropertyMapper. It will transform Image and ImageVariant to array and is the counterpart to the Image(Variant)Converter.

[TASK] Trivial tweak to typos in comment and error message

[TASK] Use filename instead of identifier as label for assets

Related: NEOS-233

[BUGFIX] Functional tests use sys_get_temp_dir()

The functional tests use the sys_get_temp_dir() function which causes problems if Flow resides on a network share but PHP temp dir is still set to a local disk.

When this happens PHP will fail to move the file from the local disk to the network storage as this is not supported by PHP.

[BUGFIX] Adjust tests to image size cache

The new ImageService uses an additional API method of the Resource that was not correctly mocked before. Additionally an Exception for resources that are not images is now thrown lazily when the actual image is initialized. The test was adapted to that.

[FEATURE] Add cache for Image size and type

The function getimagesize need to load the file from disk on every call. This patch introduce a new cache to store the height, width and image type based on resource unique hash.

[TASK] Add helper methods for linking to asset support

This change adds filtering assets by search term or tag to the AssetRepository.

Related: #NEOS-20

[BUGFIX] Selection of image in thumbnail view is broken

With the fix for tagging in thumbnail view the selection of assets from inside the Neos inspector was broken.

[BUGFIX] Drag ‘n drop tagging of thumbnails

The identifier can only be found for the list view and not the thumbnail view making it impossible to tag by drag ‘n drop in the thumbnail view.

Also when dragging a thumbnail the A tag is clicked so the link is followed when dropping a thumbnail onto a tag.

Additionally when the A tag is used for dragging it’s very performance requiring, so only dragging the image container improves performance drasticly.


[TASK] Styling adjustments to language menu

[FEATURE] Language menu

[TASK] Re-export Sites.xml with tidy option

This simply is a re-export of the site using the –tidy option to keep the XML more readable.

This got lost with change I862b2b21e7a3da5cb07f825959e02cd08232fea1.

Also some unused resources are removed.

[FEATURE] Turn into a multi-lingual website

This configures a “language” content dimension with some presets and includes an updated Sites.xml export. The translation of the actual content will be part of a separate change.

As Neos 1.2 will only support fallback based translation, all languages are based on a default “en_US” language.

Resolves: NEOS-168

[TASK] Migrate Sites.xml to translatable URIs

Updated the Sites.xml dump using the “node:repair” command.

Related: NEOS-296

[TASK] Simplify NodeTypes TS inclusion

Uses the new TS include globbing to simplify the inclusion of the NodeTypes TS files.

Related: NEOS-440

[TASK] Adjust to layout properties change

(cherry picked from commit b1038d88c55776589bfea2f3866e9b1287ae5517)

[TASK] Adapt after the NodeInterface::getFullLabel removal

Related: NEOS-441

(cherry picked from commit 3d020e5a50b86c62780fb564af1fe2e4d3a4457a)

[BUGFIX] Adjust exported demo site to new shortcut handling

Related: NEOS-375

[TASK] Cleaning up TypoScript folders and namespace usage

All packages should use the same folder structure for typoscript files. For historical reasons this wasn’t the case in some packages like the demo package. This was confusing for many users.

Also a best practise for the namespace usage should be found.

Site specific things can be written much shorter by using a namespace.

Additional packages should be referenced by the whole path it’s easy to find where the objects come from and to share code in snippets for example.

Related: NEOS-390

[BUGFIX] Fix broken Neos tests by allowing Text node types in teaser

This is a workaround to fix broken tests in the Neos package that depend on a teaser ContentCollection with Text nodes.

[TASK] Apply node type constraints to teaser content collection

Uses the new node type constraints to limit the options available when inserting content in the banner content collection.

Resolves: NEOS-235

[TASK] Remove paragraph formatting in headline element

The paragraph formatting in headline element should be removed by default in TYPO3.Neos.NodeType package.

Related: NEOS-415

[TASK] Adjust to configurable formatless pasting

[TASK] Remove unnecessary cache mode configuration for ContentCollection

Depends on I50bc64f3224ef79a5d77e5c9715963515d3d0a02

[TASK] Remove leftover teaser ContentCollections in chapters

The teaser ContentCollection is not an auto created child node for chapters and the export contains leftovers which are not allowed according to the Node Type Constraints

[TASK] Position YouTube content element video properties uppermost

[TASK] Add the homepage to the main menu

This change adds the homepage to the menu to show how this can be done with the following setup:

  • Site root contains homepage content
  • Homepage should be in main menu without using a shortcut so it can have a current state

This is the recommended way to create a menu for this setup since I4c0a92e3bf068b53c5d0286248feb6e8236894a7

[TASK] Add AssetList example element

[TASK] Update exported site (fixes duplicate images)

[FEATURE] Make title inline editable for chapter pages

As an example of using inline properties directly on the page, the page title is turned into an inline editable property of the chapter page. This also demonstrates the placeholder feature.

[TASK] Use text area editor for chapter description

[BUGFIX] Use node full label instead of title for chapter pager

[TASK] Use new BreadcrumbMenu TS object instead of custom template

With the new BreadcrumbMenu TypoScript object in TYPO3.Neos we don’t have to use a custom one for the demo site.

[TASK] Use fluid container width when logged in

Currently parts of the page is hidden behind the inspector due to a fixed width based on a viewport media query. Instead it’s set to a maximum of that width, although fluid when logged into the backend. This makes the content element handles visible all the time.