# Source: cmd/OpenDocumentCmd.js

    /**
     * Implementation of local command <code>openDocument</code>.
     */
    export class OpenDocumentCmd extends Command {
        constructor() {
            super();
        }

        execute(mode, docView, params, event=null) {
            let readOnly = false;
            let remoteURI = null;
            let localURI = null;
            if (params !== null) {
                params = params.trim();
                if (params.startsWith("[readWrite]")) {
                    readOnly = false;
                    params = params.substring(11);
                } else if (params.startsWith("[readOnly]")) {
                    readOnly = true;
                    params = params.substring(10);
                }

                let docURIs = splitTrimString(params, /\s+/);
                if (docURIs.length > 0) {
                    remoteURI = docURIs[0];
                }

                if (remoteURI !== null) {
                    if (remoteURI.startsWith("csri:")) {
                        localURI = URIUtil.csriURLToURI(remoteURI);
                        remoteURI = null;
                    }
                }
            }

            if (mode === EXECUTE_TEST) {
                return Promise.resolve(remoteURI !== null);
            }

            // ---

            Command.consumeEvent(event);

            if (remoteURI === null) {
                if (localURI !== null) {
                    XUI.Alert.showError(`Don't know how open local files such as
    "${localURI}"`,
                                        /*reference*/ docView);
                }
                return Promise.resolve(CommandResult.FAILED);
            }

            let readOnlyMode = readOnly? " read-only" : "";
            docView.showStatus(
                `Opening remote file "${remoteURI}"${readOnlyMode}...`,
                /*autoErase*/ true);

            return this.openRemoteFile(docView, remoteURI, readOnly);
        }

        /**
         * Open specified remote document in a new <em>browser</em> window/tab.
         * <p>Redefine this method if for example, the document is to be opened
         * in a new <em>application</em> tab.
         *
         * @param {DocumentView} docView - the <code>DocumentView</code>
         * from which this command in invoked.
         * @param {string} remoteURI - the URI of the document to be opened.
         * @param {boolean} readOnly - specifies whether it must be opened
         * in read-only mode.
         * @returns {Promise} A Promise containing a {@link CommandResult}.
         */
        openRemoteFile(docView, remoteURI, readOnly) {
            const newWin = window.open(window.location.href, "_blank");
            if (newWin === null) {
                XUI.Alert.showError(`Blocked by the browser pop-up blocker?
    If this is the case, please allow pop-ups for ${window.location.host}`,
                                    /*reference*/ docView);
                return Promise.resolve(CommandResult.FAILED);
            }

            // Hack but in this very specific case simpler than
            // newWin.postMessage().
            newWin.name = JSON.stringify([ "openRemoteFile", remoteURI, readOnly ]);

            return Promise.resolve(CommandResult.DONE);
        }
    }

    ALL_LOCAL_COMMANDS.openDocument = new OpenDocumentCmd();