Exemple #1
1
  export function redirect(router: IRouter, warn = false): Promise<void> {
    const form = createRedirectForm(warn);
    const dialog = new Dialog({
      title: 'Please use a different workspace.',
      body: form,
      focusNodeSelector: 'input',
      buttons: [Dialog.okButton({ label: 'Switch Workspace' })]
    });

    return dialog.launch().then(result => {
      dialog.dispose();

      if (result.value) {
        const url = `workspaces/${result.value}`;

        // Navigate to a new workspace URL and abandon this session altogether.
        router.navigate(url, { hard: true, silent: true });

        // This promise will never resolve because the application navigates
        // away to a new location. It only exists to satisfy the return type
        // of the `redirect` function.
        return new Promise<void>(() => {
          /* no-op */
        });
      }

      return redirect(router, true);
    });
  }
Exemple #2
0
 return context.listCheckpoints().then(checkpoints => {
   if (checkpoints.length < 1) {
     return;
   }
   const lastCheckpoint = checkpoints[checkpoints.length - 1];
   if (!lastCheckpoint) {
     return;
   }
   const type = fileType(shell.currentWidget, docManager);
   return showDialog({
     title: `Revert ${type} to checkpoint`,
     body: new RevertConfirmWidget(lastCheckpoint, type),
     buttons: [
       Dialog.cancelButton(),
       Dialog.warnButton({ label: 'Revert' })
     ]
   }).then(result => {
     if (context.isDisposed) {
       return;
     }
     if (result.button.accept) {
       if (context.model.readOnly) {
         return context.revert();
       }
       return context.restoreCheckpoint().then(() => context.revert());
     }
   });
 });
Exemple #3
0
 execute: () => {
   showDialog({
     title: 'Quit confirmation',
     body: 'Please confirm you want to quit JupyterLab.',
     buttons: [Dialog.cancelButton(), Dialog.warnButton({ label: 'Quit' })]
   }).then(result => {
     if (result.button.accept) {
       let setting = ServerConnection.makeSettings();
       let apiURL = URLExt.join(setting.baseUrl, 'api/shutdown');
       ServerConnection.makeRequest(apiURL, { method: 'POST' }, setting)
         .then(result => {
           if (result.ok) {
             // Close this window if the shutdown request has been successful
             let body = document.createElement('div');
             body.innerHTML = `<p>You have shut down the Jupyter server. You can now close this tab.</p>
               <p>To use JupyterLab again, you will need to relaunch it.</p>`;
             showDialog({
               title: 'Server stopped',
               body: new Widget({ node: body }),
               buttons: []
             });
             window.close();
           } else {
             throw new ServerConnection.ResponseError(result);
           }
         })
         .catch(data => {
           throw new ServerConnection.NetworkError(data);
         });
     }
   });
 }
Exemple #4
0
  export async function redirect(
    router: IRouter,
    paths: JupyterFrontEnd.IPaths,
    workspace: string,
    warn = false
  ): Promise<void> {
    const form = createRedirectForm(warn);
    const dialog = new Dialog({
      title: 'Please use a different workspace.',
      body: form,
      focusNodeSelector: 'input',
      buttons: [Dialog.okButton({ label: 'Switch Workspace' })]
    });
    const result = await dialog.launch();

    dialog.dispose();
    if (!result.value) {
      return redirect(router, paths, workspace, true);
    }

    // Navigate to a new workspace URL and abandon this session altogether.
    const page = paths.urls.page;
    const workspaces = paths.urls.workspaces;
    const prefix = (workspace ? workspaces : page).length + workspace.length;
    const rest = router.current.request.substring(prefix);
    const url = URLExt.join(workspaces, result.value, rest);

    router.navigate(url, { hard: true, silent: true });

    // This promise will never resolve because the application navigates
    // away to a new location. It only exists to satisfy the return type
    // of the `redirect` function.
    return new Promise<void>(() => undefined);
  }
Exemple #5
0
 return context.listCheckpoints().then(checkpoints => {
   if (checkpoints.length < 1) {
     return;
   }
   const lastCheckpoint = checkpoints[checkpoints.length - 1];
   if (!lastCheckpoint) {
     return;
   }
   return showDialog({
     title: 'Revert notebook to checkpoint',
     body: new RevertConfirmWidget(lastCheckpoint),
     buttons: [
       Dialog.cancelButton(),
       Dialog.warnButton({ label: 'Revert' })
     ]
   }).then(result => {
     if (context.isDisposed) {
       return;
     }
     if (result.button.accept) {
       if (context.model.readOnly) {
         return context.revert();
       }
       return context.restoreCheckpoint().then(() => context.revert());
     }
   });
 });
Exemple #6
0
  /**
   * Allows the user to clear state if splash screen takes too long.
   */
  function recover(fn: () => void): void {
    if (dialog) {
      return;
    }

    dialog = new Dialog({
      title: 'Loading...',
      body: `The loading screen is taking a long time.
        Would you like to clear the workspace or keep waiting?`,
      buttons: [
        Dialog.cancelButton({ label: 'Keep Waiting' }),
        Dialog.warnButton({ label: 'Clear Workspace' })
      ]
    });

    dialog
      .launch()
      .then(result => {
        if (result.button.accept) {
          return fn();
        }

        dialog.dispose();
        dialog = null;

        debouncer = window.setTimeout(() => {
          recover(fn);
        }, SPLASH_RECOVER_TIMEOUT);
      })
      .catch(() => {
        /* no-op */
      });
  }
Exemple #7
0
  export async function redirect(router: IRouter, warn = false): Promise<void> {
    const form = createRedirectForm(warn);
    const dialog = new Dialog({
      title: 'Please use a different workspace.',
      body: form,
      focusNodeSelector: 'input',
      buttons: [Dialog.okButton({ label: 'Switch Workspace' })]
    });

    const result = await dialog.launch();

    dialog.dispose();
    if (!result.value) {
      return redirect(router, true);
    }

    // Navigate to a new workspace URL and abandon this session altogether.
    const workspaces = PageConfig.getOption('workspacesUrl');
    const url = URLExt.join(workspaces, result.value);

    router.navigate(url, { hard: true, silent: true });

    // This promise will never resolve because the application navigates
    // away to a new location. It only exists to satisfy the return type
    // of the `redirect` function.
    return new Promise<void>(() => undefined);
  }
Exemple #8
0
export function renameDialog(
  manager: IDocumentManager,
  oldPath: string
): Promise<Contents.IModel | null> {
  return showDialog({
    title: 'Rename File',
    body: new RenameHandler(oldPath),
    focusNodeSelector: 'input',
    buttons: [Dialog.cancelButton(), Dialog.okButton({ label: 'RENAME' })]
  }).then(result => {
    if (!result.value) {
      return;
    }
    if (!isValidFileName(result.value)) {
      void showErrorMessage(
        'Rename Error',
        Error(
          `"${result.value}" is not a valid name for a file. ` +
            `Names must have nonzero length, ` +
            `and cannot include "/", "\\", or ":"`
        )
      );
      return null;
    }
    let basePath = PathExt.dirname(oldPath);
    let newPath = PathExt.join(basePath, result.value);
    return renameFile(manager, oldPath, newPath);
  });
}
Exemple #9
0
 function trust(widget: Notebook): Promise<void> {
   if (!widget.model) {
     return Promise.resolve(void 0);
   }
   // Do nothing if already trusted.
   let cells = widget.model.cells;
   let trusted = true;
   for (let i = 0; i < cells.length; i++) {
     let cell = cells.get(i);
     if (!cell.trusted) {
       trusted = false;
     }
   }
   if (trusted) {
     return showDialog({
       body: 'Notebook is already trusted',
       buttons: [Dialog.okButton()]
     }).then(() => void 0);
   }
   return showDialog({
     body: TRUST_MESSAGE,
     title: 'Trust this notebook?',
     buttons: [Dialog.cancelButton(), Dialog.warnButton()]
   }).then(result => {
     if (result.button.accept) {
       for (let i = 0; i < cells.length; i++) {
         let cell = cells.get(i);
         cell.trusted = true;
       }
     }
   });
 }
Exemple #10
0
 return builder.build().then(() => {
   return showDialog({
     title: 'Build Complete',
     body: 'Build successfully completed, reload page?',
     buttons: [Dialog.cancelButton(),
               Dialog.warnButton({ label: 'RELOAD' })]
   });
 }).then(result => {