瀏覽代碼

HUE-6575 [home] Convert all links to use the hueLink binding

Enrico Berti 8 年之前
父節點
當前提交
f4e0d75bb8

+ 0 - 18
desktop/core/src/desktop/static/desktop/js/document/hueFileEntry.js

@@ -602,24 +602,6 @@ var HueFileEntry = (function () {
     }
     }
   };
   };
 
 
-  HueFileEntry.prototype.openExternalLink = function (entry, event) {
-    event.preventDefault();
-    var $target = $(event.target);
-    if (!$target.is('a')) {
-      $target = $target.closest('a');
-    }
-    location.href = $target.attr('href');
-  };
-
-  HueFileEntry.prototype.openHue4Link = function (entry, event) {
-    event.preventDefault();
-    var $target = $(event.target);
-    if (!$target.is('a')) {
-      $target = $target.closest('a');
-    }
-    huePubSub.publish('open.link', $target.attr('href'));
-  };
-
   HueFileEntry.prototype.showRestoreConfirmation = function () {
   HueFileEntry.prototype.showRestoreConfirmation = function () {
     var self = this;
     var self = this;
     if (self.selectedEntries().length > 0 && (self.superuser || !self.sharedWithMeSelected())) {
     if (self.selectedEntries().length > 0 && (self.superuser || !self.sharedWithMeSelected())) {

+ 15 - 14
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -81,20 +81,22 @@
 
 
   ko.bindingHandlers.hueLink = {
   ko.bindingHandlers.hueLink = {
     init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
     init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
-      if (IS_HUE_4) {
-        ko.bindingHandlers.click.init(element, function() {
-          return function (data, event) {
-            var url = ko.unwrap(valueAccessor());
-            if ($(element).attr('target')) {
-              window.open('/hue' + (url.indexOf('/') === 0 ? url : '/' + url), $(element).attr('target'));
-            } else if (event.ctrlKey || event.metaKey || event.which === 2) {
-              window.open('/hue' + (url.indexOf('/') === 0 ? url : '/' + url), '_blank');
-            } else {
-              huePubSub.publish('open.link', url);
-            }
+      ko.bindingHandlers.click.init(element, function () {
+        return function (data, event) {
+          var url = ko.unwrap(valueAccessor());
+          var prefix = '';
+          if (IS_HUE_4) {
+            prefix = '/hue' + (url.indexOf('/') === 0 ? '' : '/');
+          }
+          if ($(element).attr('target')) {
+            window.open(prefix + url, $(element).attr('target'));
+          } else if (event.ctrlKey || event.metaKey || event.which === 2) {
+            window.open(prefix + url, '_blank');
+          } else {
+            huePubSub.publish('open.link', url);
           }
           }
-        }, allBindings, viewModel, bindingContext);
-      }
+        }
+      }, allBindings, viewModel, bindingContext);
 
 
       ko.bindingHandlers.hueLink.update(element, valueAccessor);
       ko.bindingHandlers.hueLink.update(element, valueAccessor);
     },
     },
@@ -110,7 +112,6 @@
         $(element).attr('href', 'javascript: void(0);');
         $(element).attr('href', 'javascript: void(0);');
       }
       }
     }
     }
-
   };
   };
 
 
   ko.bindingHandlers.clickToCopy = {
   ko.bindingHandlers.clickToCopy = {

+ 9 - 9
desktop/core/src/desktop/templates/document_browser.mako

@@ -333,7 +333,7 @@ from desktop.views import _ko
                     % if is_embeddable:
                     % if is_embeddable:
                       data-bind="click: function() { huePubSub.publish('open.editor.new.query', {type: 'hive', 'directoryUuid': getDirectory()}); }" href="javascript:void(0);"
                       data-bind="click: function() { huePubSub.publish('open.editor.new.query', {type: 'hive', 'directoryUuid': getDirectory()}); }" href="javascript:void(0);"
                     % else:
                     % else:
-                      data-bind="attr: { href: addDirectoryParamToUrl('${ url('notebook:editor') }?type=hive') }, click: openExternalLink"
+                      data-bind="hueLink: addDirectoryParamToUrl('${ url('notebook:editor') }?type=hive')"
                     % endif
                     % endif
                     >
                     >
                       <img src="${ static(apps['beeswax'].icon_path) }" class="app-icon" alt="${ _('Hive icon') }"/> ${_('Hive Query')}
                       <img src="${ static(apps['beeswax'].icon_path) }" class="app-icon" alt="${ _('Hive icon') }"/> ${_('Hive Query')}
@@ -346,7 +346,7 @@ from desktop.views import _ko
                     % if is_embeddable:
                     % if is_embeddable:
                       data-bind="click: function() { huePubSub.publish('open.editor.new.query', {type: 'impala', 'directoryUuid': getDirectory()}); }" href="javascript:void(0);"
                       data-bind="click: function() { huePubSub.publish('open.editor.new.query', {type: 'impala', 'directoryUuid': getDirectory()}); }" href="javascript:void(0);"
                     % else:
                     % else:
-                      data-bind="attr: { href: addDirectoryParamToUrl('${ url('notebook:editor') }?type=impala') }, click: openExternalLink"
+                      data-bind="hueLink: addDirectoryParamToUrl('${ url('notebook:editor') }?type=impala')"
                     % endif
                     % endif
                     >
                     >
                       <img src="${ static(apps['impala'].icon_path) }" class="app-icon" alt="${ _('Impala icon') }"/> ${_('Impala Query')}
                       <img src="${ static(apps['impala'].icon_path) }" class="app-icon" alt="${ _('Impala icon') }"/> ${_('Impala Query')}
@@ -358,38 +358,38 @@ from desktop.views import _ko
                 %>
                 %>
                 % if SHOW_NOTEBOOKS.get():
                 % if SHOW_NOTEBOOKS.get():
                   <li>
                   <li>
-                    <a title="${_('Notebook')}" data-bind="attr: { href: addDirectoryParamToUrl('${ url('notebook:index') }') }, click: ${ is_embeddable and 'openHue4Link' or 'openExternalLink' }">
+                    <a title="${_('Notebook')}" data-bind="hueLink: addDirectoryParamToUrl('${ url('notebook:index') }')">
                       <i style="font-size: 24px; line-height: 24px; vertical-align: middle; color: #0B7FAD;" class="fa app-icon fa-fw fa-file-text-o"></i> ${_('Notebook')}
                       <i style="font-size: 24px; line-height: 24px; vertical-align: middle; color: #0B7FAD;" class="fa app-icon fa-fw fa-file-text-o"></i> ${_('Notebook')}
                     </a>
                     </a>
                   </li>
                   </li>
                 % endif
                 % endif
                 % if 'pig' in apps:
                 % if 'pig' in apps:
                   <li>
                   <li>
-                    <a title="${_('Pig Script')}" data-bind="attr: { href: addDirectoryParamToUrl('${ url('pig:index') }') }, click: ${ is_embeddable and 'openHue4Link' or 'openExternalLink' }">
+                    <a title="${_('Pig Script')}" data-bind="hueLink: addDirectoryParamToUrl('${ url('pig:index') }')">
                       <img src="${ static(apps['pig'].icon_path) }" class="app-icon" alt="${ _('Pig icon') }"/> ${_('Pig Script')}
                       <img src="${ static(apps['pig'].icon_path) }" class="app-icon" alt="${ _('Pig icon') }"/> ${_('Pig Script')}
                     </a>
                     </a>
                   </li>
                   </li>
                 % endif
                 % endif
                 % if 'oozie' in apps:
                 % if 'oozie' in apps:
                   <li>
                   <li>
-                    <a title="${_('Oozie Workflow')}" data-bind="attr: { href: addDirectoryParamToUrl('${ url('oozie:new_workflow') }') }, click: ${ is_embeddable and 'openHue4Link' or 'openExternalLink' }">
+                    <a title="${_('Oozie Workflow')}" data-bind="hueLink: addDirectoryParamToUrl('${ url('oozie:new_workflow') }')">
                       <img src="${ static('oozie/art/icon_oozie_workflow_48.png') }" class="app-icon" alt="${ _('Oozie workflow icon') }"/> ${_('Workflow') if is_embeddable else _('Oozie Workflow')}
                       <img src="${ static('oozie/art/icon_oozie_workflow_48.png') }" class="app-icon" alt="${ _('Oozie workflow icon') }"/> ${_('Workflow') if is_embeddable else _('Oozie Workflow')}
                     </a>
                     </a>
                   </li>
                   </li>
                   <li>
                   <li>
-                    <a title="${_('Oozie Coordinator')}" data-bind="attr: { href: addDirectoryParamToUrl('${ url('oozie:new_coordinator') }') }, click: ${ is_embeddable and 'openHue4Link' or 'openExternalLink' }">
+                    <a title="${_('Oozie Coordinator')}" data-bind="hueLink: addDirectoryParamToUrl('${ url('oozie:new_coordinator') }')">
                       <img src="${ static('oozie/art/icon_oozie_coordinator_48.png') }" class="app-icon" alt="${ _('Oozie coordinator icon') }"/> ${_('Coordinator') if is_embeddable else _('Oozie Coordinator')}
                       <img src="${ static('oozie/art/icon_oozie_coordinator_48.png') }" class="app-icon" alt="${ _('Oozie coordinator icon') }"/> ${_('Coordinator') if is_embeddable else _('Oozie Coordinator')}
                     </a>
                     </a>
                   </li>
                   </li>
                   <li>
                   <li>
-                    <a title="${_('Oozie Bundle')}" data-bind="attr: { href: addDirectoryParamToUrl('${ url('oozie:new_bundle') }') }, click: ${ is_embeddable and 'openHue4Link' or 'openExternalLink' }">
+                    <a title="${_('Oozie Bundle')}" data-bind="hueLink: addDirectoryParamToUrl('${ url('oozie:new_bundle') }')">
                       <img src="${ static('oozie/art/icon_oozie_bundle_48.png') }" class="app-icon" alt="${ _('Oozie bundle icon') }"/> ${_('Bundle') if is_embeddable else _('Oozie Bundle')}
                       <img src="${ static('oozie/art/icon_oozie_bundle_48.png') }" class="app-icon" alt="${ _('Oozie bundle icon') }"/> ${_('Bundle') if is_embeddable else _('Oozie Bundle')}
                     </a>
                     </a>
                   </li>
                   </li>
                 % endif
                 % endif
                 % if 'search' in apps:
                 % if 'search' in apps:
                   <li>
                   <li>
-                    <a title="${_('Solr Search')}" data-bind="attr: { href: addDirectoryParamToUrl('${ url('search:new_search') }') }, click: ${ is_embeddable and 'openHue4Link' or 'openExternalLink' }">
+                    <a title="${_('Solr Search')}" data-bind="hueLink: addDirectoryParamToUrl('${ url('search:new_search') }')">
                       <img src="${ static('search/art/icon_search_48.png') }" class="app-icon" alt="${ _('Search icon') }"/> ${_('Dashboard')}
                       <img src="${ static('search/art/icon_search_48.png') }" class="app-icon" alt="${ _('Search icon') }"/> ${_('Dashboard')}
                     </a>
                     </a>
                   </li>
                   </li>
@@ -484,7 +484,7 @@ from desktop.views import _ko
               </ul>
               </ul>
               <div class="doc-browser-primary-col">
               <div class="doc-browser-primary-col">
                 <!-- ko template: { name: 'document-icon-template', data: { document: $data, showShareAddon: true } } --><!-- /ko -->
                 <!-- ko template: { name: 'document-icon-template', data: { document: $data, showShareAddon: true } } --><!-- /ko -->
-                <a href="javascript: void(0);" data-bind="text: definition().name, click: open, attr: { 'title': definition().name, 'href': definition().type === 'directory' ? '#' : definition().absoluteUrl }" class="margin-left-5"></a>
+                <a href="javascript: void(0);" data-bind="text: definition().name, hueLink: definition().type === 'directory' ? '#' : definition().absoluteUrl, attr: { 'title': definition().name }" class="margin-left-5"></a>
               </div>
               </div>
               <div class="doc-browser-attr-group">
               <div class="doc-browser-attr-group">
                 <!-- ko with: definition -->
                 <!-- ko with: definition -->