Quellcode durchsuchen

[ui-core] Upgrade all jest related libraries

This upgrades all the jest testing libraries to the latest possible versions. The primary reason was to provide a fix for CVE-2023-48631, a vulnerability with @adobe/css-tools which is a transient dependency of jest-jsdom.

- Updated snapshots due to improved format
- Moved console.log of editor v2 up to the app.js as it appears in the tests
- jest config updated for deprecated configs

Manual testing and unit test runs.
Johan Åhlén vor 1 Jahr
Ursprung
Commit
cc70d325db
47 geänderte Dateien mit 845 neuen und 629 gelöschten Zeilen
  1. 0 3
      desktop/core/src/desktop/js/apps/editor/EditorViewModel.js
  2. 2 0
      desktop/core/src/desktop/js/apps/editor/app.js
  3. 6 6
      desktop/core/src/desktop/js/apps/editor/components/__snapshots__/ko.paginator.test.js.snap
  4. 6 6
      desktop/core/src/desktop/js/apps/editor/components/__snapshots__/ko.savedQueries.test.js.snap
  5. 10 10
      desktop/core/src/desktop/js/apps/editor/components/__snapshots__/ko.syntaxDropdown.test.js.snap
  6. 0 2
      desktop/core/src/desktop/js/apps/jobBrowser/components/impalaQueries/query-details/__snapshots__/LabeledInfo.test.ts.snap
  7. 6 1
      desktop/core/src/desktop/js/components/__snapshots__/Modal.test.ts.snap
  8. 3 1
      desktop/core/src/desktop/js/components/__snapshots__/Tab.test.ts.snap
  9. 3 3
      desktop/core/src/desktop/js/components/__snapshots__/Tabs.test.ts.snap
  10. 3 1
      desktop/core/src/desktop/js/components/dropdown/__snapshots__/DropdownDrawer.test.ts.snap
  11. 2 2
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.stickVertical.test.js.snap
  12. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.templateContextMenu.test.js.snap
  13. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.templatePopover.test.js.snap
  14. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.toggleOverflow.test.js.snap
  15. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.toogle.test.js.snap
  16. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.tooltip.test.js.snap
  17. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.truncatedText.test.js.snap
  18. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.verticalSlide.test.js.snap
  19. 1 1
      desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.visibleOnHover.test.js.snap
  20. 1 1
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.contextSelector.test.js.snap
  21. 11 11
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.createDirectoryModal.test.js.snap
  22. 12 12
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.deleteDocModal.test.js.snap
  23. 6 6
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.dropDown.test.js.snap
  24. 2 2
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.executionAnalysis.test.js.snap
  25. 4 4
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.favoriteApp.test.js.snap
  26. 28 28
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.fieldSamples.test.js.snap
  27. 10 10
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.globalSearch.test.js.snap
  28. 14 14
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.historyPanel.test.js.snap
  29. 23 23
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.importDocumentsModal.test.js.snap
  30. 9 9
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.inlineAutocomplete.test.js.snap
  31. 1 1
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.jobBrowserLinks.test.js.snap
  32. 21 21
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.navProperties.test.js.snap
  33. 4 4
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.navTags.test.js.snap
  34. 1 1
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.pollingCatalogEntriesList.test.js.snap
  35. 3 3
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.quickQueryAction.test.js.snap
  36. 55 55
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sentryPrivileges.test.js.snap
  37. 21 21
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sessionAuthModal.test.js.snap
  38. 5 5
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sessionPanel.test.js.snap
  39. 13 13
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.shareGistModal.test.js.snap
  40. 18 18
      desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sqlColumnsTable.test.js.snap
  41. 4 4
      desktop/core/src/desktop/js/ko/components/assist/__snapshots__/ko.assistKey.test.js.snap
  42. 1 1
      desktop/core/src/desktop/js/ko/components/contextPopover/__snapshots__/ko.popoverOnHover.test.js.snap
  43. 22 22
      desktop/core/src/desktop/js/ko/components/doc/__snapshots__/ko.linkSharing.test.js.snap
  44. 8 8
      desktop/core/src/desktop/js/ko/components/doc/__snapshots__/ko.shareDocModal.test.js.snap
  45. 5 2
      jest.config.js
  46. 483 278
      package-lock.json
  47. 11 9
      package.json

+ 0 - 3
desktop/core/src/desktop/js/apps/editor/EditorViewModel.js

@@ -37,9 +37,6 @@ import getParameter from 'utils/url/getParameter';
 
 export default class EditorViewModel {
   constructor(options, CoordinatorEditorViewModel, RunningCoordinatorModel) {
-    // eslint-disable-next-line no-restricted-syntax
-    console.log('Editor v2 enabled.');
-
     this.snippetViewSettings = options.snippetViewSettings;
 
     this.URLS = {

+ 2 - 0
desktop/core/src/desktop/js/apps/editor/app.js

@@ -49,6 +49,8 @@ huePubSub.subscribe('app.dom.loaded', app => {
   if (app === 'editor') {
     window.MAIN_SCROLLABLE = '.page-content';
 
+    console.info('Editor v2 enabled.');
+
     let isLeftNavOpen = false;
     huePubSub.subscribe(
       'left.nav.open.toggle',

+ 6 - 6
desktop/core/src/desktop/js/apps/editor/components/__snapshots__/ko.paginator.test.js.snap

@@ -1,14 +1,14 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.paginator.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;paginator&quot;, params: params }\\"><div class=\\"pagination\\" data-bind=\\"visible: totalPages() > 1\\" style=\\"\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;paginator&quot;, params: params }"><div class="pagination" data-bind="visible: totalPages() > 1" style="">
   <ul>
-    <li data-bind=\\"css: { 'disabled' : currentPage() === 1 }\\" class=\\"disabled\\">
-      <a href=\\"javascript: void(0);\\" data-bind=\\"click: previousPage.bind($data)\\">Prev</a>
+    <li data-bind="css: { 'disabled' : currentPage() === 1 }" class="disabled">
+      <a href="javascript: void(0);" data-bind="click: previousPage.bind($data)">Prev</a>
     </li>
-    <li class=\\"active\\"><span data-bind=\\"text: currentPage() + '/' + totalPages()\\">1/5</span></li>
-    <li data-bind=\\"css: { 'disabled' : currentPage() === totalPages() }\\">
-      <a href=\\"javascript: void(0);\\" data-bind=\\"click: nextPage.bind($data)\\">Next</a>
+    <li class="active"><span data-bind="text: currentPage() + '/' + totalPages()">1/5</span></li>
+    <li data-bind="css: { 'disabled' : currentPage() === totalPages() }">
+      <a href="javascript: void(0);" data-bind="click: nextPage.bind($data)">Next</a>
     </li>
   </ul>
 </div></div>"

+ 6 - 6
desktop/core/src/desktop/js/apps/editor/components/__snapshots__/ko.savedQueries.test.js.snap

@@ -1,17 +1,17 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.savedQueries.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;saved-queries&quot;, params: params }\\"><div class=\\"snippet-tab-actions\\">
-  <form autocomplete=\\"off\\" class=\\"inline-block\\">
-    <input class=\\"input-small search-input\\" type=\\"text\\" autocorrect=\\"off\\" autocomplete=\\"do-not-autocomplete\\" autocapitalize=\\"off\\" spellcheck=\\"false\\" placeholder=\\"Search...\\" data-bind=\\"
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;saved-queries&quot;, params: params }"><div class="snippet-tab-actions">
+  <form autocomplete="off" class="inline-block">
+    <input class="input-small search-input" type="text" autocorrect="off" autocomplete="do-not-autocomplete" autocapitalize="off" spellcheck="false" placeholder="Search..." data-bind="
         textInput: filter,
         clearable: filter
-      \\">
+      ">
   </form>
-</div><div class=\\"snippet-tab-body\\">
+</div><div class="snippet-tab-body">
   <!-- ko if: loading -->
     <div>
-      <h1 class=\\"empty\\"><i class=\\"fa fa-spinner fa-spin\\"></i> Loading...</h1>
+      <h1 class="empty"><i class="fa fa-spinner fa-spin"></i> Loading...</h1>
     </div>
   <!-- /ko -->
 

+ 10 - 10
desktop/core/src/desktop/js/apps/editor/components/__snapshots__/ko.syntaxDropdown.test.js.snap

@@ -1,8 +1,8 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.syntaxDropdown.js should match snapshot 1`] = `
-"<html><head></head><body><div id=\\"sqlSyntaxDropdown\\" data-bind=\\"component: { name: 'sql-syntax-dropdown', params: $data }\\">
-<div class=\\"hue-syntax-drop-down\\" data-bind=\\"
+"<html><head></head><body><div id="sqlSyntaxDropdown" data-bind="component: { name: 'sql-syntax-dropdown', params: $data }">
+<div class="hue-syntax-drop-down" data-bind="
   style: {
     'left': left() + 'px',
     'top': top() + 'px'
@@ -18,27 +18,27 @@ exports[`ko.syntaxDropdown.js should match snapshot 1`] = `
       menuOnly: true
     }
   }
-\\" style=\\"left: 10px; top: 20px;\\">
+" style="left: 10px; top: 20px;">
   <!-- ko if: !menuOnly && (!dropDownVisible() || !searchable) --><!-- /ko -->
   <!-- ko if: !menuOnly && (dropDownVisible() && searchable) --><!-- /ko -->
-  <div class=\\"hue-drop-down-container open\\" data-bind=\\"css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }\\">
-    <div style=\\"overflow-y: auto;\\" class=\\"dropdown-menu\\" data-bind=\\"visible: filteredEntries().length > 0\\">
+  <div class="hue-drop-down-container open" data-bind="css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }">
+    <div style="overflow-y: auto;" class="dropdown-menu" data-bind="visible: filteredEntries().length > 0">
       <!-- ko if: foreachVisible --><!-- /ko -->
       <!-- ko ifnot: foreachVisible -->
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: filteredEntries\\">
+      <ul class="hue-inner-drop-down" data-bind="foreach: filteredEntries">
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">foo</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">foo</a></li>
         <!-- /ko -->
       
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider -->
-        <li class=\\"divider\\"></li>
+        <li class="divider"></li>
         <!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider --><!-- /ko -->
       
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">Ignore this type of error</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">Ignore this type of error</a></li>
         <!-- /ko -->
       </ul>
       <!-- /ko -->
@@ -48,4 +48,4 @@ exports[`ko.syntaxDropdown.js should match snapshot 1`] = `
 </div></body></html>"
 `;
 
-exports[`ko.syntaxDropdown.js should render component on show event 1`] = `"<html><head></head><body><div id=\\"sqlSyntaxDropdown\\" data-bind=\\"component: { name: 'sql-syntax-dropdown', params: $data }\\"></div></body></html>"`;
+exports[`ko.syntaxDropdown.js should render component on show event 1`] = `"<html><head></head><body><div id="sqlSyntaxDropdown" data-bind="component: { name: 'sql-syntax-dropdown', params: $data }"></div></body></html>"`;

+ 0 - 2
desktop/core/src/desktop/js/apps/jobBrowser/components/impalaQueries/query-details/__snapshots__/LabeledInfo.test.ts.snap

@@ -11,12 +11,10 @@ exports[`LabeledInfo.vue should render 1`] = `
     class="labled-info-value"
   >
     
-    
     <div>
       Some item
     </div>
     
-    
   </div>
 </div>
 `;

+ 6 - 1
desktop/core/src/desktop/js/components/__snapshots__/Modal.test.ts.snap

@@ -1,7 +1,12 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`Modal.vue should render a modal 1`] = `
-<transition-stub>
+<transition-stub
+  appear="false"
+  css="true"
+  name="hue-modal"
+  persisted="false"
+>
   <div
     class="hue-modal-mask"
   >

+ 3 - 1
desktop/core/src/desktop/js/components/__snapshots__/Tab.test.ts.snap

@@ -5,7 +5,9 @@ exports[`Tab.vue should render 1`] = `
   style="display: none;"
 >
   
-  <stub />
+  <div>
+    Some tab content
+  </div>
   
 </div>
 `;

+ 3 - 3
desktop/core/src/desktop/js/components/__snapshots__/Tabs.test.ts.snap

@@ -39,8 +39,9 @@ exports[`Tabs.vue should render tabs 1`] = `
     class="hue-tab-container"
   >
     
-    
-    <div>
+    <div
+      style=""
+    >
       
       foo
       
@@ -53,7 +54,6 @@ exports[`Tabs.vue should render tabs 1`] = `
       
     </div>
     
-    
   </div>
 </div>
 `;

+ 3 - 1
desktop/core/src/desktop/js/components/dropdown/__snapshots__/DropdownDrawer.test.ts.snap

@@ -10,7 +10,9 @@ exports[`DropdownDrawer.vue should render dropdown drawer with slots 1`] = `
     style="top: 100%; left: 0px;"
   >
     
-    <stub />
+    <div>
+      Some item
+    </div>
     
   </div>
 </div>

+ 2 - 2
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.stickVertical.test.js.snap

@@ -1,7 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.stickVertical.js should render binding 1`] = `
-"<div class=\\"scroll-container\\">
-              <div data-bind=\\"scrollVertical: { scrollContainer: '.scroll-container' }\\"></div>
+"<div class="scroll-container">
+              <div data-bind="scrollVertical: { scrollContainer: '.scroll-container' }"></div>
             </div>"
 `;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.templateContextMenu.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.templateContextMenu.js should render binding 1`] = `"<div data-bind=\\"templateContextMenu: { }\\"></div>"`;
+exports[`ko.templateContextMenu.js should render binding 1`] = `"<div data-bind="templateContextMenu: { }"></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.templatePopover.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.templatePopover.js should render binding 1`] = `"<div id=\\"popoverTest\\" data-bind=\\"templatePopover: { trigger: 'click' }\\"></div>"`;
+exports[`ko.templatePopover.js should render binding 1`] = `"<div id="popoverTest" data-bind="templatePopover: { trigger: 'click' }"></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.toggleOverflow.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.toggleOverflow.js should render binding 1`] = `"<div data-bind=\\"toggleOverflow\\"><div class=\\"toggle-overflow\\">Some text</div><div class=\\"toggle-overflow-toggle\\"><i class=\\"fa fa-caret-down muted\\"></i></div></div>"`;
+exports[`ko.toggleOverflow.js should render binding 1`] = `"<div data-bind="toggleOverflow"><div class="toggle-overflow">Some text</div><div class="toggle-overflow-toggle"><i class="fa fa-caret-down muted"></i></div></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.toogle.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.toggle.js should render binding 1`] = `"<div class=\\"toggle-test\\" data-bind=\\"toggle: testObservable\\"></div>"`;
+exports[`ko.toggle.js should render binding 1`] = `"<div class="toggle-test" data-bind="toggle: testObservable"></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.tooltip.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.tooltip.js should render binding 1`] = `"<div data-bind=\\"tooltip\\" data-original-title=\\"some title\\"></div>"`;
+exports[`ko.tooltip.js should render binding 1`] = `"<div data-bind="tooltip" data-original-title="some title"></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.truncatedText.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.truncatedText.js should render binding 1`] = `"<div data-bind=\\"truncatedText: text\\">More than 20 charact...</div>"`;
+exports[`ko.truncatedText.js should render binding 1`] = `"<div data-bind="truncatedText: text">More than 20 charact...</div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.verticalSlide.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.verticalSlide.js should render binding 1`] = `"<div data-bind=\\"verticalSlide: slide\\" style=\\"display: none;\\"></div>"`;
+exports[`ko.verticalSlide.js should render binding 1`] = `"<div data-bind="verticalSlide: slide" style="display: none;"></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/bindings/__snapshots__/ko.visibleOnHover.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.visibleOnHover.js should render binding 1`] = `"<div id=\\"foo\\" data-bind=\\"visibleOnHover: { selector: '#foo' }\\"></div>"`;
+exports[`ko.visibleOnHover.js should render binding 1`] = `"<div id="foo" data-bind="visibleOnHover: { selector: '#foo' }"></div>"`;

+ 1 - 1
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.contextSelector.test.js.snap

@@ -1,7 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.contextSelector.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-context-selector&quot;, params: params }\\"><i class=\\"fa fa-spinner fa-spin muted\\"></i><div class=\\"inline-block\\" style=\\"\\" data-bind=\\"visible: !loadingContext()\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-context-selector&quot;, params: params }"><i class="fa fa-spinner fa-spin muted"></i><div class="inline-block" style="" data-bind="visible: !loadingContext()">
     <!-- ko if: window.HAS_MULTI_CLUSTER --><!-- /ko -->
 
     <!-- ko if: availableDatabases().length > 0 && !hideDatabases--><!-- /ko -->

+ 11 - 11
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.createDirectoryModal.test.js.snap

@@ -1,21 +1,21 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.createDirectoryModal.js should render component 1`] = `
-"<html><head></head><body class=\\"modal-open\\"><div id=\\"createDirectoryModal\\" data-bind=\\"descendantsComplete: descendantsComplete, component: { name: 'create-directory', params: params }\\" data-keyboard=\\"true\\" class=\\"modal hide fade in\\" tabindex=\\"-1\\" aria-hidden=\\"false\\">
+"<html><head></head><body class="modal-open"><div id="createDirectoryModal" data-bind="descendantsComplete: descendantsComplete, component: { name: 'create-directory', params: params }" data-keyboard="true" class="modal hide fade in" tabindex="-1" aria-hidden="false">
   <!-- ko with: activeEntry -->
-  <form class=\\"form-horizontal\\">
-    <div class=\\"modal-header\\">
-      <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
-      <h2 class=\\"modal-title\\">Create Directory</h2>
+  <form class="form-horizontal">
+    <div class="modal-header">
+      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+      <h2 class="modal-title">Create Directory</h2>
     </div>
-    <div class=\\"modal-body \\">
-      <input id=\\"newDirectoryName\\" class=\\"input large-as-modal\\" type=\\"text\\" placeholder=\\"Directory name\\">
+    <div class="modal-body ">
+      <input id="newDirectoryName" class="input large-as-modal" type="text" placeholder="Directory name">
     </div>
-    <div class=\\"modal-footer\\">
-      <input type=\\"button\\" class=\\"btn\\" data-dismiss=\\"modal\\" data-bind=\\"click: function () { $('#newDirectoryName').val(null) }\\" value=\\"Cancel\\">
-      <input type=\\"submit\\" class=\\"btn btn-primary disable-feedback\\" value=\\"Create\\" data-bind=\\"click: function () { if ($('#newDirectoryName').val()) { $data.createDirectory($('#newDirectoryName').val()); $('#createDirectoryModal').modal('hide'); } }\\">
+    <div class="modal-footer">
+      <input type="button" class="btn" data-dismiss="modal" data-bind="click: function () { $('#newDirectoryName').val(null) }" value="Cancel">
+      <input type="submit" class="btn btn-primary disable-feedback" value="Create" data-bind="click: function () { if ($('#newDirectoryName').val()) { $data.createDirectory($('#newDirectoryName').val()); $('#createDirectoryModal').modal('hide'); } }">
     </div>
   </form>
   <!-- /ko -->
-</div><div class=\\"modal-backdrop fade in\\"></div></body></html>"
+</div><div class="modal-backdrop fade in"></div></body></html>"
 `;

+ 12 - 12
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.deleteDocModal.test.js.snap

@@ -1,26 +1,26 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.deleteDocModal.js should render component 1`] = `
-"<html><head></head><body class=\\"modal-open\\"><div id=\\"deleteEntriesModal\\" data-bind=\\"descendantsComplete: descendantsComplete, component: { name: 'delete-entry', params: params }\\" data-keyboard=\\"true\\" class=\\"modal hide fade in\\" tabindex=\\"-1\\" aria-hidden=\\"false\\">
-  <div class=\\"modal-header\\">
-    <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
+"<html><head></head><body class="modal-open"><div id="deleteEntriesModal" data-bind="descendantsComplete: descendantsComplete, component: { name: 'delete-entry', params: params }" data-keyboard="true" class="modal hide fade in" tabindex="-1" aria-hidden="false">
+  <div class="modal-header">
+    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
     <!-- ko if: entriesToDelete().length === 0 --><!-- /ko -->
     <!-- ko if: entriesToDelete().length > 0 -->
-    <h2 class=\\"modal-title\\"> Do you really want to delete the following document(s)? </h2>
+    <h2 class="modal-title"> Do you really want to delete the following document(s)? </h2>
     <!-- /ko -->
   </div>
-  <div class=\\"modal-body\\">
-    <div class=\\"doc-browser-empty animated\\" style=\\"\\" data-bind=\\"visible: entriesToDelete().length > 0 &amp;&amp; selectedDocsWithDependents().length === 0\\">
-      <i class=\\"fa fa-spinner fa-spin fa-2x\\"></i>
+  <div class="modal-body">
+    <div class="doc-browser-empty animated" style="" data-bind="visible: entriesToDelete().length > 0 &amp;&amp; selectedDocsWithDependents().length === 0">
+      <i class="fa fa-spinner fa-spin fa-2x"></i>
     </div>
-    <ul data-bind=\\"foreach: selectedDocsWithDependents()\\"></ul>
+    <ul data-bind="foreach: selectedDocsWithDependents()"></ul>
   </div>
-  <div class=\\"modal-footer\\">
+  <div class="modal-footer">
     <!-- ko if: entriesToDelete().length === 0 --><!-- /ko -->
     <!-- ko if: entriesToDelete().length > 0 -->
-    <input type=\\"button\\" class=\\"btn\\" data-dismiss=\\"modal\\" value=\\"Cancel\\">
-    <input type=\\"submit\\" data-bind=\\"click: function() { if (isTrash() || isTrashed()) { removeDocuments(true) } else { moveToTrash() } }, disable: deletingEntries\\" class=\\"btn btn-danger disable-feedback\\" value=\\"Yes\\">
+    <input type="button" class="btn" data-dismiss="modal" value="Cancel">
+    <input type="submit" data-bind="click: function() { if (isTrash() || isTrashed()) { removeDocuments(true) } else { moveToTrash() } }, disable: deletingEntries" class="btn btn-danger disable-feedback" value="Yes">
     <!-- /ko -->
   </div>
-</div><div class=\\"modal-backdrop fade in\\"></div></body></html>"
+</div><div class="modal-backdrop fade in"></div></body></html>"
 `;

+ 6 - 6
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.dropDown.test.js.snap

@@ -1,20 +1,20 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.dropDown.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-drop-down&quot;, params: params }\\"><a class=\\"inactive-action hue-drop-down-active\\" href=\\"javascript:void(0)\\" data-bind=\\"
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-drop-down&quot;, params: params }"><a class="inactive-action hue-drop-down-active" href="javascript:void(0)" data-bind="
     attr: {
       'data-testid': dataTestId
     },
     toggle: dropDownVisible,
-    css: { 'blue': dropDownVisible }\\">
+    css: { 'blue': dropDownVisible }">
     <!-- ko if: icon --><!-- /ko -->
     <!-- ko if: !noLabel && value --><!-- /ko -->
-    <i class=\\"fa fa-caret-down\\"></i>
-  </a><input class=\\"hue-drop-down-input\\" type=\\"text\\" data-bind=\\"textInput: filter, attr: { 'placeHolder': inputPlaceHolder }, visible: dropDownVisible, style: { color: filterEdited() ? '#000' : '#AAA', 'min-height': '22px', 'margin-left': '10px' }\\" style=\\"display: none; color: rgb(170, 170, 170); min-height: 22px; margin-left: 10px;\\"><i class=\\"fa fa-caret-down\\"></i><div class=\\"hue-drop-down-container\\" data-bind=\\"css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }\\">
-    <div style=\\"overflow-y: auto; display: none;\\" class=\\"dropdown-menu\\" data-bind=\\"visible: filteredEntries().length > 0\\">
+    <i class="fa fa-caret-down"></i>
+  </a><input class="hue-drop-down-input" type="text" data-bind="textInput: filter, attr: { 'placeHolder': inputPlaceHolder }, visible: dropDownVisible, style: { color: filterEdited() ? '#000' : '#AAA', 'min-height': '22px', 'margin-left': '10px' }" style="display: none; color: rgb(170, 170, 170); min-height: 22px; margin-left: 10px;"><i class="fa fa-caret-down"></i><div class="hue-drop-down-container" data-bind="css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }">
+    <div style="overflow-y: auto; display: none;" class="dropdown-menu" data-bind="visible: filteredEntries().length > 0">
       <!-- ko if: foreachVisible --><!-- /ko -->
       <!-- ko ifnot: foreachVisible -->
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: filteredEntries\\"></ul>
+      <ul class="hue-inner-drop-down" data-bind="foreach: filteredEntries"></ul>
       <!-- /ko -->
     </div>
   </div></div>"

+ 2 - 2
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.executionAnalysis.test.js.snap

@@ -1,11 +1,11 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.executionAnalysis.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-execution-analysis&quot;, params: params }\\"><div class=\\"hue-execution-analysis\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-execution-analysis&quot;, params: params }"><div class="hue-execution-analysis">
     <!-- ko hueSpinner: { spin: loading, inline: true } --><!-- /ko -->
     <!-- ko ifnot: loading -->
       <!-- ko if: analysisPossible() && !analysis() -->
-      <div class=\\"no-analysis\\">Execute a query to get query execution analysis.</div>
+      <div class="no-analysis">Execute a query to get query execution analysis.</div>
       <!-- /ko -->
       <!-- ko ifnot: analysisPossible --><!-- /ko -->
       <!-- ko with: analysis --><!-- /ko -->

+ 4 - 4
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.favoriteApp.test.js.snap

@@ -1,13 +1,13 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.favoriteApp.js should render favorite 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-favorite-app&quot;, params: params }\\"><div class=\\"inline pointer favorite-app\\" data-bind=\\"click: setAsFavoriteApp.bind($data), tooltip: { placement: 'bottom', title: isFavorite() ? 'Unset from default application' : 'Set as default application' }\\">
-    <i class=\\"fa inactive-action fa-star\\" data-bind=\\"css: { 'fa-star-o': !isFavorite(), 'fa-star': isFavorite }\\"></i>
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-favorite-app&quot;, params: params }"><div class="inline pointer favorite-app" data-bind="click: setAsFavoriteApp.bind($data), tooltip: { placement: 'bottom', title: isFavorite() ? 'Unset from default application' : 'Set as default application' }">
+    <i class="fa inactive-action fa-star" data-bind="css: { 'fa-star-o': !isFavorite(), 'fa-star': isFavorite }"></i>
   </div></div>"
 `;
 
 exports[`ko.favoriteApp.js should render non-favorite 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-favorite-app&quot;, params: params }\\"><div class=\\"inline pointer favorite-app\\" data-bind=\\"click: setAsFavoriteApp.bind($data), tooltip: { placement: 'bottom', title: isFavorite() ? 'Unset from default application' : 'Set as default application' }\\">
-    <i class=\\"fa inactive-action fa-star-o\\" data-bind=\\"css: { 'fa-star-o': !isFavorite(), 'fa-star': isFavorite }\\"></i>
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-favorite-app&quot;, params: params }"><div class="inline pointer favorite-app" data-bind="click: setAsFavoriteApp.bind($data), tooltip: { placement: 'bottom', title: isFavorite() ? 'Unset from default application' : 'Set as default application' }">
+    <i class="fa inactive-action fa-star-o" data-bind="css: { 'fa-star-o': !isFavorite(), 'fa-star': isFavorite }"></i>
   </div></div>"
 `;

+ 28 - 28
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.fieldSamples.test.js.snap

@@ -1,85 +1,85 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.fieldSamples.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;field-samples&quot;, params: params }\\"><div class=\\"context-popover-inline-autocomplete\\" style=\\"display: flex\\">
-    <div class=\\"context-popover-sample-filter\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;field-samples&quot;, params: params }"><div class="context-popover-inline-autocomplete" style="display: flex">
+    <div class="context-popover-sample-filter">
       <!-- ko component: {
         name: 'inline-autocomplete',
         params: {
           querySpec: querySpec,
           autocompleteFromEntries: autocompleteFromEntries
         }
-      } --><div class=\\"inline-autocomp-container\\">
+      } --><div class="inline-autocomp-container">
     <div>
       <!-- ko if: showMagnify --><!-- /ko-->
-      <form autocomplete=\\"off\\">
-        <input class=\\"inline-autocomp-input\\" autocorrect=\\"off\\" autocomplete=\\"do-not-autocomplete\\" autocapitalize=\\"off\\" spellcheck=\\"false\\" type=\\"text\\" data-bind=\\"
+      <form autocomplete="off">
+        <input class="inline-autocomp-input" autocorrect="off" autocomplete="do-not-autocomplete" autocapitalize="off" spellcheck="false" type="text" data-bind="
           attr: { 'placeHolder' : hasFocus() ? '' : placeHolder },
           textInput: searchInput,
           hasFocus: hasFocus,
           clearable: { value: searchInput, onClear: onClear },
-          css: { 'inline-autocomp-magnify-input': showMagnify }\\" placeholder=\\"Filter...\\">
-        <input class=\\"inline-autocomp-autocomp\\" disabled=\\"\\" type=\\"text\\" autocomplete=\\"do-not-autocomplete\\" data-bind=\\"
+          css: { 'inline-autocomp-magnify-input': showMagnify }" placeholder="Filter...">
+        <input class="inline-autocomp-autocomp" disabled="" type="text" autocomplete="do-not-autocomplete" data-bind="
           value: inlineAutocomplete,
-          css: { 'inline-autocomp-magnify-input': showMagnify }\\">
+          css: { 'inline-autocomp-magnify-input': showMagnify }">
       </form>
     </div>
-  </div><div class=\\"hue-drop-down-container hue-drop-down-fixed\\" data-bind=\\"event: { 'mousedown': facetDropDownMouseDown }, css: { 'open' : facetDropDownVisible() }, dropDownKeyUp: { onEsc: facetDropDownOnEsc, onEnter: facetDropDownOnEnter, onSelected: facetDropDownOnSelected, dropDownVisible: facetDropDownVisible }\\">
-    <div class=\\"dropdown-menu\\" style=\\"overflow-y: auto; display: none;\\" data-bind=\\"visible: facetSuggestions().length > 0\\">
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: facetSuggestions\\"></ul>
+  </div><div class="hue-drop-down-container hue-drop-down-fixed" data-bind="event: { 'mousedown': facetDropDownMouseDown }, css: { 'open' : facetDropDownVisible() }, dropDownKeyUp: { onEsc: facetDropDownOnEsc, onEnter: facetDropDownOnEnter, onSelected: facetDropDownOnSelected, dropDownVisible: facetDropDownVisible }">
+    <div class="dropdown-menu" style="overflow-y: auto; display: none;" data-bind="visible: facetSuggestions().length > 0">
+      <ul class="hue-inner-drop-down" data-bind="foreach: facetSuggestions"></ul>
     </div>
   </div><!-- /ko -->
     </div>
     <!-- ko if: showOperations -->
-    <div class=\\"context-popover-sample-controls\\">
-      <div class=\\"margin-left-10 inline-block\\" data-bind=\\"component: { name: 'hue-drop-down', params: { value: operation, entries: operations } }\\"><a class=\\"inactive-action hue-drop-down-active\\" href=\\"javascript:void(0)\\" data-bind=\\"
+    <div class="context-popover-sample-controls">
+      <div class="margin-left-10 inline-block" data-bind="component: { name: 'hue-drop-down', params: { value: operation, entries: operations } }"><a class="inactive-action hue-drop-down-active" href="javascript:void(0)" data-bind="
     attr: {
       'data-testid': dataTestId
     },
     toggle: dropDownVisible,
-    css: { 'blue': dropDownVisible }\\">
+    css: { 'blue': dropDownVisible }">
     <!-- ko if: icon --><!-- /ko -->
     <!-- ko if: !noLabel && value -->
-    <span class=\\"hue-drop-down-selected\\" data-bind=\\"text: value() &amp;&amp; typeof value()[labelAttribute] !== 'undefined' ? value()[labelAttribute] : value(), visible: ! dropDownVisible() || !searchable, attr: { 'title': titleTooltip }\\" title=\\"default\\">default</span>
+    <span class="hue-drop-down-selected" data-bind="text: value() &amp;&amp; typeof value()[labelAttribute] !== 'undefined' ? value()[labelAttribute] : value(), visible: ! dropDownVisible() || !searchable, attr: { 'title': titleTooltip }" title="default">default</span>
     <!-- /ko -->
-    <i class=\\"fa fa-caret-down\\"></i>
-  </a><input class=\\"hue-drop-down-input\\" type=\\"text\\" data-bind=\\"textInput: filter, attr: { 'placeHolder': inputPlaceHolder }, visible: dropDownVisible, style: { color: filterEdited() ? '#000' : '#AAA', 'min-height': '22px', 'margin-left': '10px' }\\" placeholder=\\"default\\" style=\\"display: none; color: rgb(170, 170, 170); min-height: 22px; margin-left: 10px;\\"><i class=\\"fa fa-caret-down\\"></i><div class=\\"hue-drop-down-container\\" data-bind=\\"css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }\\">
-    <div style=\\"overflow-y: auto;\\" class=\\"dropdown-menu\\" data-bind=\\"visible: filteredEntries().length > 0\\">
+    <i class="fa fa-caret-down"></i>
+  </a><input class="hue-drop-down-input" type="text" data-bind="textInput: filter, attr: { 'placeHolder': inputPlaceHolder }, visible: dropDownVisible, style: { color: filterEdited() ? '#000' : '#AAA', 'min-height': '22px', 'margin-left': '10px' }" placeholder="default" style="display: none; color: rgb(170, 170, 170); min-height: 22px; margin-left: 10px;"><i class="fa fa-caret-down"></i><div class="hue-drop-down-container" data-bind="css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }">
+    <div style="overflow-y: auto;" class="dropdown-menu" data-bind="visible: filteredEntries().length > 0">
       <!-- ko if: foreachVisible --><!-- /ko -->
       <!-- ko ifnot: foreachVisible -->
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: filteredEntries\\">
+      <ul class="hue-inner-drop-down" data-bind="foreach: filteredEntries">
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">default</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">default</a></li>
         <!-- /ko -->
       
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">distinct</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">distinct</a></li>
         <!-- /ko -->
       
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">max</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">max</a></li>
         <!-- /ko -->
       
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">min</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">min</a></li>
         <!-- /ko -->
       </ul>
       <!-- /ko -->
     </div>
   </div></div>
-      <div class=\\"margin-left-10 inactive-action inline-block\\">
+      <div class="margin-left-10 inactive-action inline-block">
         <!-- ko if: loadingSamples() || refreshSampleEnabled() --><!-- /ko -->
         <!-- ko if: !loadingSamples() && !refreshSampleEnabled() -->
-        <a href=\\"javascript:void(0);\\" data-bind=\\"click: function () { loadSamples(true) }\\"><i class=\\"fa fa-play\\"></i></a>
+        <a href="javascript:void(0);" data-bind="click: function () { loadSamples(true) }"><i class="fa fa-play"></i></a>
         <!-- /ko -->
       </div>
     </div>
     <!-- /ko -->
-  </div><table class=\\"table table-condensed table-nowrap\\">
+  </div><table class="table table-condensed table-nowrap">
     <thead>
     <tr>
       <th>Sample</th>
@@ -88,13 +88,13 @@ exports[`ko.fieldSamples.js should render component 1`] = `
     <!-- ko if: loadingSamples() && (!refreshSampleEnabled() || (refreshSampleEnabled() && columnSamples().length === 0))  --><!-- /ko -->
 
     <!-- ko if: !loadingSamples() || (refreshSampleEnabled() && columnSamples().length > 0)  -->
-    <tbody data-bind=\\"foreach: filteredColumnSamples\\"></tbody>
+    <tbody data-bind="foreach: filteredColumnSamples"></tbody>
     <!-- ko if: filteredColumnSamples().length === 0 -->
     <tbody>
     <tr>
       <!-- ko ifnot: hasErrors --><!-- /ko -->
       <!-- ko if: hasErrors -->
-      <td style=\\"font-style: italic;\\">Error loading samples</td>
+      <td style="font-style: italic;">Error loading samples</td>
       <!-- /ko -->
     </tr>
     </tbody>

+ 10 - 10
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.globalSearch.test.js.snap

@@ -1,26 +1,26 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.globalSearch.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-global-search&quot;, params: params }\\"><script type=\\"text/html\\" id=\\"top-search-autocomp-item\\">
-    <a href=\\"javascript:void(0);\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-global-search&quot;, params: params }"><script type="text/html" id="top-search-autocomp-item">
+    <a href="javascript:void(0);">
       <div>
-        <div><i class=\\"fa fa-fw\\" data-bind=\\"css: icon\\"></i></div>
+        <div><i class="fa fa-fw" data-bind="css: icon"></i></div>
         <div>
-          <div data-bind=\\"html: label, style: { 'padding-top': description ? 0 : '9px' }\\"></div>
+          <div data-bind="html: label, style: { 'padding-top': description ? 0 : '9px' }"></div>
           <!-- ko if: description -->
-          <div data-bind=\\"html: description\\"></div>
+          <div data-bind="html: description"></div>
           <!-- /ko -->
         </div>
       </div>
     </a>
-  </script><script type=\\"text/html\\" id=\\"top-search-autocomp-no-match\\">
-    <div style=\\"height: 30px;\\">
+  </script><script type="text/html" id="top-search-autocomp-no-match">
+    <div style="height: 30px;">
       <div>No match found</div>
     </div>
-  </script><div class=\\"global-search-results global-search-empty\\" data-bind=\\"onClickOutside: onResultClickOutside\\">
+  </script><div class="global-search-results global-search-empty" data-bind="onClickOutside: onResultClickOutside">
     <div>No results found.</div>
-  </div><div class=\\"global-search-results\\" data-bind=\\"onClickOutside: onResultClickOutside, style: { 'height' : heightWhenDragging }\\">
-    <div class=\\"global-search-alternatives global-search-full-width\\" data-bind=\\"css: { 'global-search-full-width': !selectedResult() }, delayedOverflow\\" style=\\"position: relative\\">
+  </div><div class="global-search-results" data-bind="onClickOutside: onResultClickOutside, style: { 'height' : heightWhenDragging }">
+    <div class="global-search-alternatives global-search-full-width" data-bind="css: { 'global-search-full-width': !selectedResult() }, delayedOverflow" style="position: relative">
       <!-- ko foreach: searchResultCategories --><!-- /ko -->
       <!-- ko hueSpinner: { spin: loading() && searchResultCategories().length > 0, inline: true } --><!-- /ko -->
     </div>

+ 14 - 14
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.historyPanel.test.js.snap

@@ -1,26 +1,26 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.historyPanel.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-history-panel&quot;, params: params }\\"><button class=\\"btn btn-flat pull-right btn-toggle-jobs-panel\\" title=\\"Task History\\" data-bind=\\"click: toggleVisibility\\">
-    <i class=\\"fa fa-history\\"></i>
-    <div class=\\"jobs-badge\\" data-bind=\\"text: historyRunningJobs().length, visible: historyRunningJobs().length > 0\\" style=\\"display: none;\\">0</div>
-  </button><div class=\\"jobs-panel history-panel\\" data-bind=\\"visible: historyPanelVisible, style: { 'top' : top, 'left': left }\\" style=\\"display: none;\\">
-    <a class=\\"pointer inactive-action pull-right\\" data-bind=\\"click: function(){ historyPanelVisible(false); }\\"><i class=\\"fa fa-fw fa-times\\"></i></a>
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-history-panel&quot;, params: params }"><button class="btn btn-flat pull-right btn-toggle-jobs-panel" title="Task History" data-bind="click: toggleVisibility">
+    <i class="fa fa-history"></i>
+    <div class="jobs-badge" data-bind="text: historyRunningJobs().length, visible: historyRunningJobs().length > 0" style="display: none;">0</div>
+  </button><div class="jobs-panel history-panel" data-bind="visible: historyPanelVisible, style: { 'top' : top, 'left': left }" style="display: none;">
+    <a class="pointer inactive-action pull-right" data-bind="click: function(){ historyPanelVisible(false); }"><i class="fa fa-fw fa-times"></i></a>
     <!-- ko ifnot: editorViewModel.selectedNotebook() && editorViewModel.selectedNotebook().history().length > 0 -->
-      <span style=\\"font-style: italic\\">No task history.</span>
+      <span style="font-style: italic">No task history.</span>
     <!-- /ko -->
     <!-- ko if: editorViewModel.selectedNotebook() && editorViewModel.selectedNotebook().history().length > 0 --><!-- /ko -->
-  </div><div id=\\"clearNotificationHistoryModal\\" class=\\"modal hide fade\\" data-backdrop=\\"false\\">
-    <div class=\\"modal-header\\">
-      <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
-      <h2 class=\\"modal-title\\">Confirm History Clearing</h2>
+  </div><div id="clearNotificationHistoryModal" class="modal hide fade" data-backdrop="false">
+    <div class="modal-header">
+      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+      <h2 class="modal-title">Confirm History Clearing</h2>
     </div>
-    <div class=\\"modal-body\\">
+    <div class="modal-body">
       <p>Are you sure you want to clear the task history?</p>
     </div>
-    <div class=\\"modal-footer\\">
-      <a class=\\"btn\\" data-dismiss=\\"modal\\">No</a>
-      <a class=\\"btn btn-danger disable-feedback\\" data-bind=\\"click: function() { editorViewModel.selectedNotebook().clearHistory(); editorViewModel.selectedNotebook(null); }\\">Yes</a>
+    <div class="modal-footer">
+      <a class="btn" data-dismiss="modal">No</a>
+      <a class="btn btn-danger disable-feedback" data-bind="click: function() { editorViewModel.selectedNotebook().clearHistory(); editorViewModel.selectedNotebook(null); }">Yes</a>
     </div>
   </div></div>"
 `;

+ 23 - 23
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.importDocumentsModal.test.js.snap

@@ -1,47 +1,47 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.importDocumentsModal.js should render component 1`] = `
-"<html><head></head><body class=\\"modal-open\\"><div id=\\"importDocumentsModal\\" data-bind=\\"descendantsComplete: descendantsComplete, component: { name: 'import-documents-modal', params: params }\\" data-keyboard=\\"true\\" class=\\"modal hide fade fileupload-modal in\\" tabindex=\\"-1\\" aria-hidden=\\"false\\">
-<div class=\\"modal-header\\">
-  <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
+"<html><head></head><body class="modal-open"><div id="importDocumentsModal" data-bind="descendantsComplete: descendantsComplete, component: { name: 'import-documents-modal', params: params }" data-keyboard="true" class="modal hide fade fileupload-modal in" tabindex="-1" aria-hidden="false">
+<div class="modal-header">
+  <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
   <!-- ko if: isHistory --><!-- /ko -->
   <!-- ko ifnot: isHistory -->
-  <h2 class=\\"modal-title\\">Import Hue Documents</h2>
+  <h2 class="modal-title">Import Hue Documents</h2>
   <!-- /ko -->
 </div>
 
 <!-- ko ifnot: imported --> 
-<div class=\\"modal-body\\">
+<div class="modal-body">
   <!-- ko with: activeEntry -->
-  <form id=\\"importDocumentsForm\\" class=\\"form-horizontal\\" style=\\"display: inline\\" enctype=\\"multipart/form-data\\">
-    <div data-bind=\\"visible: uploading() || uploadComplete()\\" style=\\"display: none;\\">
-      <span data-bind=\\"visible: uploading()\\" style=\\"display: none;\\">Importing...</span>
-      <span data-bind=\\"visible: !uploadFailed() &amp;&amp; uploadComplete()\\" style=\\"display: none;\\">Import complete!</span>
-      <span data-bind=\\"visible: uploadFailed\\" style=\\"display: none;\\">Import failed!</span>
-      <progress data-bind=\\"visible: uploading() || uploadComplete()\\" id=\\"importDocumentsProgress\\" value=\\"0\\" max=\\"100\\" style=\\"width: 560px; display: none;\\"></progress>
+  <form id="importDocumentsForm" class="form-horizontal" style="display: inline" enctype="multipart/form-data">
+    <div data-bind="visible: uploading() || uploadComplete()" style="display: none;">
+      <span data-bind="visible: uploading()" style="display: none;">Importing...</span>
+      <span data-bind="visible: !uploadFailed() &amp;&amp; uploadComplete()" style="display: none;">Import complete!</span>
+      <span data-bind="visible: uploadFailed" style="display: none;">Import failed!</span>
+      <progress data-bind="visible: uploading() || uploadComplete()" id="importDocumentsProgress" value="0" max="100" style="width: 560px; display: none;"></progress>
     </div>
-    <div class=\\"pull-right\\">
+    <div class="pull-right">
       <!-- ko ifnot: uploading() || uploadComplete() -->
-      <input type=\\"button\\" class=\\"btn\\" data-clear=\\"fileupload\\" data-bind=\\"click: closeUploadModal\\" value=\\"Cancel\\">
-      <input type=\\"submit\\" class=\\"btn btn-danger\\" data-clear=\\"fileupload\\" data-bind=\\"enable: importEnabled, click: function() { upload($parent.importComplete) }\\" value=\\"Import\\" disabled=\\"\\">
+      <input type="button" class="btn" data-clear="fileupload" data-bind="click: closeUploadModal" value="Cancel">
+      <input type="submit" class="btn btn-danger" data-clear="fileupload" data-bind="enable: importEnabled, click: function() { upload($parent.importComplete) }" value="Import" disabled="">
       <!-- /ko -->
       <!-- ko if: uploading() || uploadComplete() --><!-- /ko -->
     </div>
 
-    <div class=\\"fileupload fileupload-new\\" data-provides=\\"fileupload\\" data-bind=\\"visible: !uploading() &amp;&amp; !uploadComplete()\\">
-      <span class=\\"btn btn-file\\">
-        <span class=\\"fileupload-new\\">Select json file</span>
-        <span class=\\"fileupload-exists\\">Change</span>
-        <input id=\\"importDocumentInput\\" type=\\"file\\" name=\\"documents\\" accept=\\".json\\" data-bind=\\"value: selectedImportFile\\">
+    <div class="fileupload fileupload-new" data-provides="fileupload" data-bind="visible: !uploading() &amp;&amp; !uploadComplete()">
+      <span class="btn btn-file">
+        <span class="fileupload-new">Select json file</span>
+        <span class="fileupload-exists">Change</span>
+        <input id="importDocumentInput" type="file" name="documents" accept=".json" data-bind="value: selectedImportFile">
       </span>
-      &nbsp;&nbsp;<span class=\\"fileupload-preview\\"></span>
-      <a href=\\"#\\" class=\\"fileupload-exists\\" data-clear=\\"fileupload\\"><i class=\\"fa fa-times\\"></i></a>
+      &nbsp;&nbsp;<span class="fileupload-preview"></span>
+      <a href="#" class="fileupload-exists" data-clear="fileupload"><i class="fa fa-times"></i></a>
     </div>
-    <input type=\\"hidden\\" name=\\"path\\" data-bind=\\"value: definition().path\\" value=\\"\\">
+    <input type="hidden" name="path" data-bind="value: definition().path" value="">
   </form>
   <!-- /ko -->
 </div>
 <!-- /ko -->
 <!-- ko if: imported --><!-- /ko -->
-</div><div class=\\"modal-backdrop fade in\\"></div></body></html>"
+</div><div class="modal-backdrop fade in"></div></body></html>"
 `;

+ 9 - 9
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.inlineAutocomplete.test.js.snap

@@ -1,24 +1,24 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.inlineAutocomplete.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;inline-autocomplete&quot;, params: params }\\"><div class=\\"inline-autocomp-container\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;inline-autocomplete&quot;, params: params }"><div class="inline-autocomp-container">
     <div>
       <!-- ko if: showMagnify --><!-- /ko-->
-      <form autocomplete=\\"off\\">
-        <input class=\\"inline-autocomp-input\\" autocorrect=\\"off\\" autocomplete=\\"do-not-autocomplete\\" autocapitalize=\\"off\\" spellcheck=\\"false\\" type=\\"text\\" data-bind=\\"
+      <form autocomplete="off">
+        <input class="inline-autocomp-input" autocorrect="off" autocomplete="do-not-autocomplete" autocapitalize="off" spellcheck="false" type="text" data-bind="
           attr: { 'placeHolder' : hasFocus() ? '' : placeHolder },
           textInput: searchInput,
           hasFocus: hasFocus,
           clearable: { value: searchInput, onClear: onClear },
-          css: { 'inline-autocomp-magnify-input': showMagnify }\\" placeholder=\\"Filter...\\">
-        <input class=\\"inline-autocomp-autocomp\\" disabled=\\"\\" type=\\"text\\" autocomplete=\\"do-not-autocomplete\\" data-bind=\\"
+          css: { 'inline-autocomp-magnify-input': showMagnify }" placeholder="Filter...">
+        <input class="inline-autocomp-autocomp" disabled="" type="text" autocomplete="do-not-autocomplete" data-bind="
           value: inlineAutocomplete,
-          css: { 'inline-autocomp-magnify-input': showMagnify }\\">
+          css: { 'inline-autocomp-magnify-input': showMagnify }">
       </form>
     </div>
-  </div><div class=\\"hue-drop-down-container hue-drop-down-fixed\\" data-bind=\\"event: { 'mousedown': facetDropDownMouseDown }, css: { 'open' : facetDropDownVisible() }, dropDownKeyUp: { onEsc: facetDropDownOnEsc, onEnter: facetDropDownOnEnter, onSelected: facetDropDownOnSelected, dropDownVisible: facetDropDownVisible }\\">
-    <div class=\\"dropdown-menu\\" style=\\"overflow-y: auto; display: none;\\" data-bind=\\"visible: facetSuggestions().length > 0\\">
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: facetSuggestions\\"></ul>
+  </div><div class="hue-drop-down-container hue-drop-down-fixed" data-bind="event: { 'mousedown': facetDropDownMouseDown }, css: { 'open' : facetDropDownVisible() }, dropDownKeyUp: { onEsc: facetDropDownOnEsc, onEnter: facetDropDownOnEnter, onSelected: facetDropDownOnSelected, dropDownVisible: facetDropDownVisible }">
+    <div class="dropdown-menu" style="overflow-y: auto; display: none;" data-bind="visible: facetSuggestions().length > 0">
+      <ul class="hue-inner-drop-down" data-bind="foreach: facetSuggestions"></ul>
     </div>
   </div></div>"
 `;

+ 1 - 1
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.jobBrowserLinks.test.js.snap

@@ -1,7 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.jobBrowserLinks.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-job-browser-links&quot;, params: params }\\"><div class=\\"btn-group pull-right\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-job-browser-links&quot;, params: params }"><div class="btn-group pull-right">
     <!-- ko if: window.IS_K8S_ONLY --><!-- /ko -->
     <!-- ko if: window.HAS_JOB_BROWSER && !window.getLastKnownConfig().has_computes --><!-- /ko -->
   </div></div>"

+ 21 - 21
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.navProperties.test.js.snap

@@ -1,38 +1,38 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.navProperties.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;nav-properties&quot;, params: params }\\"><script type=\\"text/html\\" id=\\"nav-property-edit-popover-content\\">
-    <div class=\\"hue-nav-property-edit-content\\">
-      <a href=\\"javascript: void(0);\\" class=\\"close-popover\\"><i class=\\"fa fa-times\\"></i></a>
-      <div class=\\"control-group\\" data-bind=\\"css: { 'error': keyInvalid }\\">
-        <label class=\\"control-label\\">Key</label>
-        <div class=\\"controls\\">
-          <input type=\\"text\\" placeholder=\\"Key\\" data-bind=\\"textInput: key\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;nav-properties&quot;, params: params }"><script type="text/html" id="nav-property-edit-popover-content">
+    <div class="hue-nav-property-edit-content">
+      <a href="javascript: void(0);" class="close-popover"><i class="fa fa-times"></i></a>
+      <div class="control-group" data-bind="css: { 'error': keyInvalid }">
+        <label class="control-label">Key</label>
+        <div class="controls">
+          <input type="text" placeholder="Key" data-bind="textInput: key">
         </div>
       </div>
-      <div class=\\"control-group\\" data-bind=\\"css: { 'error': valueInvalid }\\">
-        <label class=\\"control-label\\">Value</label>
-        <div class=\\"controls\\">
-          <input type=\\"text\\" placeholder=\\"Value\\" data-bind=\\"textInput: value\\">
+      <div class="control-group" data-bind="css: { 'error': valueInvalid }">
+        <label class="control-label">Value</label>
+        <div class="controls">
+          <input type="text" placeholder="Value" data-bind="textInput: value">
         </div>
       </div>
     </div>
-  </script><div class=\\"hue-nav-properties\\"><div data-bind=\\"hueSpinner: { spin: loading, inline: true }\\"></div></div><div class=\\"hue-nav-properties\\" data-bind=\\"click: startEdit, visibleOnHover: { selector: '.editable-inline-action' }\\">
+  </script><div class="hue-nav-properties"><div data-bind="hueSpinner: { spin: loading, inline: true }"></div></div><div class="hue-nav-properties" data-bind="click: startEdit, visibleOnHover: { selector: '.editable-inline-action' }">
     <!-- ko if: !properties().length --><!-- /ko -->
     <!-- ko foreach: properties -->
-    <div class=\\"hue-nav-property\\"><div class=\\"hue-nav-property-key\\" data-bind=\\"text: key, attr: { 'title': key }\\" title=\\"testProp\\">testProp</div><div class=\\"hue-nav-property-value\\" data-bind=\\"text: value, attr: { 'title': value }\\" title=\\"testVal\\">testVal</div></div>
+    <div class="hue-nav-property"><div class="hue-nav-property-key" data-bind="text: key, attr: { 'title': key }" title="testProp">testProp</div><div class="hue-nav-property-value" data-bind="text: value, attr: { 'title': value }" title="testVal">testVal</div></div>
     <!-- /ko -->
-    <div class=\\"editable-inline-action\\" title=\\"Edit\\"><a href=\\"javascript: void(0);\\" data-bind=\\"click: startEdit\\"><i class=\\"fa fa-pencil\\"></i></a></div>
-  </div><div class=\\"hue-nav-properties\\">
+    <div class="editable-inline-action" title="Edit"><a href="javascript: void(0);" data-bind="click: startEdit"><i class="fa fa-pencil"></i></a></div>
+  </div><div class="hue-nav-properties">
     <!-- ko foreach: properties -->
-    <div class=\\"hue-nav-property\\" data-bind=\\"tooltip: { placement: 'bottom' }, attr: { title: title }\\"><div class=\\"hue-nav-property-key\\" data-bind=\\"text: key\\">testProp</div><div class=\\"hue-nav-property-value\\" data-bind=\\"text: value\\">testVal</div></div>
+    <div class="hue-nav-property" data-bind="tooltip: { placement: 'bottom' }, attr: { title: title }"><div class="hue-nav-property-key" data-bind="text: key">testProp</div><div class="hue-nav-property-value" data-bind="text: value">testVal</div></div>
     <!-- /ko -->
-  </div><div class=\\"hue-nav-properties hue-nav-properties-edit\\">
+  </div><div class="hue-nav-properties hue-nav-properties-edit">
     <!-- ko foreach: editProperties --><!-- /ko -->
-    <div class=\\"hue-nav-property-add\\"><a href=\\"javascript: void(0);\\" title=\\"Add\\" data-bind=\\"click: addProperty\\"><i class=\\"fa fa-plus\\"></i></a></div>
-    <div class=\\"hue-nav-properties-edit-actions\\">
-      <a href=\\"javascript: void(0);\\" title=\\"Save\\" data-bind=\\"click: saveEdit\\"><i class=\\"fa fa-check\\"></i></a>
-      <a href=\\"javascript: void(0);\\" title=\\"Cancel\\" data-bind=\\"click: cancelEdit\\"><i class=\\"fa fa-close\\"></i></a>
+    <div class="hue-nav-property-add"><a href="javascript: void(0);" title="Add" data-bind="click: addProperty"><i class="fa fa-plus"></i></a></div>
+    <div class="hue-nav-properties-edit-actions">
+      <a href="javascript: void(0);" title="Save" data-bind="click: saveEdit"><i class="fa fa-check"></i></a>
+      <a href="javascript: void(0);" title="Cancel" data-bind="click: cancelEdit"><i class="fa fa-close"></i></a>
     </div>
   </div></div>"
 `;

+ 4 - 4
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.navTags.test.js.snap

@@ -1,8 +1,8 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.navTags.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;nav-tags&quot;, params: params }\\"><div style=\\"width: 100%; height: 20px; left: 6px; position: relative;\\" data-bind=\\"hueSpinner: { spin: loading }\\"></div><div class=\\"hue-tags read-only-tags\\" style=\\"width: 100%\\" data-bind=\\"ifnot: loading, css: { 'read-only-tags': readOnly }\\">
-   <textarea style=\\"width: 100%; display: none;\\" data-bind=\\"tagEditor: {
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;nav-tags&quot;, params: params }"><div style="width: 100%; height: 20px; left: 6px; position: relative;" data-bind="hueSpinner: { spin: loading }"></div><div class="hue-tags read-only-tags" style="width: 100%" data-bind="ifnot: loading, css: { 'read-only-tags': readOnly }">
+   <textarea style="width: 100%; display: none;" data-bind="tagEditor: {
       emptyPlaceholder: 'Add tags...',
       readOnly: readOnly,
       hasErrors: hasErrors,
@@ -13,7 +13,7 @@ exports[`ko.navTags.js should render component 1`] = `
       validRegExp: '^[a-zA-z0-9_-]{1,50}$',
       invalidMessage: 'Tags can only contain 1 to 50 alphanumeric characters, _ or -.',
       load: getSelectizeTags
-    }\\"></textarea><div style=\\"width: 100%\\" class=\\"selectize-control selectize-read-only multi\\" title=\\"testTag\\"><div class=\\"selectize-input items not-full has-options has-items\\"><div>testTag</div></div></div>
-   <div class=\\"selectize-error\\" style=\\"display: none;\\"><i class=\\"fa fa-exclamation-triangle\\"></i> <span class=\\"message\\"></span></div>
+    }"></textarea><div style="width: 100%" class="selectize-control selectize-read-only multi" title="testTag"><div class="selectize-input items not-full has-options has-items"><div>testTag</div></div></div>
+   <div class="selectize-error" style="display: none;"><i class="fa fa-exclamation-triangle"></i> <span class="message"></span></div>
   </div></div>"
 `;

+ 1 - 1
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.pollingCatalogEntriesList.test.js.snap

@@ -1,7 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.pollingCatalogEntriesList.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;polling-catalog-entries-list&quot;, params: params }\\"><div>
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;polling-catalog-entries-list&quot;, params: params }"><div>
     <!-- ko hueSpinner: { spin: !catalogEntryExists(), inline: true } --><!-- /ko -->
     <!-- ko if: catalogEntryExists --><!-- /ko -->
   </div></div>"

+ 3 - 3
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.quickQueryAction.test.js.snap

@@ -1,9 +1,9 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.quickQueryAction.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;quick-query-action&quot;, params: params }\\"><div style=\\"display: inline-block; margin-left: 20px; margin-top: 5px;\\">
-  <button class=\\"btn btn-mini disable-feedback\\" data-bind=\\"click: showQuickQuery\\">
-    <i class=\\"fa fa-play fa-fw\\"></i> Quick Query
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;quick-query-action&quot;, params: params }"><div style="display: inline-block; margin-left: 20px; margin-top: 5px;">
+  <button class="btn btn-mini disable-feedback" data-bind="click: showQuickQuery">
+    <i class="fa fa-play fa-fw"></i> Quick Query
   </button>
 </div></div>"
 `;

+ 55 - 55
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sentryPrivileges.test.js.snap

@@ -1,102 +1,102 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.sentryPrivileges.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-sentry-privileges&quot;, params: params }\\"><script type=\\"text/html\\" id=\\"sentry-privileges-component-role\\">
-    <div class=\\"acl-block-title\\">
-      <i class=\\"fa fa-cube muted\\"></i> <a class=\\"pointer\\" data-bind=\\"click: function(){  $parents[0].showRole($data); }\\"><span data-bind=\\"text: name\\"></span></a>
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-sentry-privileges&quot;, params: params }"><script type="text/html" id="sentry-privileges-component-role">
+    <div class="acl-block-title">
+      <i class="fa fa-cube muted"></i> <a class="pointer" data-bind="click: function(){  $parents[0].showRole($data); }"><span data-bind="text: name"></span></a>
     </div>
-    <div data-bind=\\"template: { name: 'sentry-privileges-component-privilege', foreach: privilegesForView }\\"></div>
-    <div class=\\"acl-block acl-actions\\">
-      <span class=\\"pointer\\" data-bind=\\"visible: privilegesForViewTo() < privileges().length, click: function(){ privilegesForViewTo(privilegesForViewTo() + 50) }\\" title=\\"Show 50 more...\\"><i class=\\"fa fa-ellipsis-h\\"></i></span>
-      <span class=\\"pointer\\" data-bind=\\"click: addPrivilege, visible: $parents[0].isSentryAdmin && !$parents[0].readOnly\\" title=\\"Add privilege\\"><i class=\\"fa fa-plus\\"></i></span>
-      <span class=\\"pointer\\" data-bind=\\"click: function() { $parents[0].listSentryPrivilegesByAuthorizable() }, visible: privilegesChanged().length > 0\\" title=\\"Undo\\"> &nbsp; <i class=\\"fa fa-undo\\"></i></span>
-      <span class=\\"pointer\\" data-bind=\\"click: function() { $parents[0].deletePrivilegeModal($data) }, visible: privilegesChanged().length > 0\\" title=\\"Save\\"> &nbsp; <i class=\\"fa fa-save\\"></i></span>
+    <div data-bind="template: { name: 'sentry-privileges-component-privilege', foreach: privilegesForView }"></div>
+    <div class="acl-block acl-actions">
+      <span class="pointer" data-bind="visible: privilegesForViewTo() < privileges().length, click: function(){ privilegesForViewTo(privilegesForViewTo() + 50) }" title="Show 50 more..."><i class="fa fa-ellipsis-h"></i></span>
+      <span class="pointer" data-bind="click: addPrivilege, visible: $parents[0].isSentryAdmin && !$parents[0].readOnly" title="Add privilege"><i class="fa fa-plus"></i></span>
+      <span class="pointer" data-bind="click: function() { $parents[0].listSentryPrivilegesByAuthorizable() }, visible: privilegesChanged().length > 0" title="Undo"> &nbsp; <i class="fa fa-undo"></i></span>
+      <span class="pointer" data-bind="click: function() { $parents[0].deletePrivilegeModal($data) }, visible: privilegesChanged().length > 0" title="Save"> &nbsp; <i class="fa fa-save"></i></span>
     </div>
-  </script><script type=\\"text/html\\" id=\\"sentry-privileges-component-privilege\\">
-    <div data-bind=\\"visible: status() != 'deleted' && status() != 'alreadydeleted'\\" class=\\"acl-block acl-block-airy\\">
+  </script><script type="text/html" id="sentry-privileges-component-privilege">
+    <div data-bind="visible: status() != 'deleted' && status() != 'alreadydeleted'" class="acl-block acl-block-airy">
       <!-- ko if: editing -->
-      <div class=\\"pull-right privilege-actions\\" data-bind=\\"visible: (grantOption() || $parents[1].isSentryAdmin) && !$parents[1].readOnly\\">
-        <a class=\\"pointer\\" style=\\"margin-right: 4px\\" data-bind=\\"click: function() { if (editing()) { editing(false); }}\\"><i class=\\"fa fa-eye\\"></i></a>
-        <a class=\\"pointer\\" style=\\"margin-right: 4px\\" data-bind=\\"click: remove\\"><i class=\\"fa fa-times\\"></i></a>
+      <div class="pull-right privilege-actions" data-bind="visible: (grantOption() || $parents[1].isSentryAdmin) && !$parents[1].readOnly">
+        <a class="pointer" style="margin-right: 4px" data-bind="click: function() { if (editing()) { editing(false); }}"><i class="fa fa-eye"></i></a>
+        <a class="pointer" style="margin-right: 4px" data-bind="click: remove"><i class="fa fa-times"></i></a>
       </div>
     
-      <div class=\\"inline-block\\" style=\\"vertical-align: middle\\">
-        <a class=\\"pointer\\" style=\\"padding-top: 4px\\" data-bind=\\"click: function(){ privilegeType('db'); action($parents[1].availableActions(privilegeScope())[0]) }\\">
-          <i class=\\"fa fa-fw fa-1halfx muted\\" data-bind=\\"css: {'fa-circle-o': privilegeType() != 'db' , 'fa-check-circle-o': privilegeType() == 'db'}\\"></i>
+      <div class="inline-block" style="vertical-align: middle">
+        <a class="pointer" style="padding-top: 4px" data-bind="click: function(){ privilegeType('db'); action($parents[1].availableActions(privilegeScope())[0]) }">
+          <i class="fa fa-fw fa-1halfx muted" data-bind="css: {'fa-circle-o': privilegeType() != 'db' , 'fa-check-circle-o': privilegeType() == 'db'}"></i>
         </a>
       </div>
-      <input type=\\"text\\" data-bind=\\"hiveChooser: $data.path, enable: privilegeType() == 'db', apiHelperUser: 'foo', apiHelperType: 'hive'\\" placeholder=\\"dbName.tableName <CTRL+SPACE>\\">
+      <input type="text" data-bind="hiveChooser: $data.path, enable: privilegeType() == 'db', apiHelperUser: 'foo', apiHelperType: 'hive'" placeholder="dbName.tableName <CTRL+SPACE>">
     
-      <div class=\\"inline-block\\" style=\\"vertical-align: middle\\">
-        <a class=\\"pointer\\" style=\\"padding-top: 4px\\" data-bind=\\"click: function(){ privilegeType('uri'); action('ALL'); }\\">
-          <i class=\\"fa fa-fw fa-1halfx muted\\" data-bind=\\"css: {'fa-circle-o': privilegeType() != 'uri' , 'fa-check-circle-o': privilegeType() == 'uri'}\\"></i>
+      <div class="inline-block" style="vertical-align: middle">
+        <a class="pointer" style="padding-top: 4px" data-bind="click: function(){ privilegeType('uri'); action('ALL'); }">
+          <i class="fa fa-fw fa-1halfx muted" data-bind="css: {'fa-circle-o': privilegeType() != 'uri' , 'fa-check-circle-o': privilegeType() == 'uri'}"></i>
         </a>
       </div>
-      <input type=\\"text\\" data-bind=\\"filechooser: $data.URI, enable: privilegeType() == 'uri', valueUpdate: 'afterkeydown'\\" placeholder=\\"URI\\">
+      <input type="text" data-bind="filechooser: $data.URI, enable: privilegeType() == 'uri', valueUpdate: 'afterkeydown'" placeholder="URI">
     
-      <select data-bind=\\"options: $parents[1].availableActions(privilegeScope()), value: $data.action, enable: (privilegeType() == 'db')\\" style=\\"width: 100px; margin-bottom: 0\\"></select>
+      <select data-bind="options: $parents[1].availableActions(privilegeScope()), value: $data.action, enable: (privilegeType() == 'db')" style="width: 100px; margin-bottom: 0"></select>
     
-      <div class=\\"margin-top-10\\">
-        <label class=\\"checkbox pull-left\\"><input type=\\"checkbox\\" data-bind=\\"checked: grantOption\\"> With grant</label>
-        <div class=\\"inline-block margin-left-10\\" style=\\"margin-top: 6px\\">
-          <a class=\\"pointer showAdvanced\\" data-bind=\\"click: function(){ showAdvanced(true); }, visible: !showAdvanced()\\"><i class=\\"fa fa-cog\\"></i> Show advanced</a>
-          <a class=\\"pointer showAdvanced\\" data-bind=\\"click: function(){ showAdvanced(false); }, visible: showAdvanced()\\"><i class=\\"fa fa-cog\\"></i> Hide advanced</a>
+      <div class="margin-top-10">
+        <label class="checkbox pull-left"><input type="checkbox" data-bind="checked: grantOption"> With grant</label>
+        <div class="inline-block margin-left-10" style="margin-top: 6px">
+          <a class="pointer showAdvanced" data-bind="click: function(){ showAdvanced(true); }, visible: !showAdvanced()"><i class="fa fa-cog"></i> Show advanced</a>
+          <a class="pointer showAdvanced" data-bind="click: function(){ showAdvanced(false); }, visible: showAdvanced()"><i class="fa fa-cog"></i> Hide advanced</a>
         </div>
-        <div class=\\"clearfix\\"></div>
+        <div class="clearfix"></div>
       </div>
     
-      <div class=\\"acl-block-section\\" data-bind=\\"visible: showAdvanced\\" style=\\"margin-top: 0\\">
-        Server <input type=\\"text\\" data-bind=\\"value: serverName\\" placeholder=\\"serverName\\" style=\\"margin-left: 6px\\">
+      <div class="acl-block-section" data-bind="visible: showAdvanced" style="margin-top: 0">
+        Server <input type="text" data-bind="value: serverName" placeholder="serverName" style="margin-left: 6px">
       </div>
       <!-- /ko -->
   
       <!-- ko ifnot: editing -->
-      <div class=\\"pull-right privilege-actions\\" data-bind=\\"visible: (grantOption() || $parents[1].isSentryAdmin) && !$parents[1].readOnly\\">
-        <a title=\\"Edit this privilege\\" class=\\"pointer\\" style=\\"margin-right: 4px\\" data-bind=\\"visible: $parents[1].isSentryAdmin, click: function() { if (! editing()) { editing(true); }}\\"><i class=\\"fa fa-pencil\\"></i></a>
-        <a title=\\"Delete this privilege\\" class=\\"pointer\\" style=\\"margin-right: 4px\\" data-bind=\\"visible: $parents[1].isSentryAdmin, click: remove\\"><i class=\\"fa fa-times\\"></i></a>
+      <div class="pull-right privilege-actions" data-bind="visible: (grantOption() || $parents[1].isSentryAdmin) && !$parents[1].readOnly">
+        <a title="Edit this privilege" class="pointer" style="margin-right: 4px" data-bind="visible: $parents[1].isSentryAdmin, click: function() { if (! editing()) { editing(true); }}"><i class="fa fa-pencil"></i></a>
+        <a title="Delete this privilege" class="pointer" style="margin-right: 4px" data-bind="visible: $parents[1].isSentryAdmin, click: remove"><i class="fa fa-times"></i></a>
       </div>
   
-      <span class=\\"muted\\" data-bind=\\"text: privilegeScope, attr: {title: moment(timestamp()).fromNow()}\\"></span>
+      <span class="muted" data-bind="text: privilegeScope, attr: {title: moment(timestamp()).fromNow()}"></span>
       <!-- ko if: grantOption -->
-        <i class=\\"fa fa-unlock muted\\" title=\\"With grant option\\"></i>
+        <i class="fa fa-unlock muted" title="With grant option"></i>
       <!-- /ko -->
-      <span data-bind=\\"visible: metastorePath() != '' && privilegeType() == 'db'\\">
-        <a data-bind=\\"hueLink: metastorePath()\\" class=\\"muted\\" style=\\"margin-left: 4px\\" title=\\"Open in Table Browser...\\"><i class=\\"fa fa-external-link\\"></i></a>
+      <span data-bind="visible: metastorePath() != '' && privilegeType() == 'db'">
+        <a data-bind="hueLink: metastorePath()" class="muted" style="margin-left: 4px" title="Open in Table Browser..."><i class="fa fa-external-link"></i></a>
       </span>
       <br/>
   
-      server=<span data-bind=\\"text: serverName\\"></span>
+      server=<span data-bind="text: serverName"></span>
   
       <!-- ko if: privilegeType() == 'db' -->
-      <span data-bind=\\"visible: dbName\\">
-        <i class=\\"fa fa-long-arrow-right\\"></i> db=<a class=\\"pointer\\" data-bind=\\"click: function(){ $parents[1].linkToBrowse(dbName()) }\\" title=\\"Browse db privileges\\"><span data-bind=\\"text: dbName\\"></span></a>
+      <span data-bind="visible: dbName">
+        <i class="fa fa-long-arrow-right"></i> db=<a class="pointer" data-bind="click: function(){ $parents[1].linkToBrowse(dbName()) }" title="Browse db privileges"><span data-bind="text: dbName"></span></a>
       </span>
-      <span data-bind=\\"visible: tableName\\">
-        <i class=\\"fa fa-long-arrow-right\\"></i> table=<a class=\\"pointer\\" data-bind=\\"click: function(){ $parents[1].linkToBrowse(dbName() + '.' + tableName()) }\\" title=\\"Browse table privileges\\"><span data-bind=\\"text: tableName\\"></span></a>
+      <span data-bind="visible: tableName">
+        <i class="fa fa-long-arrow-right"></i> table=<a class="pointer" data-bind="click: function(){ $parents[1].linkToBrowse(dbName() + '.' + tableName()) }" title="Browse table privileges"><span data-bind="text: tableName"></span></a>
       </span>
-      <span data-bind=\\"visible: columnName\\">
-        <i class=\\"fa fa-long-arrow-right\\"></i> column=<a class=\\"pointer\\" data-bind=\\"click: function(){ $parents[1].linkToBrowse(dbName() + '.' + tableName() + '.' + columnName()) }\\" title=\\"Browse column privileges\\"><span data-bind=\\"text: columnName\\"></span></a>
+      <span data-bind="visible: columnName">
+        <i class="fa fa-long-arrow-right"></i> column=<a class="pointer" data-bind="click: function(){ $parents[1].linkToBrowse(dbName() + '.' + tableName() + '.' + columnName()) }" title="Browse column privileges"><span data-bind="text: columnName"></span></a>
       </span>
       <!-- /ko -->
   
       <!-- ko if: privilegeType() == 'uri' -->
-      <i class=\\"fa fa-long-arrow-right\\"></i> <i class=\\"fa fa-file-o\\"></i> <i class=\\"fa fa-long-arrow-right\\"></i> <a data-bind=\\"hueLink: '/filebrowser/view=/' + URI().split('/')[3]\\"><span data-bind=\\"text: URI\\"></span></a>
+      <i class="fa fa-long-arrow-right"></i> <i class="fa fa-file-o"></i> <i class="fa fa-long-arrow-right"></i> <a data-bind="hueLink: '/filebrowser/view=/' + URI().split('/')[3]"><span data-bind="text: URI"></span></a>
       <!-- /ko -->
   
-      <i class=\\"fa fa-long-arrow-right\\"></i> action=<span data-bind=\\"text: action\\"></span>
+      <i class="fa fa-long-arrow-right"></i> action=<span data-bind="text: action"></span>
       <!-- /ko -->
     </div>
-  </script><div data-bind=\\"template: { name: 'sentry-privileges-component-role', foreach: roles }\\"></div><em>No privileges found for the selected object.</em><div id=\\"sentryPrivilegesComponentDeletePrivilegeModal\\" class=\\"modal hide fade in\\" role=\\"dialog\\">
-    <div class=\\"modal-header\\">
-      <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
-      <h2 class=\\"modal-title\\">Confirm the deletion?</h2>
+  </script><div data-bind="template: { name: 'sentry-privileges-component-role', foreach: roles }"></div><em>No privileges found for the selected object.</em><div id="sentryPrivilegesComponentDeletePrivilegeModal" class="modal hide fade in" role="dialog">
+    <div class="modal-header">
+      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+      <h2 class="modal-title">Confirm the deletion?</h2>
     </div>
-    <div class=\\"modal-body\\">
+    <div class="modal-body">
       Sentry will recursively delete the SERVER or DATABASE privileges you marked for deletion.
     </div>
-    <div class=\\"modal-footer\\">
-      <button class=\\"btn\\" data-dismiss=\\"modal\\" aria-hidden=\\"true\\">Cancel</button>
-      <button data-loading-text=\\"Deleting...\\" class=\\"btn btn-danger\\" data-bind=\\"click: function() { roleToUpdate().savePrivileges(roleToUpdate()); }\\">Yes, delete</button>
+    <div class="modal-footer">
+      <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
+      <button data-loading-text="Deleting..." class="btn btn-danger" data-bind="click: function() { roleToUpdate().savePrivileges(roleToUpdate()); }">Yes, delete</button>
     </div>
   </div></div>"
 `;

+ 21 - 21
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sessionAuthModal.test.js.snap

@@ -1,37 +1,37 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.sessionAuthModal.js should render component 1`] = `
-"<html><head></head><body class=\\"modal-open\\"><div id=\\"sessionAuthModal\\" data-bind=\\"descendantsComplete: descendantsComplete, component: { name: 'session-auth-modal', params: params }\\" data-keyboard=\\"true\\" class=\\"modal hide fade in\\" tabindex=\\"-1\\" aria-hidden=\\"false\\">
-<div class=\\"modal-header\\">
-  <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
-  <h2 class=\\"modal-title\\">Connect to the data source</h2>
+"<html><head></head><body class="modal-open"><div id="sessionAuthModal" data-bind="descendantsComplete: descendantsComplete, component: { name: 'session-auth-modal', params: params }" data-keyboard="true" class="modal hide fade in" tabindex="-1" aria-hidden="false">
+<div class="modal-header">
+  <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+  <h2 class="modal-title">Connect to the data source</h2>
 </div>
-<div class=\\"modal-body\\">
+<div class="modal-body">
   <!-- ko if: authSessionMessage -->
-    <div class=\\"row-fluid\\">
-      <div class=\\"alert-warning\\">
-        <span data-bind=\\"text: authSessionMessage\\">hello</span>
+    <div class="row-fluid">
+      <div class="alert-warning">
+        <span data-bind="text: authSessionMessage">hello</span>
       </div>
     </div>
   <!-- /ko -->
-  <div class=\\"row-fluid\\">
-    <div class=\\"span6\\">
-      <div class=\\"input-prepend\\">
-        <span class=\\"add-on muted\\"><i class=\\"fa fa-user\\"></i></span>
-        <input name=\\"username\\" data-test=\\"usernameInput\\" type=\\"text\\" data-bind=\\"textInput: authSessionUsername\\" placeholder=\\"Username\\">
+  <div class="row-fluid">
+    <div class="span6">
+      <div class="input-prepend">
+        <span class="add-on muted"><i class="fa fa-user"></i></span>
+        <input name="username" data-test="usernameInput" type="text" data-bind="textInput: authSessionUsername" placeholder="Username">
       </div>
     </div>
-    <div class=\\"span6\\">
-      <div class=\\"input-prepend\\">
-        <span class=\\"add-on muted\\"><i class=\\"fa fa-lock\\"></i></span>
-        <input name=\\"password\\" data-test=\\"passwordInput\\" type=\\"password\\" data-bind=\\"textInput: authSessionPassword\\" placeholder=\\"Password\\">
+    <div class="span6">
+      <div class="input-prepend">
+        <span class="add-on muted"><i class="fa fa-lock"></i></span>
+        <input name="password" data-test="passwordInput" type="password" data-bind="textInput: authSessionPassword" placeholder="Password">
       </div>
     </div>
   </div>
 </div>
-<div class=\\"modal-footer\\">
-  <a class=\\"btn\\" data-dismiss=\\"modal\\">Cancel</a>
-  <a class=\\"btn btn-primary disable-feedback\\" data-bind=\\"click: connect, css: { 'disabled': loading }\\"><i class=\\"fa fa-spinner fa-spin\\" data-bind=\\"visible: loading\\" style=\\"display: none;\\"></i> Connect</a>
+<div class="modal-footer">
+  <a class="btn" data-dismiss="modal">Cancel</a>
+  <a class="btn btn-primary disable-feedback" data-bind="click: connect, css: { 'disabled': loading }"><i class="fa fa-spinner fa-spin" data-bind="visible: loading" style="display: none;"></i> Connect</a>
 </div>
-</div><div class=\\"modal-backdrop fade in\\"></div></body></html>"
+</div><div class="modal-backdrop fade in"></div></body></html>"
 `;

+ 5 - 5
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sessionPanel.test.js.snap

@@ -1,17 +1,17 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.sessionPanel.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;session-panel&quot;, params: params }\\"><div class=\\"session-panel\\" data-test=\\"session-panel\\" data-bind=\\"slideVisible: visible\\" style=\\"display: none;\\">
-  <div class=\\"margin-top-10 padding-left-10 padding-right-10\\">
-    <h4 class=\\"margin-bottom-10\\"><i class=\\"fa fa-cogs\\"></i> Sessions</h4>
-    <div class=\\"session-panel-content\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;session-panel&quot;, params: params }"><div class="session-panel" data-test="session-panel" data-bind="slideVisible: visible" style="display: none;">
+  <div class="margin-top-10 padding-left-10 padding-right-10">
+    <h4 class="margin-bottom-10"><i class="fa fa-cogs"></i> Sessions</h4>
+    <div class="session-panel-content">
       <!-- ko ifnot: sessions().length -->
       There are currently no information about the sessions.
       <!-- /ko -->
       
       <!-- ko if: sessions().length --><!-- /ko -->
     </div>
-    <a class=\\"pointer demi-modal-chevron\\" style=\\"position: absolute; bottom: 0\\" data-bind=\\"toggle: visible\\"><i class=\\"fa fa-chevron-up\\"></i></a>
+    <a class="pointer demi-modal-chevron" style="position: absolute; bottom: 0" data-bind="toggle: visible"><i class="fa fa-chevron-up"></i></a>
   </div>
 </div></div>"
 `;

+ 13 - 13
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.shareGistModal.test.js.snap

@@ -1,24 +1,24 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.shareGistModal.js should render component 1`] = `
-"<html><head></head><body class=\\"modal-open\\"><div id=\\"shareGistModal\\" data-bind=\\"descendantsComplete: descendantsComplete, component: { name: 'share-gist-modal', params: params }\\" data-keyboard=\\"true\\" class=\\"modal hide fade in\\" tabindex=\\"-1\\" aria-hidden=\\"false\\">
-  <div class=\\"modal-header\\">
-    <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
-    <h2 class=\\"modal-title\\">Shareable link</h2>
+"<html><head></head><body class="modal-open"><div id="shareGistModal" data-bind="descendantsComplete: descendantsComplete, component: { name: 'share-gist-modal', params: params }" data-keyboard="true" class="modal hide fade in" tabindex="-1" aria-hidden="false">
+  <div class="modal-header">
+    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+    <h2 class="modal-title">Shareable link</h2>
   </div>
-  <div class=\\"modal-body\\">
-    <div class=\\"row-fluid\\">
-      <div class=\\"input-append\\">
-        <form autocomplete=\\"off\\">
-          <input id=\\"gistLink\\" style=\\"width: 510px\\" autocorrect=\\"off\\" autocomplete=\\"do-not-autocomplete\\" autocapitalize=\\"off\\" spellcheck=\\"false\\" onfocus=\\"this.select()\\" data-bind=\\"value: link\\" type=\\"text\\" placeholder=\\"Link\\" readonly=\\"readonly\\">
-          <button class=\\"btn\\" type=\\"button\\" data-dismiss=\\"modal\\" data-clipboard-target=\\"#gistLink\\" data-bind=\\"clipboard\\"><i class=\\"fa fa-clipboard\\"></i></button>
+  <div class="modal-body">
+    <div class="row-fluid">
+      <div class="input-append">
+        <form autocomplete="off">
+          <input id="gistLink" style="width: 510px" autocorrect="off" autocomplete="do-not-autocomplete" autocapitalize="off" spellcheck="false" onfocus="this.select()" data-bind="value: link" type="text" placeholder="Link" readonly="readonly">
+          <button class="btn" type="button" data-dismiss="modal" data-clipboard-target="#gistLink" data-bind="clipboard"><i class="fa fa-clipboard"></i></button>
         </form>
       </div>
     </div>
     <!-- ko if: window.SHARE_TO_SLACK --><!-- /ko -->
   </div>
-  <div class=\\"modal-footer\\">
-    <a class=\\"btn\\" data-dismiss=\\"modal\\">Close</a>
+  <div class="modal-footer">
+    <a class="btn" data-dismiss="modal">Close</a>
   </div>
-</div><div class=\\"modal-backdrop fade in\\"></div></body></html>"
+</div><div class="modal-backdrop fade in"></div></body></html>"
 `;

+ 18 - 18
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sqlColumnsTable.test.js.snap

@@ -1,11 +1,11 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.sqlColumnsTable.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;sql-columns-table&quot;, params: params }\\"><div class=\\"context-popover-flex\\">
-      <div class=\\"context-popover-flex-header\\">
-        <div class=\\"context-popover-header\\" style=\\"display:inline-block;\\">Columns (<span data-bind=\\"text: filteredColumns().length\\">0</span>)</div>
-        <div class=\\"context-popover-inline-autocomplete\\">
-          <div class=\\"context-popover-asterisk-filter\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;sql-columns-table&quot;, params: params }"><div class="context-popover-flex">
+      <div class="context-popover-flex-header">
+        <div class="context-popover-header" style="display:inline-block;">Columns (<span data-bind="text: filteredColumns().length">0</span>)</div>
+        <div class="context-popover-inline-autocomplete">
+          <div class="context-popover-asterisk-filter">
             <!-- ko component: {
               name: 'inline-autocomplete',
               params: {
@@ -14,35 +14,35 @@ exports[`ko.sqlColumnsTable.js should render component 1`] = `
                 knownFacetValues: SQL_COLUMNS_KNOWN_FACET_VALUES,
                 autocompleteFromEntries: autocompleteFromEntries
               }
-            } --><div class=\\"inline-autocomp-container\\">
+            } --><div class="inline-autocomp-container">
     <div>
       <!-- ko if: showMagnify --><!-- /ko-->
-      <form autocomplete=\\"off\\">
-        <input class=\\"inline-autocomp-input\\" autocorrect=\\"off\\" autocomplete=\\"do-not-autocomplete\\" autocapitalize=\\"off\\" spellcheck=\\"false\\" type=\\"text\\" data-bind=\\"
+      <form autocomplete="off">
+        <input class="inline-autocomp-input" autocorrect="off" autocomplete="do-not-autocomplete" autocapitalize="off" spellcheck="false" type="text" data-bind="
           attr: { 'placeHolder' : hasFocus() ? '' : placeHolder },
           textInput: searchInput,
           hasFocus: hasFocus,
           clearable: { value: searchInput, onClear: onClear },
-          css: { 'inline-autocomp-magnify-input': showMagnify }\\" placeholder=\\"Filter...\\">
-        <input class=\\"inline-autocomp-autocomp\\" disabled=\\"\\" type=\\"text\\" autocomplete=\\"do-not-autocomplete\\" data-bind=\\"
+          css: { 'inline-autocomp-magnify-input': showMagnify }" placeholder="Filter...">
+        <input class="inline-autocomp-autocomp" disabled="" type="text" autocomplete="do-not-autocomplete" data-bind="
           value: inlineAutocomplete,
-          css: { 'inline-autocomp-magnify-input': showMagnify }\\">
+          css: { 'inline-autocomp-magnify-input': showMagnify }">
       </form>
     </div>
-  </div><div class=\\"hue-drop-down-container hue-drop-down-fixed\\" data-bind=\\"event: { 'mousedown': facetDropDownMouseDown }, css: { 'open' : facetDropDownVisible() }, dropDownKeyUp: { onEsc: facetDropDownOnEsc, onEnter: facetDropDownOnEnter, onSelected: facetDropDownOnSelected, dropDownVisible: facetDropDownVisible }\\">
-    <div class=\\"dropdown-menu\\" style=\\"overflow-y: auto; display: none;\\" data-bind=\\"visible: facetSuggestions().length > 0\\">
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: facetSuggestions\\"></ul>
+  </div><div class="hue-drop-down-container hue-drop-down-fixed" data-bind="event: { 'mousedown': facetDropDownMouseDown }, css: { 'open' : facetDropDownVisible() }, dropDownKeyUp: { onEsc: facetDropDownOnEsc, onEnter: facetDropDownOnEnter, onSelected: facetDropDownOnSelected, dropDownVisible: facetDropDownVisible }">
+    <div class="dropdown-menu" style="overflow-y: auto; display: none;" data-bind="visible: facetSuggestions().length > 0">
+      <ul class="hue-inner-drop-down" data-bind="foreach: facetSuggestions"></ul>
     </div>
   </div><!-- /ko -->
           </div>
         </div>
       </div>
-      <div class=\\"context-popover-flex-fill sql-columns-table\\" style=\\"position:relative; height: 100%; overflow-y: auto;\\">
-        <div style=\\"position: relative; width: 100%; height: 0px;\\" class=\\"foreach-wrapper\\"><table id=\\"sqlColumnsTable\\" style=\\"width: 100%; position: absolute; top: 0px;\\" class=\\"table table-condensed table-nowrap\\">
+      <div class="context-popover-flex-fill sql-columns-table" style="position:relative; height: 100%; overflow-y: auto;">
+        <div style="position: relative; width: 100%; height: 0px;" class="foreach-wrapper"><table id="sqlColumnsTable" style="width: 100%; position: absolute; top: 0px;" class="table table-condensed table-nowrap">
           <!-- ko if: filteredColumns().length !== 0 --><!-- /ko -->
-          <tbody data-bind=\\"foreachVisible: { data: filteredColumns, minHeight: 29, container: '.sql-columns-table', pubSubDispose: 'context.popover.dispose' }\\"></tbody>
+          <tbody data-bind="foreachVisible: { data: filteredColumns, minHeight: 29, container: '.sql-columns-table', pubSubDispose: 'context.popover.dispose' }"></tbody>
         </table></div>
-        <div class=\\"context-popover-empty-columns\\" data-bind=\\"visible: filteredColumns().length === 0\\">No columns found</div>
+        <div class="context-popover-empty-columns" data-bind="visible: filteredColumns().length === 0">No columns found</div>
       </div>
     </div></div>"
 `;

+ 4 - 4
desktop/core/src/desktop/js/ko/components/assist/__snapshots__/ko.assistKey.test.js.snap

@@ -1,7 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.assistKey.js should render component 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;hue-assist-key&quot;, params: params }\\"><a class=\\"assist-field-link\\" style=\\"padding: 0 2px;\\" href=\\"javascript: void(0);\\" data-bind=\\"
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;hue-assist-key&quot;, params: params }"><a class="assist-field-link" style="padding: 0 2px;" href="javascript: void(0);" data-bind="
           tooltip: {
             title: foreignKeyTooltipHtml,
             html: true,
@@ -9,15 +9,15 @@ exports[`ko.assistKey.js should render component 1`] = `
           },
           click: foreignKeyClick,
           clickbubble: false
-        \\" data-original-title=\\"\\"><i class=\\"fa fa-key\\"></i></a><i class=\\"fa fa-key\\" style=\\"padding: 0 2px;\\" data-bind=\\"
+        " data-original-title=""><i class="fa fa-key"></i></a><i class="fa fa-key" style="padding: 0 2px;" data-bind="
           tooltip: {
             title: 'Foreign Key',
             placement: 'bottom'
           }
-        \\" data-original-title=\\"\\"></i><i class=\\"fa fa-key\\" style=\\"padding: 0 2px;\\" data-bind=\\"
+        " data-original-title=""></i><i class="fa fa-key" style="padding: 0 2px;" data-bind="
         tooltip: {
           title: entry.isPrimaryKey() ? 'Primary Key' : 'Partition Key',
           placement: 'bottom'
         }
-      \\" data-original-title=\\"\\"></i><i class=\\"fa fa-key\\"></i></div>"
+      " data-original-title=""></i><i class="fa fa-key"></i></div>"
 `;

+ 1 - 1
desktop/core/src/desktop/js/ko/components/contextPopover/__snapshots__/ko.popoverOnHover.test.js.snap

@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`ko.popoverOnHover.js should render binding 1`] = `"<div id=\\"foo\\" data-bind=\\"popoverOnHover: () => {}\\"></div>"`;
+exports[`ko.popoverOnHover.js should render binding 1`] = `"<div id="foo" data-bind="popoverOnHover: () => {}"></div>"`;

+ 22 - 22
desktop/core/src/desktop/js/ko/components/doc/__snapshots__/ko.linkSharing.test.js.snap

@@ -1,19 +1,19 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.linkSharing.js should render component activated 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;link-sharing&quot;, params: params }\\"><div class=\\"hue-link-sharing\\">
-    <div style=\\"float: right\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;link-sharing&quot;, params: params }"><div class="hue-link-sharing">
+    <div style="float: right">
       <!-- ko ifnot: perms().link_sharing_on --><!-- /ko -->
       <!-- ko if: perms().link_sharing_on -->
-      <a href=\\"javascript:void(0)\\" data-test=\\"deactivate\\" data-bind=\\"click: deactivateLink\\" title=\\"Deactivate the link sharing\\">
-        <i class=\\"fa fa-wf fa-link\\"></i> Deactivate link
+      <a href="javascript:void(0)" data-test="deactivate" data-bind="click: deactivateLink" title="Deactivate the link sharing">
+        <i class="fa fa-wf fa-link"></i> Deactivate link
       </a>
       <!-- /ko -->
     </div>
     <!-- ko if: perms().link_sharing_on -->
     <div>
       Any logged in user with the link can
-      <div class=\\"perm-selector\\" data-bind=\\"component: {
+      <div class="perm-selector" data-bind="component: {
           name: 'hue-drop-down',
           params: {
             value: selectedPerm,
@@ -21,40 +21,40 @@ exports[`ko.linkSharing.js should render component activated 1`] = `
             onSelect: changePerm.bind($data)
           }
         }
-      \\"><a class=\\"inactive-action hue-drop-down-active\\" href=\\"javascript:void(0)\\" data-bind=\\"
+      "><a class="inactive-action hue-drop-down-active" href="javascript:void(0)" data-bind="
     attr: {
       'data-testid': dataTestId
     },
     toggle: dropDownVisible,
-    css: { 'blue': dropDownVisible }\\">
+    css: { 'blue': dropDownVisible }">
     <!-- ko if: icon --><!-- /ko -->
     <!-- ko if: !noLabel && value -->
-    <span class=\\"hue-drop-down-selected\\" data-bind=\\"text: value() &amp;&amp; typeof value()[labelAttribute] !== 'undefined' ? value()[labelAttribute] : value(), visible: ! dropDownVisible() || !searchable, attr: { 'title': titleTooltip }\\" title=\\"read\\">read</span>
+    <span class="hue-drop-down-selected" data-bind="text: value() &amp;&amp; typeof value()[labelAttribute] !== 'undefined' ? value()[labelAttribute] : value(), visible: ! dropDownVisible() || !searchable, attr: { 'title': titleTooltip }" title="read">read</span>
     <!-- /ko -->
-    <i class=\\"fa fa-caret-down\\"></i>
-  </a><input class=\\"hue-drop-down-input\\" type=\\"text\\" data-bind=\\"textInput: filter, attr: { 'placeHolder': inputPlaceHolder }, visible: dropDownVisible, style: { color: filterEdited() ? '#000' : '#AAA', 'min-height': '22px', 'margin-left': '10px' }\\" placeholder=\\"read\\" style=\\"display: none; color: rgb(170, 170, 170); min-height: 22px; margin-left: 10px;\\"><i class=\\"fa fa-caret-down\\"></i><div class=\\"hue-drop-down-container\\" data-bind=\\"css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }\\">
-    <div style=\\"overflow-y: auto;\\" class=\\"dropdown-menu\\" data-bind=\\"visible: filteredEntries().length > 0\\">
+    <i class="fa fa-caret-down"></i>
+  </a><input class="hue-drop-down-input" type="text" data-bind="textInput: filter, attr: { 'placeHolder': inputPlaceHolder }, visible: dropDownVisible, style: { color: filterEdited() ? '#000' : '#AAA', 'min-height': '22px', 'margin-left': '10px' }" placeholder="read" style="display: none; color: rgb(170, 170, 170); min-height: 22px; margin-left: 10px;"><i class="fa fa-caret-down"></i><div class="hue-drop-down-container" data-bind="css: { 'open' : dropDownVisible, 'hue-drop-down-fixed': fixedPosition, 'hue-drop-down-container-searchable': searchable }, dropDownKeyUp: { onEsc: onEsc, onEnter: onEnter, dropDownVisible: dropDownVisible }">
+    <div style="overflow-y: auto;" class="dropdown-menu" data-bind="visible: filteredEntries().length > 0">
       <!-- ko if: foreachVisible --><!-- /ko -->
       <!-- ko ifnot: foreachVisible -->
-      <ul class=\\"hue-inner-drop-down\\" data-bind=\\"foreach: filteredEntries\\">
+      <ul class="hue-inner-drop-down" data-bind="foreach: filteredEntries">
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">read</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">read</a></li>
         <!-- /ko -->
       
         <!-- ko if: typeof $data.divider !== 'undefined' && $data.divider --><!-- /ko -->
         <!-- ko if: typeof $data.divider === 'undefined' || !$data.divider -->
-        <li><a href=\\"javascript:void(0)\\" data-bind=\\"text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }\\">write</a></li>
+        <li><a href="javascript:void(0)" data-bind="text: $data &amp;&amp; typeof $data[$parent.labelAttribute] !== 'undefined' ? $data[$parent.labelAttribute] : $data, click: function () { let previous = $parent.value(); $parent.value($data); $parent.onSelect($data, previous); }">write</a></li>
         <!-- /ko -->
       </ul>
       <!-- /ko -->
     </div>
   </div></div>
     </div>
-    <div class=\\"input-append\\">
-      <form autocomplete=\\"off\\">
-        <input id=\\"sharedLinkInput\\" style=\\"width: 520px\\" autocorrect=\\"off\\" autocomplete=\\"do-not-autocomplete\\" autocapitalize=\\"off\\" spellcheck=\\"false\\" onfocus=\\"this.select()\\" data-bind=\\"value: link\\" type=\\"text\\" readonly=\\"readonly\\">
-        <button class=\\"btn\\" type=\\"button\\" data-clipboard-target=\\"#sharedLinkInput\\" data-bind=\\"clipboard\\"><i class=\\"fa fa-clipboard\\"></i></button>
+    <div class="input-append">
+      <form autocomplete="off">
+        <input id="sharedLinkInput" style="width: 520px" autocorrect="off" autocomplete="do-not-autocomplete" autocapitalize="off" spellcheck="false" onfocus="this.select()" data-bind="value: link" type="text" readonly="readonly">
+        <button class="btn" type="button" data-clipboard-target="#sharedLinkInput" data-bind="clipboard"><i class="fa fa-clipboard"></i></button>
       </form>
     </div>
     <!-- /ko -->
@@ -62,11 +62,11 @@ exports[`ko.linkSharing.js should render component activated 1`] = `
 `;
 
 exports[`ko.linkSharing.js should render component deactivated 1`] = `
-"<div data-bind=\\"descendantsComplete: descendantsComplete, component: { name: &quot;link-sharing&quot;, params: params }\\"><div class=\\"hue-link-sharing\\">
-    <div style=\\"float: right\\">
+"<div data-bind="descendantsComplete: descendantsComplete, component: { name: &quot;link-sharing&quot;, params: params }"><div class="hue-link-sharing">
+    <div style="float: right">
       <!-- ko ifnot: perms().link_sharing_on -->
-      <a href=\\"javascript:void(0);\\" data-test=\\"activate\\" data-bind=\\"click: createReadLink\\" title=\\"Share the query via a link\\">
-        <i class=\\"fa fa-wf fa-link\\"></i> Get link
+      <a href="javascript:void(0);" data-test="activate" data-bind="click: createReadLink" title="Share the query via a link">
+        <i class="fa fa-wf fa-link"></i> Get link
       </a>
       <!-- /ko -->
       <!-- ko if: perms().link_sharing_on --><!-- /ko -->

+ 8 - 8
desktop/core/src/desktop/js/ko/components/doc/__snapshots__/ko.shareDocModal.test.js.snap

@@ -1,16 +1,16 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ko.shareDocModal.js should render component 1`] = `
-"<html><head></head><body class=\\"modal-open\\"><div id=\\"shareDocModal\\" data-bind=\\"descendantsComplete: descendantsComplete, component: { name: 'share-doc-modal', params: params }\\" data-keyboard=\\"true\\" class=\\"modal hide fade in\\" tabindex=\\"-1\\" aria-hidden=\\"false\\">
-    <div class=\\"modal-header\\">
-      <button type=\\"button\\" class=\\"close\\" data-dismiss=\\"modal\\" aria-label=\\"Close\\"><span aria-hidden=\\"true\\">×</span></button>
-      <h2 class=\\"modal-title\\">Sharing - <span data-bind=\\"text: documentName\\"></span></h2>
+"<html><head></head><body class="modal-open"><div id="shareDocModal" data-bind="descendantsComplete: descendantsComplete, component: { name: 'share-doc-modal', params: params }" data-keyboard="true" class="modal hide fade in" tabindex="-1" aria-hidden="false">
+    <div class="modal-header">
+      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+      <h2 class="modal-title">Sharing - <span data-bind="text: documentName"></span></h2>
     </div>
-    <div class=\\"modal-body\\" style=\\"overflow: visible;\\">
+    <div class="modal-body" style="overflow: visible;">
       <!-- ko with: document --><!-- /ko -->
     </div>
-    <div class=\\"modal-footer\\">
-      <a href=\\"#\\" data-dismiss=\\"modal\\" class=\\"btn disable-feedback disable-enter\\">Close</a>
+    <div class="modal-footer">
+      <a href="#" data-dismiss="modal" class="btn disable-feedback disable-enter">Close</a>
     </div>
-</div><div class=\\"modal-backdrop fade in\\"></div></body></html>"
+</div><div class="modal-backdrop fade in"></div></body></html>"
 `;

+ 5 - 2
jest.config.js

@@ -7,13 +7,16 @@ module.exports = {
   },
   moduleNameMapper: {
     '\\.(css|less|scss|sass)$': 'identity-obj-proxy',
-    '^\\./desktop/core/src/desktop/js/(.*)$': '<rootDir>/desktop/core/src/desktop/js/$1'
+    '^\\./desktop/core/src/desktop/js/(.*)$': '<rootDir>/desktop/core/src/desktop/js/$1',
+    '^@vue/test-utils': '<rootDir>/node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js'
   },
   moduleDirectories: ['node_modules', 'desktop/core/src/desktop/js'],
   modulePaths: ['desktop/core/src/desktop/js'],
   testMatch: ['<rootDir>/desktop/core/src/desktop/js/**/*.test.(js|jsx|ts|tsx)'],
   testEnvironment: 'jest-environment-jsdom',
-  testURL: 'https://www.gethue.com/hue',
+  testEnvironmentOptions: {
+    url: 'https://www.gethue.com/hue'
+  },
   setupFilesAfterEnv: ['<rootDir>/desktop/core/src/desktop/js/jest/jest.init.js'],
   watchPathIgnorePatterns: ['<rootDir>/desktop/core/src/desktop/static'],
   testPathIgnorePatterns: [

Datei-Diff unterdrückt, da er zu groß ist
+ 483 - 278
package-lock.json


+ 11 - 9
package.json

@@ -92,11 +92,11 @@
     "@babel/preset-env": "7.14.4",
     "@babel/preset-react": "7.17.12",
     "@babel/preset-typescript": "7.13.0",
-    "@testing-library/jest-dom": "5.16.5",
-    "@testing-library/react": "13.3.0",
-    "@testing-library/user-event": "14.4.3",
+    "@testing-library/jest-dom": "6.4.6",
+    "@testing-library/react": "16.0.0",
+    "@testing-library/user-event": "14.5.2",
     "@types/file-saver": "2.0.2",
-    "@types/jest": "27.0.2",
+    "@types/jest": "29.5.12",
     "@types/jquery": "3.5.0",
     "@types/knockout": "3.4.67",
     "@types/lodash": "4.14.170",
@@ -109,9 +109,10 @@
     "@typescript-eslint/eslint-plugin": "4.25.0",
     "@typescript-eslint/parser": "4.25.0",
     "@vue/compiler-sfc": "3.2.0",
-    "@vue/test-utils": "2.0.0-rc.9",
-    "@vue/vue3-jest": "27.0.0-alpha.3",
-    "babel-jest": "27.3.1",
+    "@vue/server-renderer": "3.2.0",
+    "@vue/test-utils": "2.4.6",
+    "@vue/vue3-jest": "29.2.6",
+    "babel-jest": "29.7.0",
     "babel-jscs": "3.0.0-beta1",
     "babel-loader": "8.2.2",
     "babel-plugin-module-resolver": "5.0.0",
@@ -129,7 +130,8 @@
     "grunt-contrib-less": "3.0.0",
     "grunt-contrib-watch": "1.1.0",
     "identity-obj-proxy": "3.0.0",
-    "jest": "27.3.1",
+    "jest": "29.7.0",
+    "jest-environment-jsdom": "29.7.0",
     "jsdom": "16.6.0",
     "less": "4.1.1",
     "less-loader": "9.0.0",
@@ -148,7 +150,7 @@
     "stylelint-config-standard": "24.0.0",
     "stylelint-config-standard-scss": "3.0.0",
     "stylelint-scss": "4.1.0",
-    "ts-jest": "27.0.7",
+    "ts-jest": "29.1.5",
     "ts-loader": "9.2.2",
     "typescript": "4.3.2",
     "util": "0.12.4",

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.