Browse Source

HUE-6215 [core] Make error and popup error embeddable

Enrico Berti 8 years ago
parent
commit
adc21be6ce

+ 1 - 0
desktop/core/src/desktop/lib/exceptions_renderable.py

@@ -54,6 +54,7 @@ class PopupException(Exception):
 
   def response(self, request):
     data = dict(title=force_unicode(self.title), message=force_unicode(self.message), detail=force_unicode(self.detail) if self.detail else None, traceback=self.traceback)
+    data['is_embeddable'] = request.GET.get('is_embeddable', False)
     if not request.ajax:
       data['request'] = request
     response = desktop.lib.django_util.render("popup_error.mako", request, data)

+ 8 - 3
desktop/core/src/desktop/middleware.py

@@ -100,8 +100,10 @@ class ExceptionMiddleware(object):
         response.status_code = getattr(exception, 'error_code', 500)
         return response
       else:
-        response = render("error.mako", request,
-                      dict(error=exception.response_data.get("message")))
+        response = render("error.mako", request, {
+          'error': exception.response_data.get("message"),
+          'is_embeddable': request.GET.get('is_embeddable', False),
+        })
         response.status_code = getattr(exception, 'error_code', 500)
         return response
 
@@ -647,7 +649,10 @@ class EnsureSafeRedirectURLMiddleware(object):
       if is_safe_url(location, request.get_host()):
         return response
 
-      response = render("error.mako", request, dict(error=_('Redirect to %s is not allowed.') % response['Location']))
+      response = render("error.mako", request, {
+        'error': _('Redirect to %s is not allowed.') % response['Location'],
+        'is_embeddable': request.GET.get('is_embeddable', False),
+      })
       response.status_code = 403
       return response
     else:

+ 4 - 0
desktop/core/src/desktop/templates/error.mako

@@ -20,7 +20,9 @@ from django.utils.translation import ugettext as _
 from desktop import conf
 %>
 
+%if not is_embeddable:
 ${ commonheader(_('Error'), app_name, user, request, "40px") | n,unicode }
+%endif
 
   <div class="container-fluid">
     <div class="row-fluid">
@@ -49,4 +51,6 @@ ${ commonheader(_('Error'), app_name, user, request, "40px") | n,unicode }
     </div>
   </div>
 
+%if not is_embeddable:
 ${ commonfooter(request, messages) | n,unicode }
+%endif

+ 61 - 62
desktop/core/src/desktop/templates/popup_error.mako

@@ -20,77 +20,76 @@ from desktop.lib.i18n import smart_unicode
 from django.utils.translation import ugettext as _
 %>
 
+%if not is_embeddable:
 ${ commonheader(title, "", user, request, "40px") | n,unicode }
+%endif
 
-  <div class="container-fluid">
-    <div class="row-fluid">
-      <div class="span12">
-        <div class="card card-small">
-          <h1 class="card-heading simple">${ _('Error!') }</h1>
-          <div class="card-body">
-            <p>
-
-              <div class="alert">
-      <p><strong>${ smart_unicode(message) }</strong></p>
-
-      % if detail:
-        <p>${ smart_unicode(detail) }</p>
-      % endif
-
-    </div>
+<div class="container-fluid">
+  <div class="row-fluid">
+    <div class="span12">
+      <div class="card card-small">
+        <h1 class="card-heading simple">${ _('Error!') }</h1>
+        <div class="card-body">
+          <div class="alert">
+            <strong>${ smart_unicode(message) }</strong>
+            % if detail:
+              <p>${ smart_unicode(detail) }</p>
+            % endif
+          </div>
 
-    <div class="details">
-      % if traceback:
-        <a href="javascript:toggleDisplay('#traceback');"><i class="fa fa-share"></i> ${_('More Info')}</a>
-        &nbsp;
-        % if user.is_superuser:
-        <a href="/logs" target="_new">${_('View Logs')}</a>
-        % endif
-        <br />
-        <br />
-        <div id="traceback" class="hide">
-          <table class="table table-striped" style="background: white; border: 1px solid #DDDDDD;">
-            <thead>
-              <tr>
-                <td>${_("File Name")}</td>
-                <td>${_("Line Number")}</td>
-              <td>${_("Function Name")}</td>
-              </tr>
-            </thead>
-            <tbody>
-              % for (file_name, line_number, function_name, text) in traceback:
-                <tr>
-                  <td>${smart_unicode(file_name) or ""}</td>
-                  <td>${smart_unicode(line_number) or ""}</td>
-                  <td>${smart_unicode(function_name) or ""}</td>
-                </tr>
-              % endfor
-            </tbody>
-          </table>
-        </div>
-      % else:
-        % if user.is_superuser:
-        <a href="/logs" target="_new">${_('View Logs')}</a>
-        % endif
-        <br />
-        <br />
-      % endif
-    </div>
+          <div class="details">
+            % if traceback:
+              <a href="javascript:toggleDisplay('#traceback');"><i class="fa fa-share"></i> ${_('More Info')}</a>
+              &nbsp;
+              % if user.is_superuser:
+              <a href="/logs" target="_new">${_('View Logs')}</a>
+              % endif
+              <br />
+              <br />
+              <div id="traceback" class="hide">
+                <table class="table table-striped" style="background: white; border: 1px solid #DDDDDD;">
+                  <thead>
+                    <tr>
+                      <td>${_("File Name")}</td>
+                      <td>${_("Line Number")}</td>
+                    <td>${_("Function Name")}</td>
+                    </tr>
+                  </thead>
+                  <tbody>
+                    % for (file_name, line_number, function_name, text) in traceback:
+                      <tr>
+                        <td>${smart_unicode(file_name) or ""}</td>
+                        <td>${smart_unicode(line_number) or ""}</td>
+                        <td>${smart_unicode(function_name) or ""}</td>
+                      </tr>
+                    % endfor
+                  </tbody>
+                </table>
+              </div>
+            % else:
+              % if user.is_superuser:
+              <a href="/logs" target="_new">${_('View Logs')}</a>
+              % endif
+              <br />
+              <br />
+            % endif
+          </div>
 
-              <div class="alert-actions">
-      <a class="btn small" href="javascript:window.history.back(-1)">${_('Go back')}</a>
-    </div>
-            </p>
+          <div class="alert-actions">
+            <a class="btn small" href="javascript:window.history.back(-1)">${_('Go back')}</a>
           </div>
         </div>
       </div>
     </div>
   </div>
+</div>
 
-  <script type="text/javascript">
-    function toggleDisplay(selector) {
-      $(selector).slideToggle(500);
-    }
-  </script>
+<script type="text/javascript">
+  function toggleDisplay(selector) {
+    $(selector).slideToggle(500);
+  }
+</script>
 
+%if not is_embeddable:
 ${ commonfooter(None, messages) | n,unicode }
+%endif