Source: xxe/editor/DocumentOpenedEvent.js

/**
 * {@link XMLEditorEvent} sent after a document has been successfully opened 
 * in an XMLEditor.
 *
 * <p>Contains not only the HTML+CSS view of the opened document but also 
 * all the information (commands, bindings, toolbar buttons, etc) 
 * needed to configure the {@link XMLEditor} in order to make it usable
 * to edit this opened document.
 *
 * @see XMLEditor#openDocument
 * @see XMLEditor#openFile
 */
export class DocumentOpenedEvent extends XMLEditorEvent {
    constructor(xmlEditor, data, type="documentOpened") {
        super(xmlEditor, data, type);

        if (!this._diffSupport) {
            this._diffSupport = 0;
        }
        
        if (!Array.isArray(this._contextualCmds)) {
            // An array of (cmdName, cmdParam) pairs.
            this._contextualCmds = null;
        }
        
        if (!this._configName) {
            this._configName = null;
        }
        
        if (!Array.isArray(this._bindings)) {
            this._bindings = null;
        } else {
            let bindings = [];
            for (let data of this._bindings) {
                let binding = Binding.fromJSON(data);
                if (binding !== null) {
                    bindings.push(binding);
                }
            }
            this._bindings = (bindings.length === 0)? null : bindings;
        }
        
        if (!Array.isArray(this._toolSets)) {
            this._toolSets = null;
        }
        
        if (!Array.isArray(this._extensionModules)) {
            this._extensionModules = null;
        }
    }

    /**
     * Get the <code>uid</code> property of this event.
     *
     * @type {string}
     */
    get uid() {
        return this._uid;
    }

    /**
     * Get the <code>url</code> property of this event.
     *
     * @type {string}
     */
    get url() {
        return this._url;
    }

    /**
     * Get the <code>persistent</code> property of this event.
     *
     * @type {boolean}
     */
    get persistent() {
        return this._persistent;
    }

    /**
     * Get the <code>nsPrefixes</code> property of this event.
     *
     * @type {array}
     */
    get nsPrefixes() {
        return this._nsPrefixes;
    }

    /**
     * Get the <code>readOnly</code> property of this event.
     *
     * @type {boolean}
     */
    get readOnly() {
        return this._readOnly;
    }

    /**
     * Get the <code>saveNeeded</code> property of this event.
     *
     * @type {boolean}
     */
    get saveNeeded() {
        return this._saveNeeded;
    }

    /**
     * Get the <code>saveAsNeeded</code> property of this event.
     *
     * @type {boolean}
     */
    get saveAsNeeded() {
        return this._saveAsNeeded;
    }

    /**
     * Get the <code>diffSupport</code> property of this event: 
     * 0 (comparison of revisions not enabled),
     * 1 (comparison of revisions enabled) or 
     * 2 (all revisions stored in the document).
     *
     * @type {number}
     */
    get diffSupport() {
        return this._diffSupport;
    }

    /**
     * Get the <code>view</code> property of this event.
     *
     * @type {string}
     */
    get view() {
        return this._view;
    }

    /**
     * Get the <code>styles</code> property of this event.
     *
     * @type {string}
     */
    get styles() {
        return this._styles;
    }
    
    /**
     * Get the <code>marks</code> property of this event.
     *
     * @type {array}
     */
    get marks() {
        return this._marks;
    }
    
    /**
     * Get the <code>contextualCommands</code> property of this event.
     *
     * @type {array}
     */
    get contextualCommands() {
        return this._contextualCmds;
    }
    
    /**
     * Get the <code>configurationName</code> property of this event.
     *
     * @type {string}
     */
    get configurationName() {
        return this._configName;
    }

    /**
     * Get the <code>bindings</code> property of this event.
     *
     * @type {array}
     */
    get bindings() {
        return this._bindings;
    }

    /**
     * Get the <code>toolSets</code> property of this event.
     *
     * @type {array}
     */
    get toolSets() {
        return this._toolSets;
    }
    
    /**
     * Get the <code>extensionModules</code> property of this event.
     *
     * @type {array}
     */
    get extensionModules() {
        return this._extensionModules;
    }
}