Diff module

Content management Bundled: DX Core

Edition DX Core

License

MLA

Issues

Maven site

Latest

3.0.0

Available on SPA/Headless

No

The Diff module enhances Magnolia core versioning functionality. The module uses the daisydiff Java library to compare two HTML files. Insertions are highlighted in green and deletions in red. Users can see exactly what has changed between two versions of the same content. The module is used by the Pages app to compare page versions. Line-by-line text comparison and changes in asset selection allow editors and publishers to see at a glance exactly what has changed.

Diff module result in Show changes tab

Installing with Maven

Maven is the easiest way to install the module. Add the following to your bundle:

<dependency>
  <groupId>info.magnolia.diff</groupId>
  <artifactId>magnolia-diff</artifactId>
  <version>3.0.0</version> (1)
</dependency>
1 Should you need to specify the module version, do it using <version>.

For integration with the Pages app there is also magnolia-diff-pages-integration.

<dependency>
  <groupId>info.magnolia.diff</groupId>
  <artifactId>magnolia-diff-pages-integration</artifactId>
  <version>3.0.0</version> (1)
</dependency>
1 Should you need to specify the module version, do it using <version>.

Note the changes in groupId and artifactId since the 2.0 release.

Compatibility module

We have been gradually removing the old Content API from our modules since Magnolia 5.6. If you have custom code relying on classes from the old diff module then you must do one of two things:

  • Update your code for the new version of the diff module.

  • Or you can use the magnolia-diff-compatibility module together with the magnolia-core-compatibility module.

Add the following snippet to your POM file:

<dependency>
  <groupId>info.magnolia.diff</groupId>
  <artifactId>magnolia-diff-compatibility</artifactId>
  <version>3.0.0</version> (1)
</dependency>
1 Should you need to specify the module version, do it using <version>.

Configuration

In most circumstances, the Diff module requires no configuration.

However, version comparison relies on functionality provided by the Diff module and, if implemented, may require the following configuration.

Diff servlet

info.magnolia.module.diff.VersionDiffHtmlServlet is registered in the Magnolia filter chain in the Configuration app > /server/filters/servlets/VersionDiffHtmlServlet. The controller generates the diff view between two versions of a page by checking the toVersionNr and fromVersionNr request parameters.

Diff servlet configuration

Diff configuration

The default settings for headers, cookies, host and port can be set by configuration.

By default Magnolia is set to generate a JSESSIONID cookie. This is configured in the diff module in the Configuration app > /modules/diff/config/cookies.

Diff configuration

You can configure custom settings for:

  • cookies: You can specify any number of custom session cookie names to forward.

  • headers: The default value is none. By adding a headers config node you can specify any number of headers to be sent to the diff servlet thereby automatically excluding any headers that are not specified.

  • host and port : The default host and port is localhost and 8080. However, the Diff module will work even if you change the default Tomcat port. This means that you can use the diff functionality against another server.

Due to a security issue, the functionality of host and port is no longer available in Magnolia 6.2.38.
Headers and cookies are configured separately.

Headers and cookies configuration

Diff HTML generator

info.magnolia.module.diff.VersionDiffHtmlGenerator compares two HTML files using HTMLDiffer and returns HTML that highlights the differences between the compared pages:

  • The comparison only includes the body of the HTML document.

  • The differences are marked with span tags.

  • The header is taken from the HTML of the page that is compared to.

  • CSS is added.

Here’s a snippet from diff.css (GIT) located in the mgnl-resources folder of the module jar.

/*
 * Styles for the HTML Diff
 */
span.diff-html-added {
    font-size: 100%;
    background-color: #ccffcc; /* light green */
    cursor: pointer;
}
span.diff-html-removed {
    font-size: 100%;
    text-decoration: line-through;
    background-color: #fc6f6f; /* light red */
    cursor: pointer;
}
span.diff-html-changed {
    background-color: #95c6fd; /* light blue */
    cursor: pointer;
}
span.diff-html-selected {
    background-color: #FF8800; /* light orange */
    cursor: pointer;
}

Diff utility classes

Two utility classes are provided:

  • info.magnolia.module.diff.util.DiffUtil provides the buildComparisonURL, buildComparisonURLToCurrent and buildComparisonURLToCurrentUnversioned methods.

  • info.magnolia.module.diff.util.VersionComparison is a POJO that gets and sets the versionFrom and versionTo methods.

Compare actions

info.magnolia.module.diff.app.action.CompareLocalizedVersionsAction and info.magnolia.module.diff.app.action.CompareToPreviousLocalizedVersionAction open the diff subapp (see below) configured in the Pages app. The action definitions are configured in the Configuration app > /modules/pages/apps/pages/subApps/browser/actions.

Compare actions configuration

Diff subapp

The diff view that opens when comparing different page versions is configured in the Pages app. This configuration is in the Configuration app > /modules/pages/apps/pages/subApps/diff.

  • class: info.magnolia.ui.framework.app.embedded.EmbeddedPageSubAppDescriptor embeds the page in an iframe.

  • label: Renders in the subapp tab.

  • subAppClass: info.magnolia.ui.framework.app.embedded.EmbeddedPageSubApp is the main tab in an embedded page app.

Diff subapp configuration

Example: Here’s the diff subapp for the /travel/about/what-we-believe page. The URL is:

http://localhost:8080/magnoliaAuthor/.magnolia/admincentral#app:pages:diff;/.magnolia/versionDiff?diffViewContentHandle=/travel/about/what-we-believe&fromVersionNr=1.0&toVersionNr=1.1&diffLocale=en

Note the reference to the diffViewContentHandle, fromVersionNr, and toVersionNr parameters.

Restoring a previous version does not restore the name or location (path) of the item if these have been changed.

Feedback

DX Core

×

Location

This widget lets you know where you are on the docs site.

You are currently perusing through the DX Core docs.

Main doc sections

DX Core Headless PaaS Legacy Cloud Incubator modules