# Source: res/LocalFiles.js

    /**
     * {@linkplain ResourceStorage Resource storage} for local,
     * that is, client-side/browser-side, resources.
     */
    export class LocalFiles extends ResourceStorage {
        /**
         * Constructs a client-side/browser-side resource storage for use
         * by specified XML Editor.
         */
        constructor(xmlEditor) {
            super(xmlEditor);
        }

        /**
         * <strong>Operation not supported:</strong>
         * simply returns a new {@link LocalFile} having specified URI,
         * <code>null</code> data and <code>null</code> file handle.
         */
        loadResource(uri) {
            if (!uri.startsWith("file:/")) {
                return Promise.resolve(null);
            } else {
                return Promise.resolve(new LocalFile(uri, null, null));
            }
        }

        /**
         * <strong>Operation not supported:</strong>
         * simply returns a new {@link LocalFile} having specified URI,
         * specified data and corresponding file handle (if any).
         */
        storeResource(data, uri) {
            if (!uri.startsWith("file:/")) {
                return Promise.resolve(null);
            } else {
                return Promise.resolve(new LocalFile(uri, data, data.handle));
            }
        }

        openResource(options) {
            return LocalFileDialog.showDialog(this._xmlEditor, options)
                .then((choice) => {
                    if (choice === null) {
                        // Canceled by user.
                        return null;
                    } else {
                        return new LocalFile(choice.uri, choice.file,
                                             choice.file.handle);
                    }
                });
        }
    }