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
  • Overview
  • Before validation
  • Validation
  • Before save hook
  • After save hook
  • Example

Was this helpful?

  1. Developer guide
  2. Writer Plugin Development

Validation and hooks

Overview

It is possible to add hooks in various stages of the saving process. There are three general hooks in addition to the more special validation. All hooks must return a Promise() that is either resolved or rejected by the hook. Any reject() will cancel the process and show an error message to the user.

Any plugin can provide hooks or validation. The order of multiple hooks in the same stage is not guaranteed so no assumption should be made on the execution order.

All plugins must register their hooks and validations in PluginPackage.js when the plugin registers.

The general stages of the saving process is

  1. Before Validation hooks

  2. Validation

  3. Before save hooks

  4. Saving...

  5. After save hooks

Before validation

In the before validation hooks it is allowed to alter the article programmatically through the API. This is useful if you want to change something automatically before the validation and saving process continues.

Validation

These are not technically hooks. The NPWriter executes one or many provided validation methods. These methods add messages, warnings and errors which are then presented to the user. Any error message will stop the process.

Any changes done programmatically to the article in the validation 
process - or later - will not be saved and potentially lost.

Before save hook

Before save hooks are executed After potential changes of the article and when the valitation passed.

After save hook

When the article has been successfully saved the after save hooks are executed.

Example

A compact example with one hook of each type and a validation in one package file.

import {Validator, hook, api} from 'writer'

class MyValidation extends Validator {
    // Required
    constructor(...args) {
        super(...args)
    }

    validate() {
        const headlines = this.newsItem.querySelectorAll('idf > group element[type="headline"]')
        const headline = headlines[0].childNodes.length === 0 ? '' : headlines[0].firstChild.textContent.trim()

        if (headlines.length === 0) {
            // Informative message
            this.addValidationMessage('The article is missing a headline!')
        }
        else if (headline === '') {
            // Warning
            this.addWarning('The article has an empty headline')
        }

        if (api.newsItem.getAuthors().length === 0) {
            // Error - will cancel saving
            this.addError('The article must have an author')
        }
    }
}

class MyHookBeforeValidate {
    execute(type) {
        return new Promise((resolve, reject) => {
            // Do something, async or not
            resolve()
        })
    }
}

class MyHookBeforeSave {
    execute(type) {
        return new Promise((resolve, reject) => {
            // Do something, async or not
            resolve()
        })
    }
}

class MyHookAfterSave {
    execute(type) {
        return new Promise((resolve, reject) => {
            // Do something, async or not
            resolve()
        })
    }
}

export default {
    name: 'myplugin',
    version: '1.0',
    configure: function (configurator, configObject) {

        configurator.addValidator(MyValidation)

        configurator.addHook(hook.BEFORE_VALIDATE, MyHookBeforeValidate)
        configurator.addHook(hook.BEFORE_SAVE, MyHookBeforeSave)
        configurator.addHook(hook.AFTER_SAVE, MyHookAfterSave)
    }
}
PreviousCreating a content object pluginNextInteracting with external resources

Was this helpful?