瀏覽代碼

HUE-6808 [frontend] Remove _blank targets

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

+ 5 - 1
apps/about/src/about/templates/admin_wizard.mako

@@ -161,7 +161,11 @@ ${ layout.menubar(section='quick_start') }
           <div id="step3" class="stepDetails hide">
             <div>
               <h3>${ _('Create or import users') }</h3>
-              <a href="${ url('useradmin.views.list_users') }" target="_blank"><i class="fa fa-user"></i> ${ _('User Admin') }</a>
+              <a href="${ url('useradmin.views.list_users') }"
+                 % if not is_embeddable:
+                 target="_blank"
+                 % endif
+              ><i class="fa fa-user"></i> ${ _('User Admin') }</a>
             </div>
 
             <div class="margin-top-30">

+ 2 - 2
apps/jobbrowser/src/jobbrowser/models.py

@@ -580,7 +580,7 @@ class LinkJobLogs(object):
   @classmethod
   def _replace_hdfs_link(self, match):
     try:
-      return '<a href="%s" target="_blank">%s</a>' % (location_to_url(match.group(0), strict=False), match.group(0))
+      return '<a href="%s">%s</a>' % (location_to_url(match.group(0), strict=False), match.group(0))
     except:
       LOG.exception('failed to replace hdfs links: %s' % (match.groups(),))
       return match.group(0)
@@ -588,7 +588,7 @@ class LinkJobLogs(object):
   @classmethod
   def _replace_mr_link(self, match):
     try:
-      return '<a href="%s" target="_blank">%s</a>' % (reverse('jobbrowser.views.single_job', kwargs={'job': match.group(0)}), match.group(0))
+      return '<a href="%s">%s</a>' % (reverse('jobbrowser.views.single_job', kwargs={'job': match.group(0)}), match.group(0))
     except:
       LOG.exception('failed to replace mr links: %s' % (match.groups(),))
       return match.group(0)

+ 15 - 15
apps/jobbrowser/src/jobbrowser/tests.py

@@ -808,64 +808,64 @@ def test_make_log_links():
 
   # FileBrowser
   assert_equal(
-      """<a href="/filebrowser/view=/user/romain/tmp" target="_blank">hdfs://localhost:8020/user/romain/tmp</a>  &lt;dir&gt;""",
+      """<a href="/filebrowser/view=/user/romain/tmp">hdfs://localhost:8020/user/romain/tmp</a>  &lt;dir&gt;""",
       LinkJobLogs._make_links('hdfs://localhost:8020/user/romain/tmp  <dir>')
   )
   assert_equal(
-      """<a href="/filebrowser/view=/user/romain/tmp" target="_blank">hdfs://localhost:8020/user/romain/tmp</a>&lt;dir&gt;""",
+      """<a href="/filebrowser/view=/user/romain/tmp">hdfs://localhost:8020/user/romain/tmp</a>&lt;dir&gt;""",
       LinkJobLogs._make_links('hdfs://localhost:8020/user/romain/tmp<dir>')
   )
   assert_equal(
-      """output: <a href="/filebrowser/view=/user/romain/tmp" target="_blank">/user/romain/tmp</a>  &lt;dir&gt;""",
+      """output: <a href="/filebrowser/view=/user/romain/tmp">/user/romain/tmp</a>  &lt;dir&gt;""",
       LinkJobLogs._make_links('output: /user/romain/tmp  <dir>')
   )
   assert_equal(
-      'Successfully read 3760 records (112648 bytes) from: &quot;<a href="/filebrowser/view=/user/hue/pig/examples/data/midsummer.txt" target="_blank">/user/hue/pig/examples/data/midsummer.txt</a>&quot;',
+      'Successfully read 3760 records (112648 bytes) from: &quot;<a href="/filebrowser/view=/user/hue/pig/examples/data/midsummer.txt">/user/hue/pig/examples/data/midsummer.txt</a>&quot;',
       LinkJobLogs._make_links('Successfully read 3760 records (112648 bytes) from: "/user/hue/pig/examples/data/midsummer.txt"')
   )
   assert_equal(
-      'data,upper_case  MAP_ONLY  <a href="/filebrowser/view=/user/romain/out/fffff" target="_blank">hdfs://localhost:8020/user/romain/out/fffff</a>,',
+      'data,upper_case  MAP_ONLY  <a href="/filebrowser/view=/user/romain/out/fffff">hdfs://localhost:8020/user/romain/out/fffff</a>,',
       LinkJobLogs._make_links('data,upper_case  MAP_ONLY  hdfs://localhost:8020/user/romain/out/fffff,')
   )
   assert_equal(
-      'MAP_ONLY  <a href="/filebrowser/view=/user/romain/out/fffff" target="_blank">hdfs://localhost:8020/user/romain/out/fffff</a>\n2013',
+      'MAP_ONLY  <a href="/filebrowser/view=/user/romain/out/fffff">hdfs://localhost:8020/user/romain/out/fffff</a>\n2013',
       LinkJobLogs._make_links('MAP_ONLY  hdfs://localhost:8020/user/romain/out/fffff\n2013')
   )
   assert_equal(
-      ' <a href="/filebrowser/view=/jobs.tsv" target="_blank">/jobs.tsv</a> ',
+      ' <a href="/filebrowser/view=/jobs.tsv">/jobs.tsv</a> ',
       LinkJobLogs._make_links(' /jobs.tsv ')
   )
   assert_equal(
-      '<a href="/filebrowser/view=/user/romain/job_pos_2012.tsv" target="_blank">hdfs://localhost:8020/user/romain/job_pos_2012.tsv</a>',
+      '<a href="/filebrowser/view=/user/romain/job_pos_2012.tsv">hdfs://localhost:8020/user/romain/job_pos_2012.tsv</a>',
       LinkJobLogs._make_links('hdfs://localhost:8020/user/romain/job_pos_2012.tsv')
   )
 
   # JobBrowser
   assert_equal(
-      """<a href="/jobbrowser/jobs/job_201306261521_0058" target="_blank">job_201306261521_0058</a>""",
+      """<a href="/jobbrowser/jobs/job_201306261521_0058">job_201306261521_0058</a>""",
       LinkJobLogs._make_links('job_201306261521_0058')
   )
   assert_equal(
-      """Hadoop Job IDs executed by Pig: <a href="/jobbrowser/jobs/job_201306261521_0058" target="_blank">job_201306261521_0058</a>""",
+      """Hadoop Job IDs executed by Pig: <a href="/jobbrowser/jobs/job_201306261521_0058">job_201306261521_0058</a>""",
       LinkJobLogs._make_links('Hadoop Job IDs executed by Pig: job_201306261521_0058')
   )
   assert_equal(
-      """MapReduceLauncher  - HadoopJobId: <a href="/jobbrowser/jobs/job_201306261521_0058" target="_blank">job_201306261521_0058</a>""",
+      """MapReduceLauncher  - HadoopJobId: <a href="/jobbrowser/jobs/job_201306261521_0058">job_201306261521_0058</a>""",
       LinkJobLogs._make_links('MapReduceLauncher  - HadoopJobId: job_201306261521_0058')
   )
   assert_equal(
-      """- More information at: http://localhost:50030/jobdetails.jsp?jobid=<a href="/jobbrowser/jobs/job_201306261521_0058" target="_blank">job_201306261521_0058</a>""",
+      """- More information at: http://localhost:50030/jobdetails.jsp?jobid=<a href="/jobbrowser/jobs/job_201306261521_0058">job_201306261521_0058</a>""",
       LinkJobLogs._make_links('- More information at: http://localhost:50030/jobdetails.jsp?jobid=job_201306261521_0058')
   )
   assert_equal(
-      """ Logging error messages to: <a href="/jobbrowser/jobs/job_201307091553_0028" target="_blank">job_201307091553_0028</a>/attempt_201307091553_002""",
+      """ Logging error messages to: <a href="/jobbrowser/jobs/job_201307091553_0028">job_201307091553_0028</a>/attempt_201307091553_002""",
       LinkJobLogs._make_links(' Logging error messages to: job_201307091553_0028/attempt_201307091553_002')
   )
   assert_equal(
-      """ pig-<a href="/jobbrowser/jobs/job_201307091553_0028" target="_blank">job_201307091553_0028</a>.log""",
+      """ pig-<a href="/jobbrowser/jobs/job_201307091553_0028">job_201307091553_0028</a>.log""",
       LinkJobLogs._make_links(' pig-job_201307091553_0028.log')
   )
   assert_equal(
-      """MapReduceLauncher  - HadoopJobId: <a href="/jobbrowser/jobs/job_201306261521_0058" target="_blank">job_201306261521_0058</a>. Look at the UI""",
+      """MapReduceLauncher  - HadoopJobId: <a href="/jobbrowser/jobs/job_201306261521_0058">job_201306261521_0058</a>. Look at the UI""",
       LinkJobLogs._make_links('MapReduceLauncher  - HadoopJobId: job_201306261521_0058. Look at the UI')
   )

+ 3 - 3
apps/metastore/src/metastore/templates/metastore.mako

@@ -956,7 +956,7 @@ ${ components.menubar(is_embeddable) }
           <div class="acl-block acl-block-airy">
             <span class="muted" title="3 months ago">TABLE</span>
             <span>
-              <a class="muted" target="_blank" style="margin-left: 4px" title="Open in Sentry" href="/security/hive"><i class="fa fa-external-link"></i></a>
+              <a class="muted" style="margin-left: 4px" title="Open in Sentry" href="/security/hive"><i class="fa fa-external-link"></i></a>
             </span>
             <br>
             server=<span>server1</span>
@@ -975,7 +975,7 @@ ${ components.menubar(is_embeddable) }
           <div class="acl-block acl-block-airy">
             <span class="muted" title="3 months ago">TABLE</span>
             <span>
-              <a class="muted" target="_blank" style="margin-left: 4px" title="Open in Sentry" href="/security/hive"><i class="fa fa-external-link"></i></a>
+              <a class="muted" style="margin-left: 4px" title="Open in Sentry" href="/security/hive"><i class="fa fa-external-link"></i></a>
             </span>
             <br>
             server=server1
@@ -1008,7 +1008,7 @@ ${ components.menubar(is_embeddable) }
             <span class="muted" title="3 months ago">TABLE</span>
 
             <span>
-              <a class="muted" target="_blank" style="margin-left: 4px" title="Open in Sentry" href="/security/hive"><i class="fa fa-external-link"></i></a>
+              <a class="muted" style="margin-left: 4px" title="Open in Sentry" href="/security/hive"><i class="fa fa-external-link"></i></a>
             </span>
             <br>
 

+ 2 - 2
apps/oozie/src/oozie/templates/editor2/bundle_editor.mako

@@ -106,7 +106,7 @@ ${ layout.menubar(section='bundles', is_editor=True, pullright=buttons, is_embed
         <div class="card card-home" style="margin-bottom: 20px; padding-bottom: 10px">
           <h1 class="card-heading simple">
             <a class="pointer" data-bind="click: function() { showChooseCoordinator(this); }, text: $root.getCoordinatorById(coordinator()).name"></a>
-            <a data-bind="hueLink: '${ url('oozie:edit_coordinator') }?coordinator=' + $root.getCoordinatorById(coordinator()).id()" target="_blank" title="${ _('Open') }">
+            <a data-bind="hueLink: '${ url('oozie:edit_coordinator') }?coordinator=' + $root.getCoordinatorById(coordinator()).id()" title="${ _('Open') }">
               <i class="fa fa-external-link-square"></i>
             </a>
             <a class="pointer pull-right" data-bind="click: function() { $root.bundle.coordinators.remove(this); }, visible: $root.isEditing">
@@ -164,7 +164,7 @@ ${ layout.menubar(section='bundles', is_editor=True, pullright=buttons, is_embed
         <li style="${ not is_embeddable and 'line-height: 30px' or ''}">
           <span data-bind="click: selectCoordinator" class="badge badge-info"><span data-bind="text: name(), attr: {'title': uuid()}"></span>
           </span>
-          <a data-bind="hueLink: '${ url('oozie:edit_coordinator') }?uuid=' + uuid()" target="_blank" title="${ _('Open') }">
+          <a data-bind="hueLink: '${ url('oozie:edit_coordinator') }?uuid=' + uuid()" title="${ _('Open') }">
             <i class="fa fa-external-link-square"></i>
           </a>
         </li>

+ 4 - 4
apps/oozie/src/oozie/templates/editor2/common_scheduler.inc.mako

@@ -43,13 +43,13 @@ from django.utils.translation import ugettext as _
             <!-- ko if: isEditing -->
             <a class="pointer" data-bind="click: showChooseWorkflow, text: getWorkflowById(coordinator.properties.workflow()).name"></a>
 
-            <a data-bind="hueLink: '${ url('oozie:edit_workflow') }?workflow=' + coordinator.properties.workflow()" target="_blank" title="${ _('Open') }">
+            <a data-bind="hueLink: '${ url('oozie:edit_workflow') }?workflow=' + coordinator.properties.workflow()" title="${ _('Open') }">
              <i class="fa fa-external-link-square"></i>
             </a>
             <!-- /ko -->
             <!-- ko ifnot: isEditing -->
             <span data-bind="text: getWorkflowById(coordinator.properties.workflow()).name"></span>
-            <a data-bind="hueLink: '${ url('oozie:edit_workflow') }?workflow=' + coordinator.properties.workflow()" target="_blank" title="${ _('Open') }">
+            <a data-bind="hueLink: '${ url('oozie:edit_workflow') }?workflow=' + coordinator.properties.workflow()" title="${ _('Open') }">
               <i class="fa fa-external-link-square"></i>
             </a>
             <!-- /ko -->
@@ -263,7 +263,7 @@ from django.utils.translation import ugettext as _
                   </span>
                   <span data-bind="visible: dataset_variable().length > 0 && instance_choice() != 'range'">
                     ${ _('Will convert to') }
-                    <a target="_blank" data-bind="text: convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice(), $root), attr: {'href': '/filebrowser/view=' + convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice(), $root)}"></a>
+                    <a data-bind="text: convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice(), $root), hueLink: '/filebrowser/view=' + convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice(), $root)"></a>
                   </span>
                   </a>
                 </span>
@@ -408,7 +408,7 @@ from django.utils.translation import ugettext as _
           <span class="badge badge-info" data-bind="click: selectWorkflow">
             <span data-bind="text: name(), attr: {'title': uuid()}"></span>
           </span>
-          <a data-bind="hueLink: '${ url('oozie:edit_workflow') }?workflow=' + uuid()" target="_blank" title="${ _('Open') }">
+          <a data-bind="hueLink: '${ url('oozie:edit_workflow') }?workflow=' + uuid()" title="${ _('Open') }">
             <i class="fa fa-external-link-square"></i>
           </a>
         </li>

+ 7 - 7
apps/oozie/src/oozie/templates/editor2/common_workflow.mako

@@ -621,13 +621,13 @@
 <script type="text/html" id="common-fs-link">
  <!-- ko if: $data.path.length > 0 -->
    <!-- ko if: with_label -->
-     <a data-bind="hueLink: '/filebrowser/view=' + ($data.path[0] != '/' && $data.path.indexOf('s3a://') !== 0 ? $root.workflow.properties.deployment_dir() + '/' : '') + $data.path, attr: { title: '${ _ko('Open') } '+ $data.path }" target="_blank">
+     <a data-bind="hueLink: '/filebrowser/view=' + ($data.path[0] != '/' && $data.path.indexOf('s3a://') !== 0 ? $root.workflow.properties.deployment_dir() + '/' : '') + $data.path, attr: { title: '${ _ko('Open') } '+ $data.path }">
       <span data-bind="text: $data.path.lastIndexOf('/') == $data.path.length - 1 ? $data.path : $data.path.split('/').pop()"></span>
      </a>
    <!-- /ko -->
 
    <!-- ko if: ! with_label -->
-     <a data-bind="hueLink: '/filebrowser/view=' + ($data.path[0] != '/' && $data.path.indexOf('s3a://') !== 0 ? $root.workflow.properties.deployment_dir() + '/' : '') + $data.path" target="_blank" title="${ _('Open') }">
+     <a data-bind="hueLink: '/filebrowser/view=' + ($data.path[0] != '/' && $data.path.indexOf('s3a://') !== 0 ? $root.workflow.properties.deployment_dir() + '/' : '') + $data.path" title="${ _('Open') }">
        <i class="fa fa-external-link-square"></i>
      </a>
    <!-- /ko -->
@@ -641,7 +641,7 @@
         <i class="fa fa-spinner fa-spin muted"></i>
       <!-- /ko -->
       <!-- ko with: associatedDocument -->
-        <a data-bind="hueLink: absoluteUrl" target="_blank"><span data-bind='text: name'></span></a>
+        <a data-bind="hueLink: absoluteUrl"><span data-bind='text: name'></span></a>
         <br/>
         <span data-bind='text: description' class="muted"></span>
       <!-- /ko -->
@@ -653,7 +653,7 @@
           <select placeholder="${ _('Search your documents...') }" data-bind="documentChooser: { loading: associatedDocumentLoading, value: associatedDocumentUuid, document: associatedDocument, type: type }"></select>
         </div>
         <!-- ko if: associatedDocument -->
-          <a href="#" data-bind="hueLink: associatedDocument().absoluteUrl" target="_blank" title="${ _('Open') }">
+          <a class="pointer" data-bind="hueLink: associatedDocument().absoluteUrl" title="${ _('Open') }">
             <i class="fa fa-external-link-square"></i>
           </a>
           <div class="clearfix"></div>
@@ -670,7 +670,7 @@
 
 <script type="text/html" id="param-fs-link">
   <!-- ko if: path.split('=', 2)[1] && path.split('=', 2)[1].charAt(0) == '/' -->
-    <a data-bind="hueLink: '/filebrowser/view=' + $data.path.split('=', 2)[1]" target="_blank" title="${ _('Open') }">
+    <a data-bind="hueLink: '/filebrowser/view=' + $data.path.split('=', 2)[1]" title="${ _('Open') }">
       <i class="fa fa-external-link-square"></i>
     </a>
   <!-- /ko -->
@@ -1562,7 +1562,7 @@
       <div data-bind="visible: ! $parent.ooziePropertiesExpanded()" class="nowrap">
         <select data-bind="valueAllowUnset: true, options: $root.subworkflows, optionsText: 'name', optionsValue: 'value', value: properties.workflow"></select>
         <span data-bind="visible: properties.workflow().length > 0">
-          <a href="#" data-bind="hueLink: '${ url('oozie:edit_workflow') }' + '?workflow=' + properties.workflow()" target="_blank" title="${ _('Open') }">
+          <a class="pointer" data-bind="hueLink: '${ url('oozie:edit_workflow') }' + '?workflow=' + properties.workflow()" title="${ _('Open') }">
             <i class="fa fa-external-link-square"></i>
           </a>
         </span>
@@ -1593,7 +1593,7 @@
       <span data-bind="template: { name: 'logs-icon' }"></span>
       <!-- ko if: $root.getSubWorkflow(properties.workflow()) -->
         <span data-bind="with: $root.getSubWorkflow(properties.workflow())">
-          <a href="#" data-bind="hueLink: '${ url('oozie:edit_workflow') }' + '?workflow=' + $data.value()" target="_blank" title="${ _('Open') }">
+          <a class="pointer" data-bind="hueLink: '${ url('oozie:edit_workflow') }' + '?workflow=' + $data.value()" title="${ _('Open') }">
             <span data-bind="text: $data.name"></span>
           </a>
         </span>

+ 2 - 2
apps/oozie/src/oozie/templates/editor2/submit_job_popup.mako

@@ -88,9 +88,9 @@
           % endif
           />
         % if email_id:
-          ${_('Send completion email to ')}<a href="/useradmin/users/edit/${user.username}#step2" target="_blank"> ${email_id} </a>
+          ${_('Send completion email to ')}<a href="/useradmin/users/edit/${user.username}#step2"> ${email_id} </a>
         % else:
-          ${_('Email not set in ')}<a href="/useradmin/users/edit/${user.username}#step2" target="_blank"> ${_('profile.')} </a>
+          ${_('Email not set in ')}<a href="/useradmin/users/edit/${user.username}#step2"> ${_('profile.')} </a>
         % endif
         </label>
         %endif       

+ 2 - 2
apps/oozie/src/oozie/templates/editor2/workflow_editor.mako

@@ -457,7 +457,7 @@ ${ workflow.render() }
               <select placeholder="${ _('Search your documents...') }" data-bind="documentChooser: { value: value, document: $root.tempDocument, type: type }"></select>
             </div>
             <!-- ko if: $root.tempDocument -->
-              <a href="#" data-bind="hueLink: $root.tempDocument().absoluteUrl" target="_blank" title="${ _('Open') }">
+              <a class="pointer" data-bind="hueLink: $root.tempDocument().absoluteUrl" title="${ _('Open') }">
                 <i class="fa fa-external-link-square"></i>
               </a>
             <!-- /ko -->
@@ -482,7 +482,7 @@ ${ workflow.render() }
 
           <!-- ko if: name() == 'workflow' && $root.getSubWorkflow(value())-->
           <span data-bind="with: $root.getSubWorkflow(value())">
-            <a href="#" data-bind="hueLink: '${is_embeddable and '/hue' or ''}${ url('oozie:edit_workflow') }' + '?workflow=' + $data.value()" target="_blank" title="${ _('Open') }">
+            <a href="#" data-bind="hueLink: '${ url('oozie:edit_workflow') }' + '?workflow=' + $data.value()" title="${ _('Open') }">
               <i class="fa fa-external-link-square"></i>
             </a>
           </span>

+ 2 - 2
apps/security/src/security/templates/hdfs.mako

@@ -149,7 +149,7 @@ ${ layout.menubar(section='hdfs', is_embeddable=is_embeddable) }
 
                   <div class="acl-panel-content">
                     <span class="fake-pre" data-bind="visible: $root.assist.showAclsAsText">
-                      # file: <a class="force-word-break" data-bind="attr: { href: '/filebrowser/view=' + $root.assist.path() }, text: $root.assist.path()" target="_blank"></a><br/>
+                      # file: <a class="force-word-break" data-bind="hueLink: '/filebrowser/view=' + $root.assist.path(), text: $root.assist.path()"></a><br/>
                       # owner: <span data-bind="text: $root.assist.owner"></span><br/>
                       # group: <span data-bind="text: $root.assist.group"></span><br/>
                       <div data-bind="foreach: $root.assist.regularAcls">
@@ -246,7 +246,7 @@ ${ layout.menubar(section='hdfs', is_embeddable=is_embeddable) }
         <h4>${ _('ACLs to apply') }</h4>
 
         <span class="fake-pre modal-panel">
-          # file: <a class="force-word-break" data-bind="attr: { href: '/filebrowser/view=' + $root.assist.path() }, text: $root.assist.path()" target="_blank"></a><br/>
+          # file: <a class="force-word-break" data-bind="hueLink: '/filebrowser/view=' + $root.assist.path(), text: $root.assist.path()"></a><br/>
           # owner: <span data-bind="text: $root.assist.owner"></span><br/>
           # group: <span data-bind="text: $root.assist.group"></span><br/>
           <div data-bind="foreach: $root.assist.regularAcls">

+ 3 - 3
apps/security/src/security/templates/hive.mako

@@ -99,7 +99,7 @@ ${ layout.menubar(section='hive1', is_embeddable=is_embeddable) }
       <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" target="_blank" style="margin-left: 4px" title="${ _('Open in Table Browser') }"><i class="fa fa-external-link"></i></a>
+      <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/>
 
@@ -118,7 +118,7 @@ ${ layout.menubar(section='hive1', is_embeddable=is_embeddable) }
     <!-- /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]" target="_blank"><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>
@@ -169,7 +169,7 @@ ${ layout.menubar(section='hive1', is_embeddable=is_embeddable) }
               <div class="path-container">
                 <div class="input-append span12">
                   <input id="path" class="path" type="text" autocomplete="off" />
-                  <a data-bind="hueLink: $root.assist.metastorePath()" target="_blank" title="${ _('Open in Table Browser') }" class="btn btn-inverse">
+                  <a data-bind="hueLink: $root.assist.metastorePath()" title="${ _('Open in Table Browser') }" class="btn btn-inverse">
                     <i class="fa fa-external-link"></i>
                   </a>
                 </div>

+ 5 - 5
apps/security/src/security/templates/sentry.mako

@@ -110,7 +110,7 @@ ${ layout.menubar(section=component, is_embeddable=is_embeddable) }
 
     <span class="muted" data-bind="text: privilegeType, attr: {title: moment(timestamp()).fromNow()}"></span>
     <!-- ko if: $root.component() == 'solr' && authorizables().length > 0 && authorizables()[0].type() == 'COLLECTION'  && authorizables()[0].name_() != '*' -->
-      <a data-bind="attr: { href: indexerPath() }" target="_blank" title="${ _('Open in Indexer') }" class="muted">
+      <a data-bind="hueLink: indexerPath()" title="${ _('Open in Indexer') }" class="muted">
         <i class="fa fa-external-link"></i>
       </a>
     <!-- /ko -->
@@ -121,7 +121,7 @@ ${ layout.menubar(section=component, is_embeddable=is_embeddable) }
 
     <!-- ko if: $root.component() == 'hive' -->
       <span data-bind="visible: metastorePath() != '' && privilegeType() == 'DATABASE'">
-        <a data-bind="attr: { href: metastorePath() }" class="muted" target="_blank" style="margin-left: 4px" title="${ _('Open in Metastore') }"><i class="fa fa-external-link"></i></a>
+        <a data-bind="hueLink: metastorePath()" class="muted" style="margin-left: 4px" title="${ _('Open in Metastore') }"><i class="fa fa-external-link"></i></a>
       </span>
       <br/>
 
@@ -141,7 +141,7 @@ ${ layout.menubar(section=component, is_embeddable=is_embeddable) }
       <!-- /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="attr: { href: '/filebrowser/view=/' + URI().split('/')[3] }" target="_blank"><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 -->
 
     <!-- /ko -->
@@ -216,12 +216,12 @@ ${ layout.menubar(section=component, is_embeddable=is_embeddable) }
                 <div class="input-append span12">
                   <input id="path" class="path" type="text" autocomplete="off" />
                   <!-- ko if: $root.component() == 'solr' -->
-                  <a data-bind="attr: { href: $root.assist.indexerPath() }" target="_blank" title="${ _('Open in Indexer') }" class="btn btn-inverse">
+                  <a data-bind="hueLink: $root.assist.indexerPath()" title="${ _('Open in Indexer') }" class="btn btn-inverse">
                     <i class="fa fa-external-link"></i>
                   </a>
                   <!-- /ko -->
                   <!-- ko ifnot: $root.component() == 'solr' -->
-                  <a data-bind="attr: { href: $root.assist.metastorePath() }" target="_blank" title="${ _('Open in Metastore Browser') }" class="btn btn-inverse">
+                  <a data-bind="hueLink: $root.assist.metastorePath()" title="${ _('Open in Metastore Browser') }" class="btn btn-inverse">
                     <i class="fa fa-external-link"></i>
                   </a>
                   <!-- /ko -->

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

@@ -267,9 +267,9 @@ from desktop.views import _ko
             <span data-bind="text: $data.name"></span>
             <!-- ko if: $data.dependents.length > 0 -->
               (${_('used by')}
-              <a class="pointer" data-bind="hueLink: $data.dependents[0].absoluteUrl, text: $data.dependents[0].name" target="_blank" ></a>
+              <a class="pointer" data-bind="hueLink: $data.dependents[0].absoluteUrl, text: $data.dependents[0].name"></a>
               <!-- ko if: $data.dependents.length > 1 -->
-              ${_('and')} <a class="pointer" data-bind="hueLink: $data.dependents[1].absoluteUrl, text: $data.dependents[1].name" target="_blank" ></a>
+              ${_('and')} <a class="pointer" data-bind="hueLink: $data.dependents[1].absoluteUrl, text: $data.dependents[1].name"></a>
                 <!-- ko if: $data.dependents.length > 2 -->
                   ${_('and')} <span data-bind="text: $data.dependents.length - 2"></span> ${_('other')}
                 <!-- /ko -->

+ 1 - 1
desktop/core/src/desktop/templates/hue.mako

@@ -141,7 +141,7 @@ ${ hueIcons.symbols() }
               </a>
             <!-- /ko -->
             <!-- ko if: item.href -->
-              <a data-bind="attr: { href: item.href }, text: item.displayName" target="_blank"></a>
+              <a data-bind="hueLink: item.href, text: item.displayName"></a>
             <!-- /ko -->
             <!-- ko if: item.isCategory -->
             <ul class="dropdown-menu" data-bind="foreach: { data: item.children, as: 'item' }">

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -507,7 +507,7 @@ ${ assist.assistPanel() }
               <!-- ko if: outputFormat() != 'index' -->
               <i class="fa fa-warning" style="color: #c09853"></i> ${ _('Already existing') } <span data-bind="text: outputFormat"></span>
               <!-- /ko -->
-              <a href="javascript:void(0)" data-bind="hueLink: existingTargetUrl(), text: name" target="_blank" title="${ _('Open') }"></a>
+              <a href="javascript:void(0)" data-bind="hueLink: existingTargetUrl(), text: name" title="${ _('Open') }"></a>
             </span>
           </div>
         </div>

+ 4 - 4
desktop/libs/indexer/src/indexer/templates/indexer.mako

@@ -263,7 +263,7 @@ ${ assist.assistPanel() }
               <span class="help-inline muted" data-bind="visible: createWizard.isNameAvailable()">${ _('A new collection will be created') }</span>
               <span class="help-inline muted" data-bind="visible: !createWizard.isNameAvailable() && createWizard.fileFormat().name().length > 0">
               ${ _('Adding data to this existing collection') }
-              <a href="javascript:void(0)" data-bind="attr: {href: '${ url("indexer:collections") }' +'#edit/' + createWizard.fileFormat().name() }, text: createWizard.fileFormat().name" target="_blank"></a>
+              <a href="javascript:void(0)" data-bind="hueLink: '${ url("indexer:collections") }' +'#edit/' + createWizard.fileFormat().name(), text: createWizard.fileFormat().name"></a>
               </span>
             </label>
           </div>
@@ -356,14 +356,14 @@ ${ assist.assistPanel() }
       <!-- /ko -->
 
       <span data-bind="visible: createWizard.editorId">
-        <a href="javascript:void(0)" class="btn btn-success" data-bind="attr: {href: '/oozie/list_oozie_workflow/' + createWizard.jobId() }" target="_blank" title="${ _('Open') }">
+        <a href="javascript:void(0)" class="btn btn-success" data-bind="hueLink: '/oozie/list_oozie_workflow/' + createWizard.jobId()" title="${ _('Open') }">
           ${_('Oozie Status')}
          </a>
-        <a href="javascript:void(0)" class="btn btn-success" data-bind="attr: {href: '${ url('notebook:editor') }?editor=' + createWizard.editorId() }" target="_blank" title="${ _('Open') }">
+        <a href="javascript:void(0)" class="btn btn-success" data-bind="hueLink: '${ url('notebook:editor') }?editor=' + createWizard.editorId()" title="${ _('Open') }">
           ${_('View indexing status')}
         </a>
 
-        ${ _('View collection') } <a href="javascript:void(0)" data-bind="attr: {href: '${ url("indexer:collections") }' +'#edit/' + createWizard.fileFormat().name() }, text: createWizard.fileFormat().name" target="_blank"></a>
+        ${ _('View collection') } <a href="javascript:void(0)" data-bind="hueLink: '${ url("indexer:collections") }' +'#edit/' + createWizard.fileFormat().name(), text: createWizard.fileFormat().name"></a>
       </span>
 
       <div id="notebook"></div>

+ 3 - 3
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -608,7 +608,7 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_
   <div class="snippet-log-container margin-bottom-10" data-bind="visible: showLogs() && status() != 'ready' && status() != 'loading'" style="display: none;">
     <div data-bind="delayedOverflow, css: resultsKlass" style="margin-top: 5px; position: relative;">
       <ul data-bind="visible: jobs().length > 0, foreach: jobs" class="unstyled jobs-overlay">
-        <li data-bind="attr: {'id': $data.name.substr(4)}"><a data-bind="text: $.trim($data.name), hueLink: $data.url" target="_blank"></a>
+        <li data-bind="attr: {'id': $data.name.substr(4)}"><a data-bind="text: $.trim($data.name), hueLink: $data.url"></a>
           <!-- ko if: typeof percentJob !== 'undefined' && percentJob() > -1 -->
           <div class="progress-job progress pull-left" style="background-color: #FFF; width: 100%" data-bind="css: {'progress-warning': percentJob() < 100, 'progress-success': percentJob() === 100}">
             <div class="bar" data-bind="style: {'width': percentJob() + '%'}"></div>
@@ -1085,7 +1085,7 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_
           <input type="text" class="pull-left input-xxlarge filechooser-input" data-bind="value: statementPath, valueUpdate: 'afterkeydown', filechooser: statementPath, filechooserOptions: { skipInitialPathIfEmpty: true, linkMarkup: true }" placeholder="${ _('Path to file, e.g. /user/hue/sample.sql') }"/>
           <!-- ko if: statementPath() -->
           <div class="inline-block" style="margin-top: 4px">
-            <a data-bind="hueLink: '/filebrowser/view=' + statementPath()" target="_blank" title="${ _('Open in new tab') }">
+            <a data-bind="hueLink: '/filebrowser/view=' + statementPath()" title="${ _('Open') }">
               <i class="fa fa-external-link-square"></i>
             </a>
           </div>
@@ -1107,7 +1107,7 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_
           </div>
           <!-- ko if: associatedDocument() -->
             <div class="pull-left" style="margin-top: 4px">
-              <a data-bind="hueLink: associatedDocument().absoluteUrl" target="_blank" title="${ _('Open in new tab') }">
+              <a data-bind="hueLink: associatedDocument().absoluteUrl" title="${ _('Open') }">
                 <i class="fa fa-external-link-square"></i>
               </a>
               <span data-bind='text: associatedDocument().description' style="padding: 3px; margin-top: 2px" class="muted"></span>