Naviga Writer
8.1.7
8.1.7
  • Naviga Writer
  • Release notes
    • 8.1.7
    • 8.1.6
    • 8.1.5
    • 8.1.4
    • 8.1.3
    • 8.1.2
    • 8.1.1
    • 8.1
    • 8.0
    • 7.2
    • 7.1.0
    • 7.0.0
    • 6.5.x
    • 6.5.0
    • 6.4.1
    • 6.4.0
    • 6.3.5
    • 6.3.4
    • 6.3.3
    • 6.3.2
    • 6.3.1
    • 6.2.2
    • 6.2.1
    • 6.2.0
    • 6.1.2
    • 6.1.1
    • 6.1.0
    • 6.0.0
    • 5.3.0
  • Introduction
    • Authoring
    • Developing
    • Publishing
    • History
  • User Guide
    • Writer User Guide
      • Create a new article
      • Top bar
        • Setting menu
        • Article name
        • Search and replace words
        • Version history of an article
          • List of versions
          • Changes in each version
          • Restore to an older version
        • Locked article
        • Active Users
        • Copy article url
        • Save and publish flow
        • History Button
      • Content area
        • Image gallery
        • Embed map
        • Table
        • Teaser
        • Content part
        • HTML embed
        • Upload image
        • Upload PDF
        • Textstyles
        • Lists
        • Special character
        • Marker tool
      • Right Sidebar
        • Meta
          • Author
          • Channels
        • Integrations
        • Image and Article search
      • Bottom bar
        • Article information
        • Edit metadata on linked images
        • Article size
        • Text information
        • Language menu
      • Images User Guide
        • Upload images
        • Metadata of the image
        • Cropping images
        • Download
      • Personal Writer Template
      • Writer Keyboard Shortcuts
      • Text Management
      • Common questions when starting using Writer
  • Admin Guide
    • Configuration Files
    • Configurations Guide
      • Right Sidebar
      • Text Information
      • Content menu
    • Article Templates Configuration
    • Byline configuration
    • Language Configuration
    • Publish Flow
      • Default configuration definitions
      • Publish flow config details
      • Preconditions for roles in the publish flow
    • Generic Properties
      • Configuration
    • Image Services
      • ImEngine
      • Imgix
    • Plugins
      • Naviga developed plugins
        • Plugins in earlier versions of Writer
      • Deprecated Plugins
      • Third-party plugins
  • Developer guide
    • Upgrade Guides
      • 8.0 - Image/PDF upload changes
      • 8.0 - Opening an Article
    • Writer Plugin Development
      • Quickstart
      • Type Definitions (beta)
      • Plugin overview
      • Creating a content object plugin
      • Validation and hooks
      • Interacting with external resources
    • Writer Plugin Building Blocks
      • Package
      • Component
      • Node
      • Converter
      • Events
    • Writer Plugin Style Guide
      • CSS Guidelines
      • CSS variables, colors and fonts
      • UI Components
    • Tutorials
      • Popover & text analysis
      • Search & replace
      • Concept interaction
      • Integrating External Spell Checking
    • Infomaker NewsML
      • Overview
      • Important: About inline notes
      • Document relations and types
      • Extensions XSD
      • NewsItem
      • ConceptItem
      • PlanningItem
      • Examples
        • NewsItem - Text
        • NewsItem - Picture
        • NewsItem - PDF
        • ConceptItem - Author
        • ConceptItem - Category
        • ConceptItem - Channel
        • ConceptItem - Content Profile
        • ConceptItem - Event
        • ConceptItem - Organisation
        • ConceptItem - Person
        • ConceptItem - Place (point)
        • ConceptItem - Place (polygon)
        • ConceptItem - Section
        • ConceptItem - Story
        • ConceptItem - Topic
        • PlanningItem
    • Media Enrichment
      • Images
  • API Reference
    • Writer Api
      • Api
      • Article
      • Browser
      • Concept
      • ConceptService
      • Document
      • Events
      • NewsItem
      • Router
      • Ui
      • Upload
      • User
      • settings
      • History
      • Settings
    • UI Components
      • UIAvatar
      • UIButton
      • UIByline
      • UICheckbox
      • UIChip
      • UIDatePicker
      • UIDatetimeFieldEditor
      • UIDropdown
      • UIFieldEditor
      • UIIconButton
      • UIInlineImage
      • UIPagination
      • UISelect
      • UITimePicker
      • UIToggle
      • UITooltip
      • UIInputText
      • UITextarea
      • UIButtonGroup
      • UIConceptSearch
      • UIDateTimePicker
      • UIInputSearch
      • UIIcon
      • UIPill
      • UISpinner
      • UIButtonList
      • UIIconBadge
      • UIIconButtonMenu
      • UIInputPassword
Powered by GitBook
On this page

Was this helpful?

  1. Developer guide
  2. Writer Plugin Building Blocks

Converter

PreviousNodeNextEvents

Was this helpful?

While a user has an article open for editing in the Writer, it is represented in the Browser as a collection of nodes with text content and attributes. Everytime the article is to be sent or read from the article repository, it needs to be translated to an XML representation. The XML document structure for an article is well defined by the format specification.

The process of converting to/from nodes and XML is done by Writer, but it takes help from one or many converters. Example of plugins that provide converters are plugins that contribute content to the article text, or add metadata information about the article.

Conversion process from XML document to nodes in Browser

Telling Writer about your converter

// MyPluginPackage.js

import {converter} from './MyPluginConverter'

export default {
    name: 'myplugin',
    id: 'com.example.myplugin',
    version: '1.0.0',
    configure(configurator) {
        configurator.addConverter('newsml', converter)
    }
}

The converter should contain a function for converting data from XML to Substance Nodes, called import, and one function for converting from Substance Nodes to XML, called export. Here's an example where the plugin called myplugin is adding content to the article, through the object extension in the writer format. In this example, the plugin implements an object where it is possible to define a question and provide an answer.

The converter can also contain a function matchElement, to let it know if it's responsible for the current node.

// MyPluginConverter.js

const MyPluginConverter = {
    type: 'myplugin',
    tagName: 'object',

    matchElement: function (el) {
        return el.is('object') && el.attr('type') === 'myplugin'
    },

    /**
     * Responsible for converting data from XML to a node in Browser
     */
    import: function (xmlElement, node) {
        node.question = xmlElement.attr('question')
        node.answer = xmlElement.attr('answer')
    },

    /**
     * Responsible for converting data from nodes to XML
     */
    export: function(node, xmlElement) {
        xmlElement.attr({
            question: node.question,
            answer: node.answer
        })
    }
}

export {MyPluginConverter}

An article example with the plugin1 active could look like:

<!-- In this interview series, we have found that the number one answer to our specific question is: -->
<object type="myplugin" question="Do you like hotdogs?" answer="yes, I do"/>

The way to tell Writer that there's a converter to be used for a plugin, is to register it in the package file for the plugin. . In the example below, a plugin with the name plugin is registering a converter that is defined in the MyPluginConverter.js file

Read more about the Package file
newsitem-text.xml