1.0.0-beta1 (2013-11-13)

With the release of the beta we’re getting even closer to our final release on December 10th. This release marks the finalizing of the features that will be included in the first official release. The release includes a lot of general improvements, both for the editor and the integrator. Some of these improvements stems from actual project needs, where using the alpha version has emphasized some of the most needed features. We’ve tried our best to include all breaking features in this release, so adjusting your projects from this release to the final release will be as easy as possible.

Main highlights are

Node References

Creating references to other nodes was one of the key missing features needed in order to create dynamic content. It’s now possible to create node types with a reference or multiple references to other nodes of specific types, e.g. allowing selection of a target node for shortcuts or related nodes.

Allow site root to contain content

In earlier releases of Neos the site root (which would be the url / on a domain) could not contain content. The beta 1 release now allows using the site root as a normal page, allowing a more SEO friendly implementation and a cleaner url as well as a more straight forward structure.

Customizable output

For editing content in Neos we need to add wrapping elements in the source code. To make sure the website is rendered the same in ‘backend’ and ‘frontend’ we add those wrapping elements in the frontend rendering too. As this in some way limited the integrators in outputting the HTML to their own needs, Neos beta 1 ships with more configuration options to configure the output rendering of content elements. The integrators now has far more control over the frontend output and can tweak the HTML output on a much higher level. Both the content collection and the content element view helper has became flexible._

Easier creation of content element

Neos now automatically generates the required TypoScript code for the configured node types. It is still possible to extend and overwrite this default configuration, but the amount of boilerplate code has been greatly reduced by this change, allowing creation of basic content types without using any TypoScript.

Styling improvements

  • Overlays/modals
  • Sticky menu
  • Various minor tweaks

Pagination of nodes

The paginate view helper has been improved to make it easier to create lists views using nodes.

Bugfixes & stability improvements

Neos beta 1 comes with a total of 25 bugfixes, mostly related to content editing stability and user experience. A few highligths from this list:

  • Publishing more stable
  • Copy/paste more stable
  • Aloha integration more stable
  • Importing and exporting more stable
  • Content element handles (copy, paste and so on) are now correctly positioned & more reliable

Full list of breaking changes

9 Changes are considered breaking.

TYPO3.Neos

  • Allow the site node to contain content (https://review.typo3.org/#/c/25206/)

    This is a breaking change because it modifies the behavior of Neos:

    The site node (marked with a globe icon in the backend) is now selectable in the navigation component Navigation to the homepage will render the site node, no longer its first child node For compatibility reasons the type of existing site nodes is changed from unstructured to TYPO3.Neos:Shortcut when executing the provided doctrine migration. The same is true when importing existing Sites.xml exports via:

    ./flow site:import
    

    This will, by default trigger an HTTP redirect to the first child page in the site root.

    You usually want to avoid this because it’s not the best SEO-wise. Currently the easiest way to achieve this, is to export the migrated site with:

    ./flow site:export --tidy --filename "Some/Path/Sites.xml"
    

    Then change the type attribute of the site node to TYPO3.Neos:Page and optionally move the old homepages child node into the site node. Afterwards you should be able to re-import the site.

    Soon it’ll be possible to change the node type via the Neos backend.

  • Auto-generate TypoScript from node type configuration (https://review.typo3.org/#/c/25161/)

    For the ease of the integrator to create content elements, it’s now possible to completely skip the TypoScript part for basic elements.

    This is non-breaking as long as the prototype for a node type does not use Array or another TypoScript object, where the additional properties of the auto-generated code could produce unwanted output during rendering.

    For these cases it is sufficient to reset the prototype definition in front of the custom declaration:

    prototype(TYPO3.Neos:Page) >
    prototype(TYPO3.Neos:Page) < prototype(TYPO3.TypoScript:Array) {
      ...
    }
    

    Due to the changed way of merging the TypoScript relative paths in “include” statements might need to be changed. Relative paths are always resolved from the directory of the current file.

  • Use node reference for Shortcut target node (https://review.typo3.org/#/c/25202/)

    Unfortunately this is a breaking change that requires your attention if you’ve used shortcuts with the “Target node” option. There’s a new feature allowing referencing other nodes that can be used in the inspector, this field is now used instead of a hardcoded node path. There is no automatic node migration for this, so you have to update all occurrences of shortcuts using the “Target mode” option manually. This can done by replacing the node path value with the node’s identity (please notice that it’s not the persistence_object_identifier field, but the identifier field).

  • Support custom tag name and attributes for ContentCollection (https://review.typo3.org/#/c/25179/)

    In order to make it possible to customize the output in the frontend we have made it possible to set the desired tag used for a content collection. This also allows to set arbitrary attributes and thus the “className” property has been deprecated in favor of “attributes.class”.

  • Header types are now correctly configured (https://review.typo3.org/#/c/25162/)

    Now the Header 4, Header 5 or Header 6 headline types are by default removed as the configuration to hide those now works because of this change. If you used those headline types the content will still be correctly rendered, but you won’t be able to select the headline type again.

    If you do need those you can configure them using the NodeTypes configuration:

    'TYPO3.Neos.NodeTypes:Headline':
      properties:
        title:
          ui:
            aloha:
              format: ['sub', 'sup', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'removeFormat']
    
  • Refactor SiteImport- and SiteExportService (https://review.typo3.org/#/c/25292/)

    This is a breaking change because it slightly changes the corresponding export command (output becomes filename):

    ./flow site:export --site-node thesite --filename Sites.xml
    

    This would export the given site to a file Sites.xml in the current directory, extracting all resources to a sub directory Resources. While this:

    ./flow site:export --site-node thesite > Sites.xml
    

    Would inline all resources into the resulting XML.

  • Refer to workspace instances rather than strings (https://review.typo3.org/#/c/25142/)

    Instead of using the string we not use the actual entity when referring to a workspace.

TYPO3.TYPO3CR

  • Remove getClosestAncestor method from Node (https://review.typo3.org/#/c/24944/)

    This method has been removed in favor of a much more flexible and extensible solution based on FlowQuery with the operation “closest”.

  • Refer to workspace instances rather than strings (https://review.typo3.org/#/c/25141/)

    Instead of using the string we not use the actual entity when referring to a workspace.

Detailed change log

=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TYPO3.Neos =~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[TASK] Add changelog for TYPO3 Neos 1.0.0-beta1

[TASK] Add functional test for node moving fix

This change adds the functional tests for bugfix I60313cc764f13c15847b1443dacaa6d365ad67cd

[!!!][FEATURE] Allow the site node to contain content

This change adds the notion of “homepage” to Neos. Previously, when accessing the homepage, Neos returned the primary child of the site node leading to a couple of issues like:

  • Links to the homepage always resolve to “/home.html”
  • Duplicate content on “/” and “/home.html”
  • The “home” page is on the same level as it’s sub pages in the navigation component

This change fixes this by allowing the site node to act just like any other node, containing arbitrary child nodes.

This is a breaking change because it modifies the behavior of Neos:

  • The site node (marked with a globe icon in the backend) is now selectable in the navigation component
  • Navigation to the homepage will render the site node, no longer its first child node

For compatibility reasons the type of existing site nodes is changed from unstructured to TYPO3.Neos:Shortcut when executing the provided doctrine migration. The same is true when importing existing Sites.xml exports via:

./flow site:import

This will, by default trigger an HTTP redirect to the first child page in the site root.

You usually want to avoid this because it’s not the best SEO-wise. Currently the easiest way to achieve this, is to export the migrated site with:

./flow site:export --tidy --filename "Some/Path/Sites.xml"

Then change the type attribute of the site node to TYPO3.Neos:Page and optionally move the old homepages child node into the site node. Afterwards you should be able to re-import the site.

Soon it’ll be possible to change the node type via the Neos backend.

Revert “[!!!][TASK] Remove page argument from contentElement view helper”

This reverts commit 9cba3c897de1d3776e1d54a5f5b91f1c2249d27d

It breaks use cases with custom Document types, such as a Blog Post or Article (properties won’t be inline editable anymore)

(cherry picked from commit d216dce3c88971a472ea2b2f44eccd9024a7a909)

[FEATURE] Synchronize context structure tree with content

Update context structure tree if content is changed on the current page and refresh page if changes are made in the context structure tree.

[BUGFIX] Clicking broken element in context structure fails

If a element is not rendered on a page but still shows up in the context structure tree, clicking it will cause a parse expception and it’s url will be followed.

[BUGFIX] Selecting image in media browser causes error

In Iac6bcc27c5747520af1ac34e1ef2a8a375c21c2b it changed using JSON.parse to use jQuery’s getJSON method instead, but the actual response data stopped being parsed leading to parse errors when selecting an image in the media browser.

[BUGFIX] Fix error when using “Publish all” button

When using the “Publish all” button a security error is shown.

This commit updates the Policy.yaml with the correct method name.

[BUGFIX] Safe guard for BackendRedirectionService for unavailable user

This fixes an issue where trying to access http://exmaple.com/neos resulted in a fatal error caused through BackendRedirectionService. This may be caused by a lost user session.

This change adds a safeguard which redirects to the login screen if the BackendRedirectionService detected no logged in user.

[BUGFIX] Fatal error on “Discard All” in workspace module

A leftover from Iafd2437dbe4c18b2e2f0530464abf5a987e89f7f.

[TASK] CLI command to create missing child nodes

The integrator needs an easy way to create new child nodes for existing nodes, this command can be used to process any node type.

The command will automatically check all sub nodes from the given node, including the given node, and process all child nodes that need to be automatically created:

./flow node:autocreatechildnodes --node-type TYPO3.Neos:Document

[BUGFIX] Fix required argument exception when copying a node

This fixes an Exception that occures when copying a node as the argument nodeName is not set.

Besides that it fixes the redirect after the node is pasted. The redirect was not taking the nextUri into account. As nextUri seemed to be incorrectly used in the AbstractNodeTree a nodeUri property is added to the request.

[BUGFIX] Plugin Implementation not available without context node

The Plugin Implementation should also convert properties as internal arguments when being used without context node

[!!!][TASK] Refactor SiteImport- and SiteExportService

This change cleans up and reworks the SiteImportService` and SiteExportService` so that they are easier to extend.

It also adds some error checking and import/export support for sub classes of ImageVariant and \DateTime.

This is a breaking change because it slightly changes the corresponding export command (output becomes filename):

./flow site:export --site-node thesite --filename Sites.xml

This would export the given site to a file Sites.xml in the current directory, extracting all resources to a sub directory Resources. While this:

./flow site:export --site-node thesite > Sites.xml

Would inline all resources into the resulting XML.

[FEATURE] Configurable expansion level of node tree and expand current node

  • Fixes refreshing of tree selecting incorrect node
  • Removes maximum depth of four levels for context structure tree
  • Resolves: #53106
  • Resolves: #52795
  • Commit: b2d091a

[TASK] Remove hardcoded width of chosen box in context bar

This removes the hardcoded hot fix that was introduced to prevent the formatting bar for Aloha from being too wide. The real problem was caused by a fix made for the inspector to make sure non visible instances rendered properly.

[BUGFIX] Icons in inspector breadcrumb misaligned

[BUGFIX] Click events are caught in the entity selection

Currently we catch all click events on the document to update the selected node and prevent the click event to pass through to other listeners.

One issue that this causes is that it’s not possible to use the middle mouse click to open links in a new tab in the menu e.g.

[!!!][FEATURE] Auto-generate TypoScript from node type configuration

This change refactors the TypoScriptService for easier testing in the RenderingTest and adds the feature of auto-generating TypoScript from the node type configuration.

The generated code for node types is the following:

prototype(TYPO3.Neos.NodeTypes:Text) < prototype(TYPO3.Neos:Template) {
    templatePath = 'resource://TYPO3.Neos.NodeTypes/Private/Templates/NodeTypes/Text.html'
    text = ${node.properties.text}
}

This is non-breaking as long as the prototype for a node type does not use Array or another TypoScript object, where the additional properties of the auto-generated code could produce unwanted output during rendering.

For these cases it is sufficient to reset the prototype definition in front of the custom declaration:

prototype(TYPO3.Neos:Page) >
prototype(TYPO3.Neos:Page) < prototype(TYPO3.TypoScript:Array) {
    ...
}

Due to the changed way of merging the TypoScript relative paths in “include” statements might need to be changed. Relative paths are always resolved from the directory of the current file.

[TASK] Refactor node RoutePartHandler

The FrontendNodeRoutePartHandler does quite a lot, yet it’s tests are really sparse.

This patch set refactors the route part handler and increases the code coverage of the corresponding unit tests from 20% to 97%.

It also removes the singleton scope annotations because RouteParts are not stateless.

[!!!][FEATURE] Support custom tag name and attributes for ContentCollection

This change adds new TypoScript properties to the ContentCollection object to set the tagName and attributes of the generated tag that wraps the collection.

Example:

prototype(Acme.Demo:List) < prototype(TYPO3.Neos:Template) {
    items = TYPO3.Neos:ContentCollection {
        nodePath = 'items'
        tagName = 'ul'
        attributes.class = 'my-list'
    }
}

The TypoScript code will render the following HTML:

<ul class="neos-contentcollection my-list">
    ...
</ul>

This is a breaking change as the “className” property for a custom class name on the generated tag is removed. It has to be changed to the “attributes.class” declaration.

[FEATURE] Allow events to be bound to Event Dispatcher

Make it possible to use the event dispatcher for binding and listening to events as an alternative to a heavy dependent view like the Application for easier and lightweight events across the application.

[!!!][TASK] Remove page argument from contentElement view helper

This change removes the page argument from the neos:contentElement view helper and the ContentElementWrappingService. The special handling of a node of type Page (or more correctly Document) is done inside the service now.

This is only breaking if you used the page argument of the view helper which was only done in a template for the Neos backend for now.

[FEATURE] Support tag name and attributes for ContentElementViewHelper

This change extends the neos:contentElement view helper that is used to wrap nodes with RDFa and editing metadata.

It adds a configurable tag name and registers universal tag attributes to override all attributes of the wrapping tag from the view helper.

This is the first step to reduce the generated code and nesting by allowing more fine-grained control over the markup.

[!!!][TASK] Refer to workspace instances rather than strings

In lot of places neos refers to “magic strings” identifying a workspace. This leads to code duplication and makes the system error prone.

This change replaces $workspaceName occurrences with proper $workspace instances where applicable.

This is only a breaking change if you call public (but non-API) methods of the PublishingService in your own code.

Depends: Iea48ec249f8ba74c9628478b7e671c093f45fedc

[TASK] Remove leftover code for parent node TypoScript inclusion

The method readTypoScriptFromSpecificPath is not used anymore and we can skip a check to get the parent nodes.

[TASK] Various improvements to sticky menu

  • Fix global class name
  • Ensure lines align with navigate component
  • Fix button class name (using id instead)
  • Fix bottom border of navigate button when sticky
  • Prevent opening on mouseover when menu closed and sticky
  • Use controller variable binding instead of configuration
  • Get rid of unnecessary custom ember button
  • Use controller sticky state instead of binding to individual views
  • Remove mouse enter event for menu (never possible)
  • Keep more in sync with the way the navigate component is made
  • Remove border from sticky button
  • Fix animation when opening menu when sticky
  • Show label instead of description for menu titles when sticky
  • Related: #49850
  • Commit: d361d66

[FEATURE] When exporting a site, create files for resources

Instead of only exporting XML to standard output it can now be written to a file directly. If this is done, any resources will no longer be embedded into the XML (as base64 encoded data) but will be placed into a folder alongside the XML file.

This massively reduces the size of the generated XML.

[FEATURE] Support exporting of referenced nodes even if they don’t exist

This enables the site exporter to export node references (stored in properties) pointing to nodes which (currently) don’t exist in the content repository.

Requires https://review.typo3.org/#/c/25238/ in order to work.

[TASK] Adjust Import and Export Service to reference / references

This adjusts the SiteExportService and SiteImportService to support the recently introduced node property types “reference” and “references”.

[!!!][FEATURE] Use node reference for Shortcut target node

This changes the property type of the target node for Shortcut pages from a simple node path to a real node reference.

If the target node property contains a path, it is silently ignored.

Also fixes the bug which only showed the first child node if the target mode was switched forth and back and saved in between.

[BUGFIX] Add missing jQuery dependency to Event dispatcher

[BUGFIX] Aloha not always ready when initialized

Currently we have a workaround to make sure that Aloha has been loaded, which causes problems when Aloha isn’t cached.

[BUGFIX] Add missing space to if in ContentCommands.js

[FEATURE] take context-specific visibility of formatting options into account

Furthermore, make it possible to remove formatting.

[TASK] Remove use of node abstract for title attribute

In the workspace module the title attribute for a label was using the node abstract, but that does not really work in all cases.

[FEATURE] Node References and Reference

This change adds support for node reference in the Neos user interface. If a node property of type “reference” or “references” was detected, Neos will use the ReferencesEditor in the inspector for providing a way to search and select reference nodes.

The ReferencesEditor can be configured through editorOptions in the property definition in the respective node type. Currently there is only one supported option, called “nodeTypes”:

'Acme:Article':
  superTypes:
    - 'TYPO3.Neos:Document'
  properties:
    relatedArticles:
      type: references
      ui:
        label: 'Related articles'
        inspector:
          editorOptions:
            nodeTypes: ['Acme:Article']

Another example, this type for a property pointing to a single node:

'Acme:Teaser':
  superTypes:
    - 'TYPO3.Neos:Document'
  properties:
    topArticle:
      type: reference
      ui:
        label: 'Top article'
        inspector:
          editorOptions:
            nodeTypes: ['Acme:Article']

[TASK] Flag to produce readable XML in export

If the “tidy” option is given, the exported XML is formatted nicely to aid in reading / diffing it.

[BUGFIX] Add missing NULL check in NodeConverter

Checks whether $configuration is set before accessing it in NodeConverter::createContext()

[BUGFIX] Cleanly reset the NodeSelection on initialization

We did not clear the entity Identity Map before this change, which lead to numerous bugs: When the page refreshed (e.g. due to some inspector properties being changed), old content element DOM references were not discarded properly, although the page was fully reloaded.

In detail, this fixes (at least) the following issues:

  • fixes handle positioning after uploading an image (they were not shown before)
  • fixes hidden/visible setting after uploading an image (before: Upload an image, wait, set “hidden” in inspector” -> not reflected in page)
  • same for plugins, or any other content element which triggers a reload in the inspector
  • Commit: 34e3d52

[BUGFIX] fix page loading when traversing with history-forward and -back

Before this change, going back and forth in the history did not work at all. It seems that window.location.href is updated before this event is triggered, so we cannot detect whether the URI changed or not.

That’s why we should just load the page if we can.

[TASK] Streamline overlay styling

This commit streamlines all the different overlays used in the whole TYPO3 Neos backend.

[BUGFIX] PositioningHelper fix if selectedNode is null

this.get(‘nodeSelection.selectedNode’) can return null in some case mainly during page loading, the helper currently don’t check this correctly.

[BUGFIX] Add additional check in publishAll

When trying to publish all and the result returned is not valid JSON data then a javascript error occurs.

This commit adds an additional check that the data is not undefined to prevent future errors.

[TASK] Add meta menu navigation documentation

This commit adds an example on how to add a meta menu navigation in the Integrator Cookbook.

[BUGFIX] Wrong position for checkboxes in inspector add ons

This can be seen in the image editor e.g.

[BUGFIX] Fix typo in Sites Management > New Site

[BUGFIX] Skip fully-private properties during CE wrapping

If the property configuration contains completely private properties prefixed with two underscores, the system should ignore them completely.

[BUGFIX] Element handles and overlay are mispositioned

In some cases, if the browser window size changes, or the website style has some transitions which are run, the positioning of the handles is not updated.

This change introduces a helper that, using a setInterval(), allows for actions to be done continuosly. Currently the helper forces the width of the overlay of not inline editable elements and the position of the content element handles.

[FEATURE] Modified state for checkboxes in inspector

[TASK] Move Notifications css from work in progress

This commit moves the Notification css from the work in progress file to a separate Notification sass file..

It also includes a fix for the fade class that missed some minor styling for the notifications.

[TASK] Use non-technical labels for Aloha formatting

[TASK] Skip unnecessary removal of Aloha sidebar

There has been added a feature switch in the Aloha settings that we’re using instead, so this is no longer necessary.

TYPO3.Neos.NodeTypes

[TASK] Updated TypoScript to auto-generated definitions

This change moves all templates to the folder “NodeTypes” and updates the TypoScript to remove redundant declarations from the auto-generated definitions. Additionally the shorter syntax is used where possible.

TYPO3.SiteKickstarter

[TASK] Adjust to recent changes in Neos & TYPO3CR

This mainly adjusts the SiteKickstarter to reflect the changes introduced with the “Allow the site node to contain content”-change (Iddc86edb51df20f1c72e280f8571b918a09af0f6).

It also slightly tweaks the generated TypoScript.

[BUGFIX] Fixes creation of content on generated default page

This adds a empty ContentCollection to the provided “Home” page in Sites.xml.

TYPO3.TYPO3CR

[BUGFIX] Node Moving and renaming should not shine through to live workspace

The bug can be reproduced as follows:

  • rename the node path of a parent page in the neos backend
  • check the parent page on the live workspace. All subpages and all content disappears.

The same happens when moving a node.

Tests are pushed into Neos for this with a separate changeset.

[!!!][TASK] Remove getClosestAncestor method from Node

This method is now replaced by a FlowQuery operation called closest.

Introduced in Ia2f734c9657a3f0f04d5f1edca09206a92728333, replaced by I85fb8043518119d2b61bccea550a73f64f4f3368.

[!!!][TASK] Refer to workspace instances rather than strings

The workspace model contains a lot of methods expecting a workspace name (string) instead of Workspace instances.

This changes this by replacing $workspaceName with $workspace where applicable.

This is a breaking change if you call one of the Workspace::publish*() methods in your code or if you created slots for the recently added signals beforeNodePublishing and afterNodePublishing

[TASK] Set identifier node references even if node is not found

When properties of type reference or references are set and the value is not a Node but a UUID, it will be set even if the node it references cannot be found.

This allows e.g. to import references even though the target node has not (yet) been imported.

[FEATURE] Introduce flag for retrieving reference nodes as identifiers

This change introduces a flag for Node::getProperty() and Node::getProperties() which changes their behaviour to return nodes referenced in the properties as plain identifiers instead of actual nodes.

This feature is necessary in order to export node references even if these nodes (currently) don’t exist in the content repository.

[TASK] AbstractNodeData: Remove the unused getAbstract() method

This removes the method getAbstract() which was never (really) used so far.

[TASK] Add safe guard in getProperty() for non-existing node reference

This adds a safe guard to Node::getProperty() which returns NULL if the node the property is referring to does not exist (anymore).

[FEATURE] Node References

This change set introduces the possibility to refer to one or more other nodes through a Node property. The new data types “reference” and “references” can now be used for that purpose when declaring properties of a node type:

'TYPO3.TYPO3CR:TestingNodeTypeWithReferences':
  properties:
    propertyPointingToOneNode:
      type: reference
    propertyPointingToMultipleNodes:
      type: references

Node::setProperty(), Node::getProperty() and Node::getProperties() all support specifying node(s) through their Node Identifier or by passing the actual Node object if the property type is declared as reference(s). In case of “references” the value to pass is simply a numeric array of Node objects or Node Identifiers.

Note that adjustments to Neos are necessary (separate commit) in order to provide support for references in the user interface.

[TASK] make “unstructured” node type configuration non-empty

... when the array of this node type is completely empty, it might happen that overriding the “unstructured” node type does not fully work.

This change sets “abstract: false”, which is the default behavior, so it does not have any functional side-effects.

[FEATURE] Paginate View Helper: option for nodes and maximum number of nodes

This change adds options to the TYPO3CR Paginate View Helper for providing nodes directly (instead of specifying a parent node) and for specifying the maximum number of nodes to display in total.

TYPO3.TypoScript

[BUGFIX] Remove unused ContentElementWrappingService

This Service is never used in the HtmlMessageHandler and should not be there in the first place, because TYPO3.TypoScript does not depend on TYPO3.Neos and thus should not include references to Neos classes