🌿

Features

Everything Parsley Template Editor provides

Template Editing

Multi-tab component editor

Open bundle templates (.wo folders) or standalone templates (.html files) in a tabbed editor with synchronized views for the HTML template, WOD bindings, API definitions, and WOO settings. Each tab provides specialized editing for its file type.

Usages tab

The Usages tab answers “who uses this component?” — a reverse dependency view showing every component in the workspace that references the current one as an element. Results appear in a two-column table (component name and project) with double-click navigation to jump straight to the using template. The scan runs in the background on first activation; hit Refresh to re-scan. Works across projects.

Standalone template support

Standalone templates (.html files not inside .wo folders) have full editor support: autocomplete, keypath validation, and build-time validation — all on par with traditional bundle template components. This is a key enabler for ng-objects, where standalone templates are the primary component format.

Syntax highlighting

Distinct colors for HTML tags, OGNL keypaths, string constants, and dynamic binding values. A subtle background tint on <wo:> tags makes component boundaries visually distinct from surrounding HTML. Parser control tags (<p:raw>, <p:comment>) are rendered with a muted tint.

Template outline

A structural outline view showing the element hierarchy. Selecting an element in the outline navigates to it in the editor, and moving the cursor in the editor updates the outline selection.

Breadcrumb navigation

A breadcrumb bar above the editor shows the element hierarchy at the cursor position, providing context for deeply nested templates.

Autocomplete

Tag completion

Type <wo: and press Ctrl+Space to see all available component types, filtered by the project’s framework (ng-objects or WebObjects). Selecting a component inserts the correct tag form — self-closing (<wo:str />) for elements without child content, or opening+closing pairs (<wo:form></wo:form>) for content components. Required bindings are pre-inserted with the cursor inside the quotes, so you can start typing the value immediately.

Binding name completion

Inside a <wo:> tag, Ctrl+Space shows all valid binding names for that component type, read from the component's .api definition and Java class.

Binding value completion

When editing a binding value, Ctrl+Space offers OGNL keypath completions resolved against the component's Java class — walking the full keypath chain and suggesting keys at each level.

Close-tag completion

Typing </ and pressing Ctrl+Space suggests the correct close tag for the innermost open element. Correctly handles self-closing tags and attribute values containing /.

WOD content assist

In the WOD editor, Ctrl+Space completes element type names and binding names with context-aware filtering.

Validation & Quick-Fixes

Live keypath validation

Binding values are validated against the component's Java class in real time. Invalid keypaths are underlined with squiggly markers and reported in the Problems view. Validation re-runs automatically when Java classes or .api files are saved.

Template syntax validation

The editor catches common template authoring errors: missing = between an attribute name and value (negate"true" instead of negate="true"), missing closing > on tags, and miscapitalized tag shortcuts. Each error includes a descriptive message with the correct syntax.

"Did you mean?" suggestions

When a keypath segment or element type name is invalid, the editor suggests close matches — "Did you mean 'name'?" for a mistyped key, or "Did you mean 'str'?" for a mistyped tag name. Suggestions use Damerau–Levenshtein string distance, catching transpositions, insertions, deletions, substitutions, and capitalization errors.

Cmd+1 quick-fixes

Press Cmd+1 anywhere on a line with a validation error to apply a fix instantly. Works for both keypath errors and element type errors. When a line has multiple errors, proposals for all of them appear in the popup.

Problems view quick-fixes

Right-click an error in the Problems view and select Quick Fix to see replacement suggestions. Applying a fix opens the file, replaces the invalid text, and removes the marker.

Hover help

Hovering over a squiggly-underlined error shows the validation message inline. Hovering over a <wo:ComponentName> tag shows the component’s API documentation — accepted bindings, required/settable markers, and defaults. When both are available, the error appears first with documentation below.

Thread-safe validation

The shared API model (WebObjectDefinitions.xml) is accessed under synchronization, preventing false validation errors from concurrent DOM reads — a fix for a long-standing intermittent issue.

Parser Control Tags

<p:raw>

Wrapping content in <p:raw>...</p:raw> treats it as literal text — no dynamic tag processing. Useful for embedding example code that contains <wo:> tags without them being treated as live bindings. Content is excluded from validation.

<p:comment>

Wrapping content in <p:comment>...</p:comment> creates a template-level comment that is stripped entirely from output, unlike HTML comments which are sent to the client. Content is invisible to validation.

Navigation & Search

Find References in templates

Eclipse’s Find References (Ctrl+Shift+G) includes template references in the standard Search view. Search for references to a method or field and the results include binding key references from the component’s own template. Search for references to a component or element class and the results include <wo:TypeName> tags and WOD declarations across the project and all dependent projects.

Open Declaration

F3 on a <wo:ComponentName> tag jumps straight to the Java class declaration — the standard Eclipse “Open Declaration” shortcut, working in templates. Ctrl+Click on element type names in the WOD editor, on binding values (keypath navigation), and on inline WOD element references in templates also works.

Component switching shortcuts

Quick switching between a component’s files: Cmd+Alt+1 opens the Java class, Cmd+Alt+2 the HTML template, Cmd+Alt+3 the WOD file, Cmd+Alt+5 the API definition. The API shortcut works from any editor context — for WOElements without an associated component template, it opens the API editor directly, creating a blank .api file if none exists.

Open component by name

Cmd+Shift+X opens a dialog to quickly find and open any component by name, from anywhere in the workspace.

Refactoring

Rename component

Renaming a component’s Java class via Refactor > Rename automatically renames its .wo folder, contained template files, and .api file. A “Rename Component…” context menu action on .wo folders provides the reverse direction. All references in other templates (<wo:OldName> tags and WOD type declarations) are updated across the project.

Rename binding key in template

Renaming a method or field in a component’s Java class via Refactor > Rename automatically updates binding key references in the component’s own WOD and HTML template files. Key paths are handled correctly — only the first segment is renamed. KVC getter/setter prefixes (get, set, is, _) are stripped automatically when deriving the binding key.

Linked rename

Cmd+2, R on an element tag enters linked rename mode — editing the tag name simultaneously updates the matching close tag. Works on <wo:> tags, HTML tags, and parser control tags.

Extract Component

Cmd+2, E extracts the selected HTML into a new component — creating the component files, replacing the selection with a <wo:NewComponentName/> tag, and opening the new component for editing. The extracted HTML is automatically dedented to start at column 0. Creates standalone .html templates for ng-objects projects and .wo bundles for WebObjects projects.

Extract Wrapper

Cmd+2, X is the inverse of Extract Component — it extracts everything around the selection into a new wrapper component. The wrapper’s template contains the original page structure with <wo:content /> where the selection was; the original template becomes just the selection wrapped in a <wo:WrapperName> tag. Ideal for extracting reusable page layouts (nav, header, footer) into wrapper components.

Convert inline to WOD

Cmd+2, W extracts inline bindings from a <wo:> tag in the template into the separate WOD file, replacing the tag with a reference.

Convert WOD to inline

Cmd+2, I converts a <webobject name="X"> tag to inline <wo:Type> syntax, inlining the bindings from the WOD file and removing the WOD declaration. The reverse of Cmd+2, W.

Convert between component formats

Convert between standalone templates and bundle templates in both directions. “Convert to Standalone Template” on .wo folders replaces <webobject> tags with inline <wo:Type> syntax, moves the HTML out, and deletes the .wo folder. “Convert to Bundle Template” on standalone .html files wraps them in a .wo folder with an empty .wod file. Both support multi-selection.

Create key / Create action

When Cmd+1 is invoked on an unresolved binding key, the quick-fix opens the appropriate dialog: Create Action for action bindings (generating a method returning WOActionResults/NGActionResults) or Create Key for other bindings (generating a property accessor). The dialog type is detected automatically from the binding name.

Delete and unwrap tags

Context menu actions to delete an entire element (including children) or unwrap a tag (removing the tag but keeping its content).

Format template

Cmd+Shift+F reformats the template with consistent indentation. Configurable tabs vs. spaces and indent size via Preferences → Parsley → Template Formatting. The formatter preserves original line structure, blank lines between elements, non-ASCII characters, &nbsp; entities, and spaces between inline tags.

Component Insertion

Insert component dialog

Cmd+6 opens a dialog to browse and insert any available component type. The dialog includes search, filtering, and shows component descriptions from .api files.

Toolbar buttons

The editor toolbar provides one-click insertion for common components: WOString, WOConditional, WORepetition, WOHyperlink, WOTextField, WOForm, WOSubmitButton, WOImage, WOCheckBox, WORadioButton, WOPopUpButton, and more.

Bindings inspector

A view showing all available bindings for the component under the cursor. Bindings can be dragged from the inspector directly into the template or WOD file.

Parsley Explorer

Component-aware Package Explorer

A Package Explorer variant designed for WebObjects and ng-objects development. Bundle template folders are expandable (showing their contained files), unlike the standard Package Explorer where they appear as opaque folders.

Source folder pull-up

WO-specific source folders (src/main/components, src/main/woresources, src/main/webserver-resources) are pulled up to the project root level alongside standard Java source folders, keeping the tree shallow.

Project badges

Projects are decorated with framework badges — ng-objects or WebObjects — making it easy to tell at a glance which framework each project uses.

Source folder badges

Component source folders are marked with a "wo" badge overlay. Full-path labels (src/main/components) replace Eclipse's default shortened names, while preserving EGit branch decorators.

Component icons

Custom icons for bundle template folders with problem marker overlays, visible across all Eclipse views (explorer, search results, etc.).

Wizards

New Project wizard

Create new ng-objects or WebObjects Maven projects from scratch — complete projects with a sample Main component, ready to run. The wizard generates all source files and imports the project using m2e.

New Component wizard

Create new components with a choice between Standalone template (ng-objects style) and Bundle template (WebObjects style). The default format is auto-detected from the project type. For bundle templates, the wizard generates HTML, WOD, WOO, and Java files; for standalone templates, just the HTML and Java files.

API Editor

Component API definitions

A multi-page form editor for .api files. Define component bindings (name, type, required/optional), validation rules, display metadata, and creation/deletion behavior through a structured UI rather than editing XML directly.

Rename binding across files

Rename a binding in the API editor and update all template references in one step. Enable “Refactor on rename” (top-right checkbox), rename one or more bindings, save — a refactoring preview shows every .html and .wod file that uses the old name. The scan covers the source project and all projects that depend on it transitively.

Live revalidation on API changes

Saving an .api file immediately revalidates all open component editors. Mark a binding as required, save — and every open template that uses that component instantly shows or clears the corresponding validation markers.

Framework Support

Dual framework support

Works with both ng-objects and WebObjects projects in the same workspace. Per-project framework detection uses build.properties (project.base=ng or project.base=wo) with automatic classpath probing as a fallback.

Editor association

Component files (.html, .wod, .woo, .api) automatically open in the Parsley editor — for any file inside a .wo folder, or for component files in ng-objects projects. Coexists with WOLips without conflicts.

WOLips coexistence

Parsley coexists cleanly with WOLips in the same Eclipse installation. By default, Parsley activates for projects with project.base in build.properties. A preference in Preferences → Parsley → WOLips Coexistence lets Parsley handle all recognized WO/NG projects, even without project.base.

Maven integration

A Maven preference page detects whether your settings.xml has the WOCommunity repository configured and offers a one-click button to add it. The WOCommunity archetype catalog is registered automatically for the New Maven Project wizard.

Preferences

Syntax colors

Customizable colors for HTML tags, WOD syntax, OGNL expressions, and string constants in both the template and WOD editors.

Validation settings

Control which validation rules are active and their severity levels (error, warning, info). Custom validation rules can be defined for specific binding patterns.

Tag shortcuts

Define custom abbreviations for frequently used inline WOD binding patterns, speeding up template authoring.

Perspective

Parsley perspective

A dedicated Eclipse perspective optimized for WebObjects/ng-objects development. Layout: Parsley Explorer and Type Hierarchy on the left, editors in the center, Problems and Console at the bottom, Outline on the right. Includes Debug, Java, and Team/EGit action sets.