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.
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:
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 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.
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.
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
(Gitlab)
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;
}
Copy
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.
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.
Example: Here’s the diff subapp for the
/travel/about/what-we-believe page. The URL is: