Prechádzať zdrojové kódy

Add links to extensions listed in extension manager (#5055)

* Add links to extensions listed in package manager #5053

* Rename link to url, do not assume the existence of homepage and repository in package

* Fix getting url from json file

* Revert change to hint text
Bo 6 rokov pred
rodič
commit
bdade0e293

+ 8 - 0
jupyterlab/commands.py

@@ -1069,8 +1069,16 @@ class _AppHandler(object):
             name = data['name']
             jlab = data.get('jupyterlab', dict())
             path = osp.realpath(target)
+            # homepage, repository  are optional
+            if 'homepage' in data:
+                url = data['homepage']
+            elif 'repository' in data:
+                url = data['repository'].get('url', '')
+            else:
+                url = ''
             extensions[name] = dict(path=path,
                                     filename=osp.basename(path),
+                                    url=url,
                                     version=data['version'],
                                     jupyterlab=jlab,
                                     dependencies=deps,

+ 4 - 1
jupyterlab/extension_manager_handler.py

@@ -20,12 +20,13 @@ from .commands import (
 )
 
 
-def _make_extension_entry(name, description, enabled, core, latest_version,
+def _make_extension_entry(name, description, url, enabled, core, latest_version,
                           installed_version, status, installed=None):
     """Create an extension entry that can be sent to the client"""
     ret = dict(
         name=name,
         description=description,
+        url=url,
         enabled=enabled,
         core=core,
         latest_version=latest_version,
@@ -93,6 +94,7 @@ class ExtensionManager(object):
             extensions.append(_make_extension_entry(
                 name=name,
                 description=pkg_info['description'],
+                url=data['url'],
                 enabled=(name not in info['disabled']),
                 core=False,
                 # Use wanted version to ensure we limit ourselves
@@ -107,6 +109,7 @@ class ExtensionManager(object):
                 extensions.append(_make_extension_entry(
                     name=name,
                     description=data['description'],
+                    url=data.get('homepage', ''),
                     installed=False,
                     enabled=False,
                     core=False,

+ 15 - 0
packages/extensionmanager/src/model.ts

@@ -33,6 +33,11 @@ export interface IEntry {
    */
   description: string;
 
+  /**
+   * A representative link of the package.
+   */
+  url: string;
+
   /**
    * Whether the extension is currently installed.
    */
@@ -73,6 +78,11 @@ export interface IInstalledEntry {
    */
   description: string;
 
+  /**
+   * A representative link of the package.
+   */
+  url: string;
+
   /**
    * Whether the extension is currently installed.
    */
@@ -180,6 +190,10 @@ export class ListModel extends VDomModel {
       entries[pkg.name] = {
         name: pkg.name,
         description: pkg.description,
+        url:
+          'homepage' in pkg.links
+            ? pkg.links.homepage
+            : 'repository' in pkg.links ? pkg.links.repository : pkg.links.npm,
         installed: false,
         enabled: false,
         status: null,
@@ -206,6 +220,7 @@ export class ListModel extends VDomModel {
           entries[pkg.name] = {
             name: pkg.name,
             description: pkg.description,
+            url: pkg.url,
             installed: pkg.installed !== false,
             enabled: pkg.enabled,
             status: pkg.status,

+ 5 - 1
packages/extensionmanager/src/widget.tsx

@@ -162,7 +162,11 @@ function ListEntry(props: ListEntry.IProperties): React.ReactElement<any> {
       title={title}
     >
       <div className="jp-extensionmanager-entry-title">
-        <div className="jp-extensionmanager-entry-name">{entry.name}</div>
+        <div className="jp-extensionmanager-entry-name">
+          <a href={entry.url} target="_blank">
+            {entry.name}
+          </a>
+        </div>
         <div className="jp-extensionmanager-entry-jupyter-org" />
       </div>
       <div className="jp-extensionmanager-entry-content">