Repository: kubernetes/dashboard
Pull request #4424 (2019-10-16 13:31:46)

Reduce code duplication and fix typo
Reduce code duplication and fix typo in api/type.go and handler/apihandler.go

k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/dashboard/pull/4424#" title="Author self-approved">zehuaiWANG</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **danielromlein**
You can assign the PR to them by writing `/assign @danielromlein` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fdashboard).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes/dashboard/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["danielromlein"]} -->
codecov[bot]: # [Codecov](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=h1) Report
> Merging [#4424](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=desc) into [master](https://codecov.io/gh/kubernetes/dashboard/commit/94460352284eafddbe44babad53b0c0651b28991?src=pr&el=desc) will **increase** coverage by `0.02%`.
> The diff coverage is `31.57%`.

[![Impacted file tree graph](https://codecov.io/gh/kubernetes/dashboard/pull/4424/graphs/tree.svg?width=650&token=Wj7jysJ9A5&height=150&src=pr)](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master    #4424      +/-   ##
==========================================
+ Coverage   46.71%   46.74%   +0.02%     
==========================================
  Files         200      200              
  Lines        9380     9373       -7     
  Branches      107      107              
==========================================
- Hits         4382     4381       -1     
+ Misses       4724     4718       -6     
  Partials      274      274
```


| [Impacted Files](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/app/backend/api/types.go](https://codecov.io/gh/kubernetes/dashboard/pull/4424/diff?src=pr&el=tree#diff-c3JjL2FwcC9iYWNrZW5kL2FwaS90eXBlcy5nbw==) | `35.29% <100%> (-3.6%)` | :arrow_down: |
| [src/app/backend/handler/apihandler.go](https://codecov.io/gh/kubernetes/dashboard/pull/4424/diff?src=pr&el=tree#diff-c3JjL2FwcC9iYWNrZW5kL2hhbmRsZXIvYXBpaGFuZGxlci5nbw==) | `27.89% <7.14%> (+0.08%)` | :arrow_up: |
| [...p/backend/integration/metric/common/aggregation.go](https://codecov.io/gh/kubernetes/dashboard/pull/4424/diff?src=pr&el=tree#diff-c3JjL2FwcC9iYWNrZW5kL2ludGVncmF0aW9uL21ldHJpYy9jb21tb24vYWdncmVnYXRpb24uZ28=) | `90.9% <0%> (+1.81%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=footer). Last update [9446035...a771aff](https://codecov.io/gh/kubernetes/dashboard/pull/4424?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

zehuaiWANG: @floreks @maciaszczykm hi~floreks, maciaszczykm. I saw the ci is failed, and the following is the log. But I had used golangci-lint in my computer and it seems okay, so I really don't what's problem is, could you help me to have a look?
-------------
 npm ERR! kubernetes-dashboard@2.0.0-beta5 check:backend: `golangci-lint run -c .golangci.yml src/app/backend/...`
--------------

Patch:
diff --git a/aio/scripts/conf.sh b/aio/scripts/conf.sh
index f3bff7d43..70ec88c27 100644
--- a/aio/scripts/conf.sh
+++ b/aio/scripts/conf.sh
@@ -41,7 +41,7 @@ ARCH=$(uname | awk '{print tolower($0)}')
 # Local cluster configuration (check start-cluster.sh script for more details).
 HEAPSTER_VERSION="v1.5.4"
 HEAPSTER_PORT=8082
-KIND_VERSION="0.2.1"
+KIND_VERSION="v0.5.1"
 KIND_BIN=${CACHE_DIR}/kind-${KIND_VERSION}
 
 # Setup logger.
diff --git a/aio/scripts/start-cluster.sh b/aio/scripts/start-cluster.sh
index f00ffc167..4d3a19ba4 100755
--- a/aio/scripts/start-cluster.sh
+++ b/aio/scripts/start-cluster.sh
@@ -36,7 +36,7 @@ function start-ci-heapster {
 }
 
 function start-kind {
-  ${KIND_BIN} create cluster --name="k8s-cluster-ci"
+  ${KIND_BIN} create cluster --name="k8s-cluster-ci" --image=kindest/node:v1.16.2
   ensure-kubeconfig
   if [ "${CI}" = true ] ; then
     start-ci-heapster
diff --git a/cypress/fixtures/.keep b/cypress/fixtures/.keep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/cypress/fixtures/crd.yaml b/cypress/fixtures/crd.yaml
new file mode 100644
index 000000000..4a457068d
--- /dev/null
+++ b/cypress/fixtures/crd.yaml
@@ -0,0 +1,11 @@
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+  name: foos.samplecontroller.k8s.io
+spec:
+  group: samplecontroller.k8s.io
+  version: v1alpha1
+  names:
+    kind: Foo
+    plural: foos
+  scope: Namespaced
diff --git a/cypress/fixtures/example-foo.yaml b/cypress/fixtures/example-foo.yaml
new file mode 100644
index 000000000..897059c3d
--- /dev/null
+++ b/cypress/fixtures/example-foo.yaml
@@ -0,0 +1,7 @@
+apiVersion: samplecontroller.k8s.io/v1alpha1
+kind: Foo
+metadata:
+  name: example-foo
+spec:
+  deploymentName: example-foo
+  replicas: 1
diff --git a/cypress/integration/crd.spec.js b/cypress/integration/crd.spec.js
new file mode 100644
index 000000000..961710b50
--- /dev/null
+++ b/cypress/integration/crd.spec.js
@@ -0,0 +1,130 @@
+describe('Custom Resource Definitions', () => {
+  it('crd list is initially empty', () => {
+    cy.visit('/');
+
+    cy.get('#sidebar-crd').click();
+    cy.url().should('include', '/#/customresourcedefinition');
+
+    cy.get('#zero-state').should('be.visible');
+  });
+
+  it('create a crd', () => {
+    cy.fixture('crd.yaml').then(crd => {
+      cy.createResource({content: crd});
+      cy.reload();
+    });
+  });
+
+  it('crd list should contain the new crd', () => {
+    cy.get('#zero-state').should('not.be.visible');
+    cy.get('kd-crd-list').within(() => {
+      cy.get('mat-row').should('have.length', 1);
+    });
+  });
+
+  it('go to crd details page', () => {
+    cy.get('kd-crd-list').within(() => {
+      cy.get('a')
+        .first()
+        .click();
+    });
+    cy.url().should(
+      'include',
+      '/#/customresourcedefinition/foos.samplecontroller.k8s.io?namespace=default',
+    );
+
+    // loads correctly
+    cy.get('kd-object-meta').within(() => {
+      cy.get('kd-property')
+        .first()
+        .contains('foos.samplecontroller.k8s.io');
+    });
+
+    // has resource information
+    cy.get('#resource-information').within(() => {
+      cy.get('kd-property').should('have.length', 3);
+
+      cy.get('#resource-version')
+        .contains('v1alpha1');
+      cy.get('#resource-scope')
+        .contains('Namespaced');
+      cy.get('#resource-group')
+        .contains('samplecontroller.k8s.io');
+    });
+
+    // has accepted names
+    cy.get('#accepted-names').within(() => {
+      cy.get('kd-property').should('have.length', 4);
+
+      cy.get('kd-property')
+        .eq(0)
+        .contains('foos');
+      cy.get('kd-property')
+        .eq(1)
+        .contains('foo');
+      cy.get('kd-property')
+        .eq(2)
+        .contains('Foo');
+      cy.get('kd-property')
+        .eq(3)
+        .contains('FooList');
+    });
+
+    // has empty object section
+    cy.get('kd-crd-object-list').within(() => {
+      cy.get('#zero-state').should('be.visible');
+    });
+
+    // has one version
+    cy.get('kd-crd-versions-list').within(() => {
+      cy.get('mat-row').should('have.length', 1);
+
+      cy.get('mat-cell')
+        .first()
+        .contains('v1alpha1');
+    });
+  });
+
+  it('create a crd object', () => {
+    cy.fixture('example-foo.yaml').then(object => {
+      cy.createResource({content: object, namespace: 'default'});
+      cy.reload();
+    });
+  });
+
+  it('crd objects list should contain the new object', () => {
+    cy.get('kd-crd-object-list').within(() => {
+      cy.get('#zero-state').should('not.be.visible');
+
+      cy.get('mat-row').should('have.length', 1);
+      cy.get('mat-cell')
+        .first()
+        .contains('example-foo');
+    });
+  });
+
+  it('go to object detail page', () => {
+    cy.get('kd-crd-object-list').within(() => {
+      cy.get('a')
+        .first()
+        .click();
+    });
+
+    cy.url().should(
+      'include',
+      '/#/customresourcedefinition/foos.samplecontroller.k8s.io/default/example-foo?namespace=default',
+    );
+
+    cy.get('kd-object-meta').within(() => {
+      // Name
+      cy.get('kd-property')
+        .eq(0)
+        .contains('example-foo');
+
+      // Namespace
+      cy.get('kd-property')
+        .eq(1)
+        .contains('default');
+    });
+  });
+});
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
index d60f01bf9..a1e91f54a 100644
--- a/cypress/support/commands.js
+++ b/cypress/support/commands.js
@@ -1,3 +1,31 @@
-// ***********************************************
-// Create various custom commands and overwrite existing commands.
-// ***********************************************
+Cypress.Commands.add(
+  'createResource',
+  ({resource = '', name = '', namespace = '', content = ''}) => {
+    return getCsrfToken('appdeploymentfromfile').then(response => {
+      const {token} = response.body;
+
+      return cy.request({
+        url: '/api/v1/appdeploymentfromfile',
+        method: 'POST',
+        headers: {
+          Accept: 'application/json',
+          'Content-Type': 'application/json',
+          'X-CSRF-TOKEN': token,
+        },
+        body: {
+          name,
+          namespace,
+          resource,
+          content,
+        },
+      });
+    });
+  },
+);
+
+function getCsrfToken(action) {
+  return cy.request({
+    url: `api/v1/csrftoken/${action}`,
+    method: 'GET',
+  });
+}
diff --git a/docs/developer/internationalization.md b/docs/developer/internationalization.md
index 13172388d..a0377b61f 100644
--- a/docs/developer/internationalization.md
+++ b/docs/developer/internationalization.md
@@ -1,6 +1,6 @@
 # Internationalization
 
-Based on current browser locale the Dashboard can be displayed in one of the supported languages listed below. In case it does not work, make sure that your browser's locale is identified with correct language code.
+Based on current browser locale the Dashboard can be displayed in one of the supported languages listed below. In case it does not work, make sure that your browser's locale is identified with correct language code. In more details, Dashboard determines requested language based on HTTP `Accept-Language` header from browser. We can check which language codes are requested by browser on `Network` tab in developer tool of browser.
 
 | Language           | Code |
 |--------------------|------|
@@ -40,6 +40,7 @@ Find new localizable texts in `i18n/[locale]/messages.[locale].xlf` file and tra
 Since dashboard team can not review translation files in your language, so dashboard team transfers authority to review and approve for updating your translation file. At first, you need to organize translation team for your language that manages dashboard translation file.
 
 1. Add your locale, e.g. `fr` or `ja`, into `"languages"` array of `"xfillmergeOptions"` in `package.json` file.
+  **Impotant: Locales should be written in lower case to be handled by Dashboard, e.g. `zh-tw`, not `zh-TW`**
 2. Run `npm run fix:i18n`. Then translation file for your language, e.g. `i18n/fr/messages.fr.xlf`, would be generated.
 3. Open your translation file and translate texts in `<target>` element into your language.
 
diff --git a/i18n/fr/messages.fr.xlf b/i18n/fr/messages.fr.xlf
index 0ad239c74..48b40f661 100644
--- a/i18n/fr/messages.fr.xlf
+++ b/i18n/fr/messages.fr.xlf
@@ -31,7 +31,7 @@
         <target>Mettre à jour</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">43</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
@@ -39,11 +39,11 @@
         <target>Annuler</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="linenumber">47</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/create/from/form/createnamespace/template.html</context>
@@ -87,11 +87,11 @@
         <target>Supprimer</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
       <trans-unit id="db0cf322b4bfc4f0466c9826810e3800dc4687dd" datatype="html">
@@ -1167,19 +1167,19 @@
         <target>Éditer</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
       </trans-unit>
       <trans-unit id="222a0537c59f20178268925dc70fb661a20dbdb7" datatype="html">
         <source>There is nothing to display here</source>
         <target>Il n'y a rien à afficher ici</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">../src/app/frontend/common/components/zerostate/template.html</context>
-          <context context-type="linenumber">23</context>
+          <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="sourcefile">../src/app/frontend/common/components/zerostate/template.html</context>
+          <context context-type="linenumber">23</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7066e1af065c2b6a45b83dc874af7d15f1fba435" datatype="html">
@@ -1919,7 +1919,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
       </trans-unit>
       <trans-unit id="90ae2a4959c979abc049f4652f59b85e993e16cd" datatype="html">
@@ -2027,7 +2027,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">41</context>
         </context-group>
       </trans-unit>
       <trans-unit id="484b0e541230d60ddb5fbd771a34a5c8d90e7a57" datatype="html">
@@ -2355,7 +2355,7 @@
         <target>Tous les espaces de noms</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6fac407fa5aec6e3291cf87a7ed3252add8a7d28" datatype="html">
@@ -2363,7 +2363,7 @@
         <target>ESPACES DE NOMS</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="2489eefea00931942b91f4a1ae109514b591e2e1" datatype="html">
@@ -2467,7 +2467,7 @@
         <target>Aucune ressource trouvée.</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">24</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="a44df39b2ce0f5d85e406c3aeec76ae898dbf9af" datatype="html">
@@ -2499,7 +2499,7 @@
         <target>Version</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">
@@ -2507,7 +2507,7 @@
         <target>Portée</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d9ac1caf6715c8011155c0a027d544dbeca63062" datatype="html">
@@ -2515,7 +2515,7 @@
         <target>Sous-ressources</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">47</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1ec17de9560711cd81108ccf93eb5b1df4eb6d4c" datatype="html">
@@ -2523,7 +2523,7 @@
         <target>Noms acceptés</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">55</context>
         </context-group>
       </trans-unit>
       <trans-unit id="fa1312fe00bfe38662df238fa059bcd75866ecd7" datatype="html">
@@ -2531,7 +2531,7 @@
         <target>Pluriel</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">57</context>
+          <context context-type="linenumber">62</context>
         </context-group>
       </trans-unit>
       <trans-unit id="712232bebfc8836a394c358ce9679452fabb945f" datatype="html">
@@ -2539,7 +2539,7 @@
         <target>Singulier</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="linenumber">67</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5a2fcb3c1d8240f8f966564ee3500235d7427245" datatype="html">
@@ -2547,7 +2547,7 @@
         <target>Type de liste</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">72</context>
+          <context context-type="linenumber">77</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d27e60f49dba9b7994331db545a4c14e1e2683ad" datatype="html">
@@ -2555,7 +2555,7 @@
         <target>Noms abrégés</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">77</context>
+          <context context-type="linenumber">82</context>
         </context-group>
       </trans-unit>
       <trans-unit id="04201f9d27abd7d6f58a4328ab98063ce1072006" datatype="html">
@@ -2563,7 +2563,7 @@
         <target>Catégories</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">82</context>
+          <context context-type="linenumber">87</context>
         </context-group>
       </trans-unit>
       <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@@ -2835,7 +2835,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">136</context>
+          <context context-type="linenumber">137</context>
         </context-group>
       </trans-unit>
       <trans-unit id="03511cfe5e28ed3380ab198c13cf62ebde1e89e6" datatype="html">
@@ -2844,7 +2844,7 @@
         <target>Paramètres</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">148</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c2fa735eb6b1b2c10171c5acb818f6e0975a9406" datatype="html">
@@ -2853,7 +2853,7 @@
         <target>À propos</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">152</context>
+          <context context-type="linenumber">153</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
diff --git a/i18n/ja/messages.ja.xlf b/i18n/ja/messages.ja.xlf
index 137e95a24..9078bb060 100644
--- a/i18n/ja/messages.ja.xlf
+++ b/i18n/ja/messages.ja.xlf
@@ -31,7 +31,7 @@
         <target>更新</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">43</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
@@ -39,11 +39,11 @@
         <target>キャンセル</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="linenumber">47</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/create/from/form/createnamespace/template.html</context>
@@ -87,11 +87,11 @@
         <target>削除</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
       <trans-unit id="db0cf322b4bfc4f0466c9826810e3800dc4687dd" datatype="html">
@@ -523,7 +523,7 @@
         <target>編集</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c97f017e8bd3fb17065c3c94515a2cca404f0157" datatype="html">
@@ -1331,7 +1331,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7357d53d819cc1f5dd329a4fff4c582461ee1317" datatype="html">
@@ -1464,7 +1464,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">41</context>
         </context-group>
       </trans-unit>
       <trans-unit id="484b0e541230d60ddb5fbd771a34a5c8d90e7a57" datatype="html">
@@ -1668,7 +1668,7 @@
         <target>表示するものがありません</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/zerostate/template.html</context>
@@ -1680,7 +1680,7 @@
         <target>リソースがありません。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">24</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">
@@ -1756,7 +1756,7 @@
         <target>すべてのネームスペース</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6fac407fa5aec6e3291cf87a7ed3252add8a7d28" datatype="html">
@@ -1764,7 +1764,7 @@
         <target>ネームスペース</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d12515fa127fafff639075d37498207138a5d18a" datatype="html">
@@ -2565,7 +2565,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">136</context>
+          <context context-type="linenumber">137</context>
         </context-group>
       </trans-unit>
       <trans-unit id="03511cfe5e28ed3380ab198c13cf62ebde1e89e6" datatype="html">
@@ -2574,7 +2574,7 @@
         <target>設定</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">148</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c2fa735eb6b1b2c10171c5acb818f6e0975a9406" datatype="html">
@@ -2583,7 +2583,7 @@
         <target>Kubernetes Dashboard について</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">152</context>
+          <context context-type="linenumber">153</context>
         </context-group>
       </trans-unit>
       <trans-unit id="01269ce8051398188d50367ead1831407e77d504" datatype="html">
@@ -2907,7 +2907,7 @@
         <target>バージョン</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">
@@ -2915,7 +2915,7 @@
         <target>スコープ</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d9ac1caf6715c8011155c0a027d544dbeca63062" datatype="html">
@@ -2923,7 +2923,7 @@
         <target>サブリソース</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">47</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1ec17de9560711cd81108ccf93eb5b1df4eb6d4c" datatype="html">
@@ -2931,7 +2931,7 @@
         <target>容認された名前</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">55</context>
         </context-group>
       </trans-unit>
       <trans-unit id="fa1312fe00bfe38662df238fa059bcd75866ecd7" datatype="html">
@@ -2939,7 +2939,7 @@
         <target>複数</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">57</context>
+          <context context-type="linenumber">62</context>
         </context-group>
       </trans-unit>
       <trans-unit id="712232bebfc8836a394c358ce9679452fabb945f" datatype="html">
@@ -2947,7 +2947,7 @@
         <target>単数</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="linenumber">67</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5a2fcb3c1d8240f8f966564ee3500235d7427245" datatype="html">
@@ -2955,7 +2955,7 @@
         <target>種類一覧</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">72</context>
+          <context context-type="linenumber">77</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d27e60f49dba9b7994331db545a4c14e1e2683ad" datatype="html">
@@ -2963,7 +2963,7 @@
         <target>省略名</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">77</context>
+          <context context-type="linenumber">82</context>
         </context-group>
       </trans-unit>
       <trans-unit id="04201f9d27abd7d6f58a4328ab98063ce1072006" datatype="html">
@@ -2971,7 +2971,7 @@
         <target>カテゴリー</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">82</context>
+          <context context-type="linenumber">87</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7db62a1ccd31f1bb55e3532b0f58984a492296a8" datatype="html">
diff --git a/i18n/ko/messages.ko.xlf b/i18n/ko/messages.ko.xlf
index 6bbf5ec76..71929bc65 100644
--- a/i18n/ko/messages.ko.xlf
+++ b/i18n/ko/messages.ko.xlf
@@ -31,7 +31,7 @@
         <target state="new">업데이트</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">43</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
@@ -39,11 +39,11 @@
         <target state="new">취소</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="linenumber">47</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/create/from/form/createnamespace/template.html</context>
@@ -87,11 +87,11 @@
         <target state="new">삭제</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
       <trans-unit id="db0cf322b4bfc4f0466c9826810e3800dc4687dd" datatype="html">
@@ -727,7 +727,7 @@
         <target state="new">편집</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c0adb9c346b1a2715886258558098dc32bd10c40" datatype="html">
@@ -1523,7 +1523,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
       </trans-unit>
       <trans-unit id="81054386839df6c7c45d298e0044956413589ef4" datatype="html">
@@ -1613,7 +1613,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">41</context>
         </context-group>
       </trans-unit>
       <trans-unit id="484b0e541230d60ddb5fbd771a34a5c8d90e7a57" datatype="html">
@@ -1781,7 +1781,7 @@
         <target state="new">여기에 표시할 항목이 없습니다.</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/zerostate/template.html</context>
@@ -1793,7 +1793,7 @@
         <target state="new">검색된 리소스가 없습니다.</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">24</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">
@@ -1917,7 +1917,7 @@
         <target state="new">모든 네임스페이스</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6fac407fa5aec6e3291cf87a7ed3252add8a7d28" datatype="html">
@@ -1925,7 +1925,7 @@
         <target state="new">네임스페이스</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">
@@ -2619,7 +2619,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">136</context>
+          <context context-type="linenumber">137</context>
         </context-group>
       </trans-unit>
       <trans-unit id="03511cfe5e28ed3380ab198c13cf62ebde1e89e6" datatype="html">
@@ -2629,7 +2629,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">148</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c2fa735eb6b1b2c10171c5acb818f6e0975a9406" datatype="html">
@@ -2639,7 +2639,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">152</context>
+          <context context-type="linenumber">153</context>
         </context-group>
       </trans-unit>
       <trans-unit id="01269ce8051398188d50367ead1831407e77d504" datatype="html">
@@ -2969,7 +2969,7 @@
         <target state="new">버전</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">
@@ -2977,7 +2977,7 @@
         <target state="new">범위</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d9ac1caf6715c8011155c0a027d544dbeca63062" datatype="html">
@@ -2985,7 +2985,7 @@
         <target state="new">Subresources</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">47</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1ec17de9560711cd81108ccf93eb5b1df4eb6d4c" datatype="html">
@@ -2993,7 +2993,7 @@
         <target state="new">Accepted Names</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">55</context>
         </context-group>
       </trans-unit>
       <trans-unit id="fa1312fe00bfe38662df238fa059bcd75866ecd7" datatype="html">
@@ -3001,7 +3001,7 @@
         <target state="new">복수</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">57</context>
+          <context context-type="linenumber">62</context>
         </context-group>
       </trans-unit>
       <trans-unit id="712232bebfc8836a394c358ce9679452fabb945f" datatype="html">
@@ -3009,7 +3009,7 @@
         <target state="new">단수</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="linenumber">67</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5a2fcb3c1d8240f8f966564ee3500235d7427245" datatype="html">
@@ -3017,7 +3017,7 @@
         <target state="new">종류 리스트</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">72</context>
+          <context context-type="linenumber">77</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d27e60f49dba9b7994331db545a4c14e1e2683ad" datatype="html">
@@ -3025,7 +3025,7 @@
         <target state="new">단축 이름</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">77</context>
+          <context context-type="linenumber">82</context>
         </context-group>
       </trans-unit>
       <trans-unit id="04201f9d27abd7d6f58a4328ab98063ce1072006" datatype="html">
@@ -3033,7 +3033,7 @@
         <target state="new">카테고리</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">82</context>
+          <context context-type="linenumber">87</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5ad4eecbd0fe09c34678fefce317a052af39dc96" datatype="html">
@@ -3339,6 +3339,8 @@
         
         
         
+        
+        
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/create/from/form/template.html</context>
           <context context-type="linenumber">54</context>
diff --git a/i18n/messages.xlf b/i18n/messages.xlf
index 7b66f8b7b..ec48a03db 100644
--- a/i18n/messages.xlf
+++ b/i18n/messages.xlf
@@ -28,18 +28,18 @@
         <source>Update</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">43</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
         <source>Cancel</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="linenumber">47</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/create/from/form/createnamespace/template.html</context>
@@ -74,11 +74,11 @@
         <source>Delete</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
       <trans-unit id="db0cf322b4bfc4f0466c9826810e3800dc4687dd" datatype="html">
@@ -646,7 +646,7 @@
         <source>Edit</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c0adb9c346b1a2715886258558098dc32bd10c40" datatype="html">
@@ -1411,7 +1411,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
       </trans-unit>
       <trans-unit id="81054386839df6c7c45d298e0044956413589ef4" datatype="html">
@@ -1496,7 +1496,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">41</context>
         </context-group>
       </trans-unit>
       <trans-unit id="484b0e541230d60ddb5fbd771a34a5c8d90e7a57" datatype="html">
@@ -1645,7 +1645,7 @@
         <source>There is nothing to display here</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/zerostate/template.html</context>
@@ -1656,7 +1656,7 @@
         <source>No resources found.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">24</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">
@@ -1762,14 +1762,14 @@
         <source>All namespaces</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6fac407fa5aec6e3291cf87a7ed3252add8a7d28" datatype="html">
         <source>NAMESPACES</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">
@@ -2362,7 +2362,7 @@
       </source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">136</context>
+          <context context-type="linenumber">137</context>
         </context-group>
       </trans-unit>
       <trans-unit id="03511cfe5e28ed3380ab198c13cf62ebde1e89e6" datatype="html">
@@ -2370,7 +2370,7 @@
       </source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">148</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c2fa735eb6b1b2c10171c5acb818f6e0975a9406" datatype="html">
@@ -2378,7 +2378,7 @@
       </source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">152</context>
+          <context context-type="linenumber">153</context>
         </context-group>
       </trans-unit>
       <trans-unit id="01269ce8051398188d50367ead1831407e77d504" datatype="html">
@@ -2654,63 +2654,63 @@
         <source>Version</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">
         <source>Scope</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d9ac1caf6715c8011155c0a027d544dbeca63062" datatype="html">
         <source>Subresources</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">47</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1ec17de9560711cd81108ccf93eb5b1df4eb6d4c" datatype="html">
         <source>Accepted Names</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">55</context>
         </context-group>
       </trans-unit>
       <trans-unit id="fa1312fe00bfe38662df238fa059bcd75866ecd7" datatype="html">
         <source>Plural</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">57</context>
+          <context context-type="linenumber">62</context>
         </context-group>
       </trans-unit>
       <trans-unit id="712232bebfc8836a394c358ce9679452fabb945f" datatype="html">
         <source>Singular</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="linenumber">67</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5a2fcb3c1d8240f8f966564ee3500235d7427245" datatype="html">
         <source>List Kind</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">72</context>
+          <context context-type="linenumber">77</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d27e60f49dba9b7994331db545a4c14e1e2683ad" datatype="html">
         <source>Short Names</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">77</context>
+          <context context-type="linenumber">82</context>
         </context-group>
       </trans-unit>
       <trans-unit id="04201f9d27abd7d6f58a4328ab98063ce1072006" datatype="html">
         <source>Categories</source>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">82</context>
+          <context context-type="linenumber">87</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5ad4eecbd0fe09c34678fefce317a052af39dc96" datatype="html">
diff --git a/i18n/zh/messages.zh.xlf b/i18n/zh/messages.zh.xlf
index 0f43c5e2e..6e544fdf9 100644
--- a/i18n/zh/messages.zh.xlf
+++ b/i18n/zh/messages.zh.xlf
@@ -31,7 +31,7 @@
         <target state="new">更新</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">43</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">
@@ -39,11 +39,11 @@
         <target state="new">取消</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/editresource/template.html</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="linenumber">47</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/create/from/form/createnamespace/template.html</context>
@@ -87,11 +87,11 @@
         <target state="new">删除</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/dialogs/deleteresource/template.html</context>
-          <context context-type="linenumber">44</context>
+          <context context-type="linenumber">45</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
       <trans-unit id="db0cf322b4bfc4f0466c9826810e3800dc4687dd" datatype="html">
@@ -727,7 +727,7 @@
         <target state="new">编辑</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/column/menu/template.html</context>
-          <context context-type="linenumber">48</context>
+          <context context-type="linenumber">49</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c0adb9c346b1a2715886258558098dc32bd10c40" datatype="html">
@@ -1523,7 +1523,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">72</context>
         </context-group>
       </trans-unit>
       <trans-unit id="81054386839df6c7c45d298e0044956413589ef4" datatype="html">
@@ -1613,7 +1613,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">38</context>
+          <context context-type="linenumber">41</context>
         </context-group>
       </trans-unit>
       <trans-unit id="484b0e541230d60ddb5fbd771a34a5c8d90e7a57" datatype="html">
@@ -1781,7 +1781,7 @@
         <target state="new">这里没有可以显示的</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">21</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/zerostate/template.html</context>
@@ -1793,7 +1793,7 @@
         <target state="new">找不到资源。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/list/zerostate/template.html</context>
-          <context context-type="linenumber">24</context>
+          <context context-type="linenumber">25</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">
@@ -1869,7 +1869,7 @@
         <target state="new">全部命名空间</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
       <trans-unit id="6fac407fa5aec6e3291cf87a7ed3252add8a7d28" datatype="html">
@@ -1877,7 +1877,7 @@
         <target state="new">命名空间</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/common/components/namespace/template.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d12515fa127fafff639075d37498207138a5d18a" datatype="html">
@@ -2619,7 +2619,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">136</context>
+          <context context-type="linenumber">137</context>
         </context-group>
       </trans-unit>
       <trans-unit id="03511cfe5e28ed3380ab198c13cf62ebde1e89e6" datatype="html">
@@ -2629,7 +2629,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">147</context>
+          <context context-type="linenumber">148</context>
         </context-group>
       </trans-unit>
       <trans-unit id="c2fa735eb6b1b2c10171c5acb818f6e0975a9406" datatype="html">
@@ -2639,7 +2639,7 @@
       </target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/chrome/nav/template.html</context>
-          <context context-type="linenumber">152</context>
+          <context context-type="linenumber">153</context>
         </context-group>
       </trans-unit>
       <trans-unit id="01269ce8051398188d50367ead1831407e77d504" datatype="html">
@@ -2969,7 +2969,7 @@
         <target state="new">Version</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">
@@ -2977,7 +2977,7 @@
         <target state="new">Scope</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d9ac1caf6715c8011155c0a027d544dbeca63062" datatype="html">
@@ -2985,7 +2985,7 @@
         <target state="new">Subresources</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">43</context>
+          <context context-type="linenumber">47</context>
         </context-group>
       </trans-unit>
       <trans-unit id="1ec17de9560711cd81108ccf93eb5b1df4eb6d4c" datatype="html">
@@ -2993,7 +2993,7 @@
         <target state="new">Accepted Names</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="linenumber">55</context>
         </context-group>
       </trans-unit>
       <trans-unit id="fa1312fe00bfe38662df238fa059bcd75866ecd7" datatype="html">
@@ -3001,7 +3001,7 @@
         <target state="new">Plural</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">57</context>
+          <context context-type="linenumber">62</context>
         </context-group>
       </trans-unit>
       <trans-unit id="712232bebfc8836a394c358ce9679452fabb945f" datatype="html">
@@ -3009,7 +3009,7 @@
         <target state="new">Singular</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="linenumber">67</context>
         </context-group>
       </trans-unit>
       <trans-unit id="5a2fcb3c1d8240f8f966564ee3500235d7427245" datatype="html">
@@ -3017,7 +3017,7 @@
         <target state="new">List Kind</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">72</context>
+          <context context-type="linenumber">77</context>
         </context-group>
       </trans-unit>
       <trans-unit id="d27e60f49dba9b7994331db545a4c14e1e2683ad" datatype="html">
@@ -3025,7 +3025,7 @@
         <target state="new">Short Names</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">77</context>
+          <context context-type="linenumber">82</context>
         </context-group>
       </trans-unit>
       <trans-unit id="04201f9d27abd7d6f58a4328ab98063ce1072006" datatype="html">
@@ -3033,7 +3033,7 @@
         <target state="new">Categories</target>
         <context-group purpose="location">
           <context context-type="sourcefile">../src/app/frontend/crd/detail/template.html</context>
-          <context context-type="linenumber">82</context>
+          <context context-type="linenumber">87</context>
         </context-group>
       </trans-unit>
       <trans-unit id="7db62a1ccd31f1bb55e3532b0f58984a492296a8" datatype="html">
diff --git a/package-lock.json b/package-lock.json
index a90f2eb20..b4d0e75fe 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,12 +5,12 @@
   "requires": true,
   "dependencies": {
     "@angular-devkit/architect": {
-      "version": "0.803.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.9.tgz",
-      "integrity": "sha512-grbnPxZ8vnd1UWQUWdJKBxsG8kD6Pj9XtTOEqKg5gH9Vha1zKkEnROWG18TFZzHrJffCE8E18c0OgDIjz+pL3g==",
+      "version": "0.803.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.10.tgz",
+      "integrity": "sha512-MqlmmQ6d4o4lqgZF0Nq0YiESW3CuSeLUIl9SZW6pphGTPDTA1LyyDhP1Dd2GIB5hxwBmH/EkbwbBtzJCauZHZQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.9",
+        "@angular-devkit/core": "8.3.10",
         "rxjs": "6.4.0"
       },
       "dependencies": {
@@ -26,18 +26,18 @@
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "0.803.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.803.9.tgz",
-      "integrity": "sha512-fSA3b506Z06l+Lvbw8xxytG+/WcWclMoO3QTMec897shXAFAZNtK+3KtoF2VITTQcYP12MNIVM7TQiTGof70AQ==",
+      "version": "0.803.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.803.10.tgz",
+      "integrity": "sha512-dbS8lIffgsvFGtPkPqzPkiQkDBcLBkDWfFm7eOpY/QmRE+614GwEFmRRhSlUI5p5+lzHrkSuNU1YjV9yBsNl1Q==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.803.9",
-        "@angular-devkit/build-optimizer": "0.803.9",
-        "@angular-devkit/build-webpack": "0.803.9",
-        "@angular-devkit/core": "8.3.9",
+        "@angular-devkit/architect": "0.803.10",
+        "@angular-devkit/build-optimizer": "0.803.10",
+        "@angular-devkit/build-webpack": "0.803.10",
+        "@angular-devkit/core": "8.3.10",
         "@babel/core": "7.5.5",
         "@babel/preset-env": "7.5.5",
-        "@ngtools/webpack": "8.3.9",
+        "@ngtools/webpack": "8.3.10",
         "ajv": "6.10.2",
         "autoprefixer": "9.6.1",
         "browserslist": "4.6.6",
@@ -859,9 +859,9 @@
           }
         },
         "schema-utils": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz",
-          "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==",
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
           "dev": true,
           "requires": {
             "ajv": "^6.10.2",
@@ -969,9 +969,9 @@
       }
     },
     "@angular-devkit/build-optimizer": {
-      "version": "0.803.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.803.9.tgz",
-      "integrity": "sha512-AeuQroeK7eCTTc7JG+DLzglGGp8aymA+9hkFveOoUgqdhnCG9FaqBew8ZetBD6FEokU7eFT4bERJmgq497MTOg==",
+      "version": "0.803.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.803.10.tgz",
+      "integrity": "sha512-TEtsExowmvGoMvW4AU4ZaRGYb7rog7vXSLaOw5d/y+xAQJaUmR+zFWwyB4ON4C+M3pPe/TBPMI/ORka08rlmgg==",
       "dev": true,
       "requires": {
         "loader-utils": "1.2.3",
@@ -990,15 +990,14 @@
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.803.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.803.9.tgz",
-      "integrity": "sha512-IqS7xAEigI9Uwbv8WtcDN9YYqfYJsS/HxRq0XNYXUfHsdbZGb2qBrQ/8QODbh3V1S99yxTiPn0x+LYhO98zlnA==",
+      "version": "0.803.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.803.10.tgz",
+      "integrity": "sha512-G2fSP/HF7cLN6whwFYcrn6G0U418Zpj/JBLKYHDjhtZyXWGGYbxExDlHYWEmiG72u6S5MHFShhKW19nSehf8bA==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.803.9",
-        "@angular-devkit/core": "8.3.9",
-        "rxjs": "6.4.0",
-        "webpack-merge": "4.2.1"
+        "@angular-devkit/architect": "0.803.10",
+        "@angular-devkit/core": "8.3.10",
+        "rxjs": "6.4.0"
       },
       "dependencies": {
         "rxjs": {
@@ -1013,9 +1012,9 @@
       }
     },
     "@angular-devkit/core": {
-      "version": "8.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.9.tgz",
-      "integrity": "sha512-LYNdY8UpcEGaqWq0smPhSAiz+Oq1gv4j1LGLLyY1d2CJpf4czIuI8SkTHtmGMjpKy8ss/Vk1mHwRjBrWB0dUag==",
+      "version": "8.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.10.tgz",
+      "integrity": "sha512-qDqgOGOL3arCTF3u7DRCWGKhcU1N6d1Bb1ynBh1b30krLIQbZTXRToz5VovN4sxOvxN8xV0NjFaXpsRAIC2QfQ==",
       "dev": true,
       "requires": {
         "ajv": "6.10.2",
@@ -3035,12 +3034,12 @@
       }
     },
     "@ngtools/webpack": {
-      "version": "8.3.9",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.9.tgz",
-      "integrity": "sha512-SicYBW+3GA0S3q2YMkbNeoidUK0mjiNYk/Im+WaNo9uxyE8Jq2Ui5NXQ9QUxANtFsaeFomXW5rUwCrgkLYLg0w==",
+      "version": "8.3.10",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.10.tgz",
+      "integrity": "sha512-0Dw3WBZaqexYWK5ymE1J7RPW8IC/MXls4ve2IWq+J8l25aXaLj/XKm6amw7NJt3lbRy02+J9sMEba5YphR5Zuw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.9",
+        "@angular-devkit/core": "8.3.10",
         "enhanced-resolve": "4.1.0",
         "rxjs": "6.4.0",
         "tree-kill": "1.2.1",
@@ -7873,13 +7872,26 @@
       "integrity": "sha512-S1FfZpeBchkhyoY76YAdFzKS4zz9aOK7EeFaNA2aJlyXyA+sgqz6xdxmLPGXEAf0nF44MVN1kSjrA9Kt3ATDQg=="
     },
     "core-js-compat": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
-      "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.3.2.tgz",
+      "integrity": "sha512-gfiK4QnNXhnnHVOIZst2XHdFfdMTPxtR0EGs0TdILMlGIft+087oH6/Sw2xTTIjpWXC9vEwsJA8VG3XTGcmO5g==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.6.6",
+        "browserslist": "^4.7.0",
         "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "browserslist": {
+          "version": "4.7.0",
+          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz",
+          "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==",
+          "dev": true,
+          "requires": {
+            "caniuse-lite": "^1.0.30000989",
+            "electron-to-chromium": "^1.3.247",
+            "node-releases": "^1.1.29"
+          }
+        }
       }
     },
     "core-util-is": {
@@ -10199,9 +10211,9 @@
       },
       "dependencies": {
         "schema-utils": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz",
-          "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==",
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
           "dev": true,
           "requires": {
             "ajv": "^6.10.2",
@@ -15869,9 +15881,9 @@
       }
     },
     "node-releases": {
-      "version": "1.1.35",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.35.tgz",
-      "integrity": "sha512-JGcM/wndCN/2elJlU0IGdVEJQQnJwsLbgPCFd2pY7V0mxf17bZ0Gb/lgOtL29ZQhvEX5shnVhxQyZz3ex94N8w==",
+      "version": "1.1.36",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.36.tgz",
+      "integrity": "sha512-ggXhX6QGyJSjj3r+6ml2LqqC28XOWmKtpb+a15/Zpr9V3yoNazxJNlcQDS9bYaid5FReEWHEgToH1mwoUceWwg==",
       "dev": true,
       "requires": {
         "semver": "^6.3.0"
@@ -20731,9 +20743,9 @@
       },
       "dependencies": {
         "schema-utils": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz",
-          "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==",
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
           "dev": true,
           "requires": {
             "ajv": "^6.10.2",
diff --git a/package.json b/package.json
index 4f2183a68..1131196fe 100644
--- a/package.json
+++ b/package.json
@@ -133,7 +133,7 @@
     "zone.js": "0.9.1"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "0.803.9",
+    "@angular-devkit/build-angular": "0.803.10",
     "@angular/cli": "8.3.7",
     "@angular/compiler-cli": "8.0.3",
     "@angular/language-service": "8.0.3",
diff --git a/src/app/backend/api/types.go b/src/app/backend/api/types.go
index 226a3a57f..9f7b69b57 100644
--- a/src/app/backend/api/types.go
+++ b/src/app/backend/api/types.go
@@ -141,6 +141,7 @@ const (
 	ResourceKindEndpoint                 = "endpoint"
 )
 
+// Scalable method return whether ResourceKind is scalable.
 func (k ResourceKind) Scalable() bool {
 	scalable := []ResourceKind{
 		ResourceKindDeployment,
@@ -177,6 +178,7 @@ const (
 	ClientTypePluginsClient       = "plugin"
 )
 
+// APIMapping is the mapping from resource kind to ClientType and Namespaced.
 type APIMapping struct {
 	// Kubernetes resource name.
 	Resource string
@@ -186,7 +188,7 @@ type APIMapping struct {
 	Namespaced bool
 }
 
-// Mapping from resource kind to K8s apiserver API path. This is mostly pluralization, because
+// KindToAPIMapping is the mapping from resource kind to K8s apiserver API path. This is mostly pluralization, because
 // Kubernetes apiserver uses plural paths and this project singular.
 // Must be kept in sync with the list of supported kinds.
 // See: https://kubernetes.io/docs/reference/
@@ -219,14 +221,14 @@ var KindToAPIMapping = map[string]APIMapping{
 }
 
 // IsSelectorMatching returns true when an object with the given selector targets the same
-// Resources (or subset) that the tested object with the given selector.
-func IsSelectorMatching(labelSelector map[string]string, testedObjectLabels map[string]string) bool {
+// Resources (or subset) that the target object with the given selector.
+func IsSelectorMatching(srcSelector map[string]string, targetObjectLabels map[string]string) bool {
 	// If service has no selectors, then assume it targets different resource.
-	if len(labelSelector) == 0 {
+	if len(srcSelector) == 0 {
 		return false
 	}
-	for label, value := range labelSelector {
-		if rsValue, ok := testedObjectLabels[label]; !ok || rsValue != value {
+	for label, value := range srcSelector {
+		if rsValue, ok := targetObjectLabels[label]; !ok || rsValue != value {
 			return false
 		}
 	}
@@ -234,18 +236,14 @@ func IsSelectorMatching(labelSelector map[string]string, testedObjectLabels map[
 }
 
 // IsLabelSelectorMatching returns true when a resource with the given selector targets the same
-// Resources(or subset) that a tested object selector with the given selector.
-func IsLabelSelectorMatching(selector map[string]string, labelSelector *v1.LabelSelector) bool {
-	// If the resource has no selectors, then assume it targets different Pods.
-	if len(selector) == 0 {
-		return false
-	}
-	for label, value := range selector {
-		if rsValue, ok := labelSelector.MatchLabels[label]; !ok || rsValue != value {
-			return false
-		}
+// Resources(or subset) that a target object selector with the given selector.
+func IsLabelSelectorMatching(srcSelector map[string]string, targetLabelSelector *v1.LabelSelector) bool {
+	// Check to see if targetLabelSelector pointer is not nil.
+	if targetLabelSelector != nil {
+		targetObjectLabels := targetLabelSelector.MatchLabels
+		return IsSelectorMatching(srcSelector, targetObjectLabels)
 	}
-	return true
+	return false
 }
 
 // ListEverything is a list options used to list all resources without any filtering.
diff --git a/src/app/backend/client/verber.go b/src/app/backend/client/verber.go
index 4a5a4394d..cf13e471e 100644
--- a/src/app/backend/client/verber.go
+++ b/src/app/backend/client/verber.go
@@ -21,7 +21,7 @@ import (
 	clientapi "github.com/kubernetes/dashboard/src/app/backend/client/api"
 	"github.com/kubernetes/dashboard/src/app/backend/errors"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/customresourcedefinition"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	restclient "k8s.io/client-go/rest"
diff --git a/src/app/backend/handler/apihandler.go b/src/app/backend/handler/apihandler.go
index 01aabea3b..84382572f 100644
--- a/src/app/backend/handler/apihandler.go
+++ b/src/app/backend/handler/apihandler.go
@@ -149,7 +149,7 @@ func CreateHTTPAPIHandler(iManager integration.IntegrationManager, cManager clie
 			Writes(validation.ProtocolValidity{}))
 	apiV1Ws.Route(
 		apiV1Ws.GET("/appdeployment/protocols").
-			To(apiHandler.handleGetAvailableProcotols).
+			To(apiHandler.handleGetAvailableProtocols).
 			Writes(deployment.Protocols{}))
 
 	apiV1Ws.Route(
@@ -939,12 +939,12 @@ func (apiHandler *APIHandler) handleGetReplicaCount(request *restful.Request, re
 	namespace := request.PathParameter("namespace")
 	kind := request.PathParameter("kind")
 	name := request.PathParameter("name")
-	scaleSpec, err := scaling.GetScaleSpec(cfg, kind, namespace, name)
+	replicaCounts, err := scaling.GetReplicaCounts(cfg, kind, namespace, name)
 	if err != nil {
 		errors.HandleInternalError(response, err)
 		return
 	}
-	response.WriteHeaderAndEntity(http.StatusOK, scaleSpec)
+	response.WriteHeaderAndEntity(http.StatusOK, replicaCounts)
 }
 
 func (apiHandler *APIHandler) handleDeployFromFile(request *restful.Request, response *restful.Response) {
@@ -1024,7 +1024,7 @@ func (apiHandler *APIHandler) handleProtocolValidity(request *restful.Request, r
 	response.WriteHeaderAndEntity(http.StatusOK, validation.ValidateProtocol(spec))
 }
 
-func (apiHandler *APIHandler) handleGetAvailableProcotols(request *restful.Request, response *restful.Response) {
+func (apiHandler *APIHandler) handleGetAvailableProtocols(request *restful.Request, response *restful.Response) {
 	response.WriteHeaderAndEntity(http.StatusOK, deployment.GetAvailableProtocols())
 }
 
@@ -1165,7 +1165,7 @@ func (apiHandler *APIHandler) handleGetPodEvents(request *restful.Request, respo
 
 // Handles execute shell API call
 func (apiHandler *APIHandler) handleExecShell(request *restful.Request, response *restful.Response) {
-	sessionId, err := genTerminalSessionId()
+	sessionID, err := genTerminalSessionId()
 	if err != nil {
 		errors.HandleInternalError(response, err)
 		return
@@ -1183,13 +1183,13 @@ func (apiHandler *APIHandler) handleExecShell(request *restful.Request, response
 		return
 	}
 
-	terminalSessions.Set(sessionId, TerminalSession{
-		id:       sessionId,
+	terminalSessions.Set(sessionID, TerminalSession{
+		id:       sessionID,
 		bound:    make(chan error),
 		sizeChan: make(chan remotecommand.TerminalSize),
 	})
-	go WaitForTerminal(k8sClient, cfg, request, sessionId)
-	response.WriteHeaderAndEntity(http.StatusOK, TerminalResponse{Id: sessionId})
+	go WaitForTerminal(k8sClient, cfg, request, sessionID)
+	response.WriteHeaderAndEntity(http.StatusOK, TerminalResponse{Id: sessionID})
 }
 
 func (apiHandler *APIHandler) handleGetDeployments(request *restful.Request, response *restful.Response) {
diff --git a/src/app/backend/resource/common/resourcechannels.go b/src/app/backend/resource/common/resourcechannels.go
index 2d6d7683f..f923be636 100644
--- a/src/app/backend/resource/common/resourcechannels.go
+++ b/src/app/backend/resource/common/resourcechannels.go
@@ -24,7 +24,7 @@ import (
 	extensions "k8s.io/api/extensions/v1beta1"
 	rbac "k8s.io/api/rbac/v1"
 	storage "k8s.io/api/storage/v1"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
 	metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	client "k8s.io/client-go/kubernetes"
@@ -851,7 +851,7 @@ func GetCustomResourceDefinitionChannel(client apiextensionsclientset.Interface,
 	}
 
 	go func() {
-		list, err := client.ApiextensionsV1beta1().CustomResourceDefinitions().List(api.ListEverything)
+		list, err := client.ApiextensionsV1().CustomResourceDefinitions().List(api.ListEverything)
 		for i := 0; i < numReads; i++ {
 			channel.List <- list
 			channel.Error <- err
diff --git a/src/app/backend/resource/customresourcedefinition/client.go b/src/app/backend/resource/customresourcedefinition/client.go
index 2a52eccb3..490dd4f2b 100644
--- a/src/app/backend/resource/customresourcedefinition/client.go
+++ b/src/app/backend/resource/customresourcedefinition/client.go
@@ -15,7 +15,7 @@
 package customresourcedefinition
 
 import (
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/runtime/serializer"
diff --git a/src/app/backend/resource/customresourcedefinition/common.go b/src/app/backend/resource/customresourcedefinition/common.go
index 7a02ee7e3..50e4d210d 100644
--- a/src/app/backend/resource/customresourcedefinition/common.go
+++ b/src/app/backend/resource/customresourcedefinition/common.go
@@ -18,7 +18,7 @@ import (
 	"github.com/kubernetes/dashboard/src/app/backend/resource/common"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
 	api "k8s.io/api/core/v1"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 )
 
@@ -92,7 +92,7 @@ func fromObjectCells(cells []dataselect.DataCell) []CustomResourceObject {
 func getCustomResourceDefinitionGroupVersion(crd *apiextensions.CustomResourceDefinition) schema.GroupVersion {
 	return schema.GroupVersion{
 		Group:   crd.Spec.Group,
-		Version: crd.Spec.Version,
+		Version: crd.Spec.Versions[0].Name,
 	}
 }
 
diff --git a/src/app/backend/resource/customresourcedefinition/detail.go b/src/app/backend/resource/customresourcedefinition/detail.go
index 905c32d14..01927cb64 100644
--- a/src/app/backend/resource/customresourcedefinition/detail.go
+++ b/src/app/backend/resource/customresourcedefinition/detail.go
@@ -18,7 +18,7 @@ import (
 	"github.com/kubernetes/dashboard/src/app/backend/errors"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/common"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/client-go/rest"
@@ -44,7 +44,7 @@ type CustomResourceDefinitionVersion struct {
 
 // GetCustomResourceDefinitionDetail returns detailed information about a custom resource definition.
 func GetCustomResourceDefinitionDetail(client apiextensionsclientset.Interface, config *rest.Config, name string) (*CustomResourceDefinitionDetail, error) {
-	customResourceDefinition, err := client.ApiextensionsV1beta1().
+	customResourceDefinition, err := client.ApiextensionsV1().
 		CustomResourceDefinitions().
 		Get(name, metav1.GetOptions{})
 	nonCriticalErrors, criticalError := errors.HandleError(err)
@@ -63,11 +63,12 @@ func GetCustomResourceDefinitionDetail(client apiextensionsclientset.Interface,
 
 func toCustomResourceDefinitionDetail(crd *apiextensions.CustomResourceDefinition, objects CustomResourceObjectList, nonCriticalErrors []error) *CustomResourceDefinitionDetail {
 	subresources := []string{}
-	if crd.Spec.Subresources != nil {
-		if crd.Spec.Subresources.Scale != nil {
+	crdSubresources := crd.Spec.Versions[0].Subresources
+	if crdSubresources != nil {
+		if crdSubresources.Scale != nil {
 			subresources = append(subresources, "Scale")
 		}
-		if crd.Spec.Subresources.Status != nil {
+		if crdSubresources.Status != nil {
 			subresources = append(subresources, "Status")
 		}
 	}
diff --git a/src/app/backend/resource/customresourcedefinition/list.go b/src/app/backend/resource/customresourcedefinition/list.go
index c16e72df4..da42f5ff5 100644
--- a/src/app/backend/resource/customresourcedefinition/list.go
+++ b/src/app/backend/resource/customresourcedefinition/list.go
@@ -19,7 +19,7 @@ import (
 	"github.com/kubernetes/dashboard/src/app/backend/errors"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/common"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
 )
 
@@ -81,7 +81,7 @@ func toCustomResourceDefinition(crd *apiextensions.CustomResourceDefinition) Cus
 	return CustomResourceDefinition{
 		ObjectMeta:  api.NewObjectMeta(crd.ObjectMeta),
 		TypeMeta:    api.NewTypeMeta(api.ResourceKindCustomResourceDefinition),
-		Version:     crd.Spec.Version,
+		Version:     crd.Spec.Versions[0].Name,
 		Group:       crd.Spec.Group,
 		Scope:       crd.Spec.Scope,
 		Names:       crd.Status.AcceptedNames,
diff --git a/src/app/backend/resource/customresourcedefinition/objects.go b/src/app/backend/resource/customresourcedefinition/objects.go
index 5f4e460b6..dfa56b021 100644
--- a/src/app/backend/resource/customresourcedefinition/objects.go
+++ b/src/app/backend/resource/customresourcedefinition/objects.go
@@ -21,7 +21,7 @@ import (
 	"github.com/kubernetes/dashboard/src/app/backend/errors"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/common"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/client-go/rest"
@@ -89,7 +89,7 @@ func GetCustomResourceObjectList(client apiextensionsclientset.Interface, config
 	dsQuery *dataselect.DataSelectQuery, crdName string) (*CustomResourceObjectList, error) {
 	var list *CustomResourceObjectList
 
-	customResourceDefinition, err := client.ApiextensionsV1beta1().
+	customResourceDefinition, err := client.ApiextensionsV1().
 		CustomResourceDefinitions().
 		Get(crdName, metav1.GetOptions{})
 	nonCriticalErrors, criticalError := errors.HandleError(err)
@@ -135,7 +135,7 @@ func GetCustomResourceObjectList(client apiextensionsclientset.Interface, config
 func GetCustomResourceObjectDetail(client apiextensionsclientset.Interface, namespace *common.NamespaceQuery, config *rest.Config, crdName string, name string) (*CustomResourceObjectDetail, error) {
 	var detail *CustomResourceObjectDetail
 
-	customResourceDefinition, err := client.ApiextensionsV1beta1().
+	customResourceDefinition, err := client.ApiextensionsV1().
 		CustomResourceDefinitions().
 		Get(crdName, metav1.GetOptions{})
 	nonCriticalErrors, criticalError := errors.HandleError(err)
@@ -173,5 +173,6 @@ func GetCustomResourceObjectDetail(client apiextensionsclientset.Interface, name
 // E.g. changes "Foo" to "foos.samplecontroller.k8s.io"
 func toCRDObject(object *CustomResourceObject, crd *apiextensions.CustomResourceDefinition) {
 	object.TypeMeta.Kind = api.ResourceKind(crd.Name)
-	object.TypeMeta.Scalable = crd.Spec.Subresources != nil && crd.Spec.Subresources.Scale != nil
+	crdSubresources := crd.Spec.Versions[0].Subresources
+	object.TypeMeta.Scalable = crdSubresources != nil && crdSubresources.Scale != nil
 }
diff --git a/src/app/backend/scaling/scale.go b/src/app/backend/scaling/scale.go
index 88ea7f9df..66569fe91 100644
--- a/src/app/backend/scaling/scale.go
+++ b/src/app/backend/scaling/scale.go
@@ -34,8 +34,8 @@ type ReplicaCounts struct {
 	ActualReplicas  int32 `json:"actualReplicas"`
 }
 
-// GetScaleSpec returns a populated ReplicaCounts object with desired and actual number of replicas.
-func GetScaleSpec(cfg *rest.Config, kind, namespace, name string) (*ReplicaCounts, error) {
+// GetReplicaCounts returns a populated ReplicaCounts object with desired and actual number of replicas.
+func GetReplicaCounts(cfg *rest.Config, kind, namespace, name string) (*ReplicaCounts, error) {
 	sc, err := getScaleGetter(cfg)
 	if err != nil {
 		return nil, err
@@ -116,7 +116,7 @@ func getGroupResource(kind string) schema.GroupResource {
 
 	if gr.Group != "" && gr.Resource != "" {
 		return gr
-	} else {
-		return apps.Resource(kind)
 	}
+
+	return apps.Resource(kind)
 }
diff --git a/src/app/frontend/chrome/nav/template.html b/src/app/frontend/chrome/nav/template.html
index 0d28f19b5..ce4fd9c61 100644
--- a/src/app/frontend/chrome/nav/template.html
+++ b/src/app/frontend/chrome/nav/template.html
@@ -131,6 +131,7 @@ limitations under the License.
 
     <div class="kd-nav-group">
       <kd-nav-item class="kd-nav-group-item"
+                   id="sidebar-crd"
                    state="/customresourcedefinition"
                    [exact]="true"
                    i18n>Custom Resource Definitions
diff --git a/src/app/frontend/common/components/list/column/menu/template.html b/src/app/frontend/common/components/list/column/menu/template.html
index 7897c4021..52a90aefe 100644
--- a/src/app/frontend/common/components/list/column/menu/template.html
+++ b/src/app/frontend/common/components/list/column/menu/template.html
@@ -44,15 +44,18 @@ limitations under the License.
     </ng-container>
   </button>
   <button mat-menu-item
+          id="edit"
           (click)="onEdit()"
           i18n>Edit</button>
   <button mat-menu-item
+          id="delete"
           (click)="onDelete()"
           i18n>Delete</button>
 </mat-menu>
 
 <a mat-icon-button
    class="kd-muted"
+   id="more-menu"
    [matMenuTriggerFor]="actions"
    (click)="$event.stopPropagation()">
   <mat-icon matTooltip="Actions">more_vert</mat-icon>
diff --git a/src/app/frontend/common/components/list/zerostate/template.html b/src/app/frontend/common/components/list/zerostate/template.html
index 5d8e1225a..d00962648 100644
--- a/src/app/frontend/common/components/list/zerostate/template.html
+++ b/src/app/frontend/common/components/list/zerostate/template.html
@@ -15,6 +15,7 @@ limitations under the License.
 -->
 
 <div fxLayout="column"
+     id="zero-state"
      class="kd-muted kd-zerostate-container">
   <div fxFlexAlign="center"
        class="kd-zerostate-title"
diff --git a/src/app/frontend/common/dialogs/deleteresource/template.html b/src/app/frontend/common/dialogs/deleteresource/template.html
index 6160bf8ca..6292e9fc1 100644
--- a/src/app/frontend/common/dialogs/deleteresource/template.html
+++ b/src/app/frontend/common/dialogs/deleteresource/template.html
@@ -40,6 +40,7 @@ limitations under the License.
 <mat-dialog-actions>
   <button mat-button
           color="primary"
+          id="confirm-delete"
           [mat-dialog-close]="true"
           i18n>Delete</button>
   <button mat-button
diff --git a/src/app/frontend/common/dialogs/editresource/template.html b/src/app/frontend/common/dialogs/editresource/template.html
index 8e62030d9..9ebff1513 100644
--- a/src/app/frontend/common/dialogs/editresource/template.html
+++ b/src/app/frontend/common/dialogs/editresource/template.html
@@ -38,6 +38,7 @@ limitations under the License.
 <mat-dialog-actions>
   <button mat-button
           color="primary"
+          id="confirm-edit"
           [mat-dialog-close]="getJSON()"
           i18n>Update</button>
   <button mat-button
diff --git a/src/app/frontend/crd/detail/template.html b/src/app/frontend/crd/detail/template.html
index 3926ed039..08d945f0c 100644
--- a/src/app/frontend/crd/detail/template.html
+++ b/src/app/frontend/crd/detail/template.html
@@ -21,22 +21,26 @@ limitations under the License.
   <div title
        i18n>Resource Information</div>
   <div content
+       id="resource-information"
        *ngIf="isInitialized"
        fxLayout="row wrap">
     <kd-property *ngIf="crd?.version">
       <div key
            i18n>Version</div>
-      <div value>{{crd?.version}}</div>
+      <div id="resource-version"
+           value>{{crd?.version}}</div>
     </kd-property>
     <kd-property>
       <div key
            i18n>Scope</div>
-      <div value>{{crd?.scope}}</div>
+      <div id="resource-scope"
+           value>{{crd?.scope}}</div>
     </kd-property>
     <kd-property>
       <div key
            i18n>Group</div>
-      <div value>{{crd?.group}}</div>
+      <div id="resource-group"
+           value>{{crd?.group}}</div>
     </kd-property>
     <kd-property *ngIf="crd.subresources.length > 0">
       <div key
@@ -50,6 +54,7 @@ limitations under the License.
   <div title
        i18n>Accepted Names</div>
   <div content
+       id="accepted-names"
        *ngIf="isInitialized"
        fxLayout="row wrap">
     <kd-property>


Test patch:
diff --git a/src/app/backend/resource/customresourcedefinition/list_test.go b/src/app/backend/resource/customresourcedefinition/list_test.go
index ecdfeea5b..89e371990 100644
--- a/src/app/backend/resource/customresourcedefinition/list_test.go
+++ b/src/app/backend/resource/customresourcedefinition/list_test.go
@@ -20,7 +20,7 @@ import (
 
 	"github.com/kubernetes/dashboard/src/app/backend/api"
 	"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+	apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake"
 	metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
@@ -42,7 +42,11 @@ func TestGetCustomResourceDefinition(t *testing.T) {
 								Kind:   "Foo",
 								Plural: "foos",
 							},
-							Version: "v1alpha1",
+							Versions: []apiextensions.CustomResourceDefinitionVersion{
+								{
+									Name: "v1alpha1",
+								},
+							},
 						},
 					},
 				},