[geary/wip/765516-gtk-widget-conversation-viewer: 8/112] Remove uneeded ConversationWebView, HTML and CSS code.



commit b1ea026ea96e5a52bfc3ffc54d5bb752bc493ca5
Author: Michael James Gratton <mike vee net>
Date:   Sat Apr 9 18:15:30 2016 +1000

    Remove uneeded ConversationWebView, HTML and CSS code.
    
    * src/client/conversation-viewer/conversation-web-view.vala
      (ConversationWebView::ConversationWebView): Don't load message.html
      since ConversationMessage now just loads the message HTML directly.
      (ConversationWebView::on_load_finished): Don't load container DIV and
      inline icons since GTK-based chrome has mostly replaced HTML chrome.
      (conversation_icon_color, container, scroll_reset, set_icon_src,
      set_attachment_src): Removed, no longer needed.
      (ConversationWebView::get_preferred_size,
      ConversationWebView::get_preferred_height): Added to ensure GTK gets
      a useful min/preferred height for the widget.
    
    * theming/message-viewer.css: Remove rules used for now-obsolete HTML
      chrome - headers, attachments, etc. Added rules to ensure HTML and BODY
      element's heights and scrollbars are appropriate for use in this
      context.
    
    * theming/message-viewer.html: Removed, no longer needed.

 .../conversation-viewer/conversation-web-view.vala |  128 +---
 theming/message-viewer.css                         |  705 +++-----------------
 theming/message-viewer.html                        |   63 --
 3 files changed, 138 insertions(+), 758 deletions(-)
---
diff --git a/src/client/conversation-viewer/conversation-web-view.vala 
b/src/client/conversation-viewer/conversation-web-view.vala
index b6c9cda..0f0ee25 100644
--- a/src/client/conversation-viewer/conversation-web-view.vala
+++ b/src/client/conversation-viewer/conversation-web-view.vala
@@ -1,4 +1,6 @@
-/* Copyright 2016 Software Freedom Conservancy Inc.
+/* 
+ * Copyright 2016 Software Freedom Conservancy Inc.
+ * Copyright 2016 Michael Gratton <mike vee net>
  *
  * This software is licensed under the GNU Lesser General Public License
  * (version 2.1 or later).  See the COPYING file in this distribution.
@@ -13,10 +15,6 @@ public class ConversationWebView : StylishWebView {
     private const string USER_CSS = "user-message.css";
     private const string STYLE_NAME = "STYLE";
     private const string PREVENT_HIDE_STYLE = "nohide";
-    private Gdk.RGBA conversation_icon_color;
-    
-    // HTML element that contains message DIVs.
-    public WebKit.DOM.HTMLDivElement? container { get; private set; default = null; }
     
     public string allow_prefix { get; private set; default = ""; }
 
@@ -44,11 +42,6 @@ public class ConversationWebView : StylishWebView {
         web_inspector.inspect_web_view.connect(activate_inspector);
         document_font_changed.connect(on_document_font_changed);
         scroll_event.connect(on_scroll_event);
-        
-        // Load the HTML into WebKit.
-        // Note: load_finished signal MUST be hooked up before this call.
-        string html_text = GearyApplication.instance.read_theme_file("message-viewer.html") ?? "";
-        load_string(html_text, "text/html", "UTF8", "");
     }
     
     public override bool query_tooltip(int x, int y, bool keyboard_tooltip, Gtk.Tooltip tooltip) {
@@ -84,12 +77,34 @@ public class ConversationWebView : StylishWebView {
     public void show_element_by_id(string element_id) throws Error {
         get_dom_document().get_element_by_id(element_id).set_attribute("style", "display:block");
     }
-    
-    // Scrolls back up to the top.
-    public void scroll_reset() {
-        get_dom_document().get_default_view().scroll(0, 0);
+
+    // Overridden to get the correct height from get_preferred_height.
+    public new void get_preferred_size(out Gtk.Requisition minimum_size,
+                                       out Gtk.Requisition natural_size) {
+        base.get_preferred_size(out minimum_size, out natural_size);
+
+        int minimum_height = 0;
+        int natural_height = 0;
+        get_preferred_height(out minimum_height, out natural_height);
+        
+        minimum_size.height = minimum_height;
+        natural_size.height = natural_height;
     }
-    
+
+    // Overridden since WebKitGTK+ 2.4.10 at least doesn't want to
+    // report a useful height. In combination with the rules from
+    // theming/message-viewer.css we can get an accurate idea of
+    // the actual height of the content from the BODY element, but
+    // only once loaded.
+    public override void get_preferred_height(out int minimum_height,
+                                              out int natural_height) {
+        int preferred_height = 0;
+        if (load_status == WebKit.LoadStatus.FINISHED) {
+            preferred_height = (int) get_dom_document().get_body().offset_height;
+        }
+        minimum_height = natural_height = preferred_height;
+    }
+
     private void on_resource_request_starting(WebKit.WebFrame web_frame,
         WebKit.WebResource web_resource, WebKit.NetworkRequest request,
         WebKit.NetworkResponse? response) {
@@ -134,21 +149,6 @@ public class ConversationWebView : StylishWebView {
         
         on_document_font_changed();
         load_user_style();
-        
-        // Grab the HTML container.
-        WebKit.DOM.Element? _container = get_dom_document().get_element_by_id("message_container");
-        assert(_container != null);
-        container = _container as WebKit.DOM.HTMLDivElement;
-        assert(container != null);
-        
-        conversation_icon_color.parse("#888888");
-        // Load the icons.
-        set_icon_src("#email_template .menu .icon", "go-down-symbolic");
-        set_icon_src("#email_template .starred .icon", "starred-symbolic");
-        set_icon_src("#email_template .unstarred .icon", "non-starred-symbolic");
-        set_icon_src("#email_template .attachment.icon", "mail-attachment-symbolic");
-        set_icon_src("#email_template .close_show_images", "close-symbolic");
-        set_icon_src("#link_warning_template .close_link_warning", "close-symbolic");
     }
     
     private void on_document_font_changed() {
@@ -224,74 +224,6 @@ public class ConversationWebView : StylishWebView {
         }
     }
     
-    private void set_icon_src(string selector, string icon_name) {
-        try {
-            // Load icon.
-            uint8[]? icon_content = null;
-            Gdk.Pixbuf? pixbuf = IconFactory.instance.load_symbolic_colored(icon_name, 16, 
-                conversation_icon_color);
-            if (pixbuf != null)
-                pixbuf.save_to_buffer(out icon_content, "png"); // Load as PNG.
-            
-            if (icon_content == null || icon_content.length == 0)
-                return;
-            
-            // Save length before transferring ownership (which frees the array)
-            int icon_length = icon_content.length;
-            Geary.Memory.ByteBuffer buffer = new Geary.Memory.ByteBuffer.take((owned) icon_content,
-                icon_length);
-            
-            // Then set the source to a data url.
-            WebKit.DOM.HTMLImageElement img = Util.DOM.select(get_dom_document(), selector)
-                as WebKit.DOM.HTMLImageElement;
-            img.set_attribute("src", Util.DOM.assemble_data_uri("image/png", buffer));
-        } catch (Error error) {
-            warning("Failed to load icon '%s': %s", icon_name, error.message);
-        }
-    }
-    
-    public void set_attachment_src(WebKit.DOM.HTMLImageElement img, Geary.Mime.ContentType content_type,
-        string filename, int maxwidth, int maxheight = -1) {
-        if( maxheight == -1 ){
-            maxheight = maxwidth;
-        }
-        
-        try {
-            // If the file is an image, use it. Otherwise get the icon for this mime_type.
-            string gio_content_type = ContentType.from_mime_type(content_type.get_mime_type());
-            
-            Gdk.Pixbuf pixbuf;
-            if (content_type.has_media_type("image")) {
-                // Get a thumbnail for the image.
-                // TODO Generate and save the thumbnail when extracting the attachments rather than
-                // when showing them in the viewer.
-                img.get_class_list().add("thumbnail");
-                pixbuf = new Gdk.Pixbuf.from_file_at_scale(filename, maxwidth, maxheight, true);
-                pixbuf = pixbuf.apply_embedded_orientation();
-            } else {
-                // Load the icon for this mime type.
-                ThemedIcon icon = ContentType.get_icon(gio_content_type) as ThemedIcon;
-                string icon_filename = IconFactory.instance.lookup_icon(icon.names[0], maxwidth)
-                    .get_filename();
-                pixbuf = new Gdk.Pixbuf.from_file_at_scale(icon_filename, maxwidth, maxheight, true);
-            }
-            
-            // convert to PNG and assemble IMG src as a data: URI
-            uint8[] content;
-            pixbuf.save_to_buffer(out content, "png");
-            
-            // Then set the source to a data url.
-            // Save length before transferring ownership (which frees the array)
-            int content_length = content.length;
-            Geary.Memory.Buffer buffer = new Geary.Memory.ByteBuffer.take((owned) content,
-                content_length);
-            
-            img.set_attribute("src", Util.DOM.assemble_data_uri("image/png", buffer));
-        } catch (Error error) {
-            warning("Failed to load image '%s': %s", filename, error.message);
-        }
-    }
-    
     private bool on_navigation_policy_decision_requested(WebKit.WebFrame frame,
         WebKit.NetworkRequest request, WebKit.WebNavigationAction navigation_action,
         WebKit.WebPolicyDecision policy_decision) {
diff --git a/theming/message-viewer.css b/theming/message-viewer.css
index 71ece10..c0aebb0 100644
--- a/theming/message-viewer.css
+++ b/theming/message-viewer.css
@@ -1,37 +1,34 @@
 /**
- * Background colors associated with received emails:
- *  recv-normal: white
- *  recv-quoted: #e8e8e8
- *  recv-collapsed: #f5f5f5
- *
- * Background colors associated with sent emails:
- *  sent-normal: white
- *  sent-quoted: #e8e8e8
- *  sent-collapsed: #f5f5f5
+ * Style that is inserted into the message after it is loaded.
+ */
+
+/*
+ * General HTML style.
  */
-@media print {
 
-    body {
-        background-color: white !important;
-    }
-    .avatar, .button, .starred {
-        display: none !important;
-    }
-    .email {
-        display: none !important;
-    }
-    .email.print {
-        display: inline-block !important;
-        background-color: white !important;
-    }
-    .email.print .body {
-        display: block !important;
-        background-color: white !important;
-    }
-    .email.print .preview {
-        display: none !important;
-    }
+html, body {
+  left: 0 !important;
+  width: 100% !important;
 
+  /* Trigger CSS 2.1 ยง 10.6.7 to get a shrink-wrapped height.
+     See also ConversationWebView.get_preferred_height */
+  position: absolute !important;
+  top: 0 !important;
+  bottom: auto !important;
+  height: auto !important;
+
+  /* Disable viewport scrollbbars */
+  overflow: hidden !important;
+}
+
+body {
+  margin: 0 !important;
+  border: 0 !important;
+  padding: 0 !important;
+  color: black;
+  background-color: white;
+  font: caption;
+  word-wrap: break-word;
 }
 
 /* By default, tables reset the font properties to "normal" */
@@ -39,14 +36,6 @@ table {
     font-size: inherit;
 }
 
-body {
-    margin: 0 !important;
-    padding: 0 !important;
-    font: caption;
-    -webkit-user-select: none;
-    -webkit-user-drag: none;
-}
-
 a {
     color: #08c;
 }
@@ -62,15 +51,6 @@ hr {
     margin-bottom: 15px;
 }
 
-.body, .header, .preview {
-    -webkit-user-select: auto;
-    -webkit-user-drag: auto;
-}
-.shower, .hider {
-    -webkit-user-select: none;
-    -webkit-user-drag: none;
-}
-
 .button {
     border: 1px transparent solid;
     border-radius: 2.5px;
@@ -93,140 +73,45 @@ hr {
     box-shadow: inset 0px 0px 1px rgba(0,0,0,0.05);
 }
 
-.email, .composer_embed {
-    border: 1px rgba(0,0,0,1) solid;
-    background-color: white;/* recv-normal */
-    color: black;
-    box-shadow: 0 3px 11px rgba(0,0,0,1);
-    display: block;
-    word-wrap: break-word;
-    width: 100%;
-    box-sizing:border-box;
-    margin-top: 16px;
-}
-
-.composer_embed {
-    height: 300px;
-}
-
-.email.sent {
-    background-color: white;/* sent-normal */
-}
-
-.email .starred {
-    display: none;
-}
-.email .unstarred {
-    display: block;
-}
-.email.starred .starred {
-    display: block;
-}
-.email.starred .unstarred {
-    display: none;
-}
-.email.read, #multiple_messages .email, .composer_embed {
-    border-color: rgba(0,0,0,0.4);
-    box-shadow: 0 3px 11px rgba(0,0,0,0.21);
-}
-.email.animate {
-    -webkit-transition: border-color 3s ease;
-    -webkit-transition: box-shadow 3s ease;
-}
-
-.email .email_warning {
-    display: none;
-    padding: 1em;
-    background-color: #fcc;
-    text-align: center;
-}
-
-.email_box {
-    box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    width: 100% !important;
-}
-.email_container {
-    overflow: hidden;
-}
-.email_container .header_container {
-    padding: 15px;
+blockquote {
+    margin: 5px 10px 5px 10px;
+    padding-left: 5px;
+    padding-right: 5px;
+    border: 0;
+    border-left: 3px #aaa solid;
 }
 
-.email_container .header_container a:hover * {
-    color: #08c;
-}
+/**
+ * Message chrome style.
+ */
 
-.email_container .header_container .button_bar {
-    float: right;
-    margin-top: -6px;
-}
-.email_container .header_container .button_bar > .button {
-    float: left;
-}
-.email_container .header_container .button_bar > .button > .icon {
-    width: 16px;
-    height: 16px;
-}
-.email_container .header_container .preview {
-    font-size: 80%;
+.signature {
     color: #777;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    overflow: hidden;
-}
-.avatar {
-    display: none;
-    image-rendering: optimizeQuality;
-}
-
-.avatar[src^=file], .avatar[src^=http] {
     display: inline;
-    width: 48px;
-    height: 48px;
-    float: left;
-    border-radius: 5px;
-}
-
-body:not(.nohide) .email.hide .header_container .avatar {
-    width: 32px;
-    height: 32px;
-    margin-right: 12px;
-    border-radius: 2.5px;
 }
 
-.email .body {
-    border-top: 1px solid #999;
-    margin: 16px;
-    margin-top: 0;
-    padding-top: 16px;
-    overflow-x: auto;
-    overflow-y: hidden;
-    position: relative;  /* in case anything inside is positioned */
-}
-
-.email .remote_images {
-    display: none;
-    margin: 0 16px;
-    border: 1px solid #999;
-    border-bottom: none;
-    padding: 1em;
-    background: #ffc;
+.signature a,
+.quote_container a {
+    color: #5fb2e7;
 }
 
-.email .remote_images .close_show_images {
-    float: right;
-    margin-top: -0.67em;
-    margin-right: -0.67em;
-}
+@media screen {
+  #part_container, .preview {
+    -webkit-user-select: auto;
+    -webkit-user-drag: auto;
+  }
+  .shower, .hider {
+    -webkit-user-select: none;
+    -webkit-user-drag: none;
+  }
 
-.email .replaced_inline_image {
-    max-width: 100%;
+  .replaced_inline_image {
     display: block;
+    max-width: 100%;
     margin-top: 1em;
-}
+  }
 
-.email .link_warning {
+  .link_warning {
     display: inline-block;
     position: absolute;
     margin-top: -1em;
@@ -237,476 +122,102 @@ body:not(.nohide) .email.hide .header_container .avatar {
     /* Reset styles */
     font: caption;
     color: black;
-}
-.email .link_warning a {
+  }
+  .link_warning a {
     color: #08c;
-}
-.email .link_warning span {
+  }
+  .link_warning span {
     display: block;
     padding-left: 1em;
-}
-.email .link_warning .close_link_warning {
+  }
+  .link_warning .close_link_warning {
     float: right;
     margin-top: -0.67em;
     margin-right: -0.67em;
-}
-
-@media screen {
-
-    body {
-        background-color: #ccc !important;
-    }
-    body:not(.nohide) .email.hide,
-    body:not(.nohide) .email .email.hide {
-        background-color: #f5f5f5;/* recv-collapsed */
-        box-shadow: 0 2px 5px rgba(0,0,0,0.12);
-    }
-    body:not(.nohide) .email.sent.hide,
-    body:not(.nohide) .email.sent .email.hide {
-        background-color: #f5f5f5;/* sent-collapsed */
-    }
-    body:not(.nohide) .email.hide .body,
-    body:not(.nohide) .email.hide > .attachment_container,
-    .email:not(.hide) .header_container .preview,
-    body.nohide .email .header_container .preview,
-    body:not(.nohide) .email.hide .email {
-        display: none;
-    }
-    .email:not(.hide) .email_warning.show,
-    body:not(.nohide) .email.hide .header_container .preview {
-        display: block;
-    }
-    body:not(.nohide) .email:not(:only-of-type) .header_container,
-    body:not(.nohide) .email .email .header_container {
-        cursor: pointer;
-    }
-    .email:not(.hide) .header .field .value,
-    body.nohide .email .header .field .value {
-        cursor: auto;
-    }
-    body:not(.nohide) .email.hide .header {
-        padding: 0;
-        text-align: right;
-    }
-    body:not(.nohide) .email.hide .header .field {
-        display: inline;
-        margin-right: 2px;
-        text-align: left;
-    }
-    body:not(.nohide) .email.hide .header .field:not(:first-child) {
-        display: inline-block;
-    }
-    body:not(.nohide) .email.hide .header .field:not(.important),
-    body:not(.nohide) .email.hide .header .field .title {
-        display: none;
-    }
-    body:not(.nohide) .email.hide .header .field .value {
-        margin-left: 0;
-    }
-    body:not(.nohide) .email.hide .header .field .not_hidden_only,
-    .email:not(.hide) .header .field .hidden_only,
-    body.nohide .email .header .field .hidden_only {
-        display: none;
-    }
-    body:not(.nohide) .email.hide .header .field a {
-        pointer-events: none;
-    }
-    .email:not(.hide) .remote_images.show,
-    body.nohide .email .remote_images.show {
-        display: block;
-    }
-    body:not(.nohide) .email.compressed {
-        margin-top: -1px;
-        height: 10px;
-    }
-    body:not(.nohide) .email.compressed + .email {
-        margin-top: -1px;
-    }
-    body:not(.nohide) .compressed .email_container {
-        overflow: hidden;
-        display: none
-    }
-    body:not(.nohide) .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + 
.compressed + .compressed + .compressed {
-        display:none;
-    }
-
-}
-
-.email .compressed_note {
-    text-align: center;
-    height: 0;
-}
-.email .compressed_note > span {
-    display: none;
-    padding: 0px 10px;
-    background-color: #f5f5f5;/* recv-collapsed */
-    position: relative;
-    cursor: hand;
-}
-.email.sent .compressed_note > span {
-    background-color: #f5f5f5;/* sent-collapsed */
-}
-body.nohide .email .compressed_note > span {
-    display: none !important;
-}
-
-.email .email {
-    box-shadow: none;
-    margin-top: 0;
-    border: none;
-    border-top: 1px rgba(0,0,0,0.4) solid;
-    background-color: white;/* recv-normal */
-}
-.email.sent .email {
-    background-color: white;/* sent-normal */
-}
-.email .email .email_container .menu,
-.email .email .email_container .starred,
-.email .email .email_container .unstarred {
-    display: none;
-}
-
-.email:not(.attachment) .attachment.icon {
-    display: none;
-}
-.email .header_container .attachment.icon {
-    float: right;
-    margin-top: 7px;
-}
-.email > .attachment_container {
-    padding-bottom: 10px;
-}
-.email > .attachment_container > .top_border {
-    border-bottom: 1px solid #aaa;
-    height: 10px;
-    margin: 0 16px 5px;
-}
-.email > .email + .attachment_container .top_border{
-    height: auto;
-    margin: 0;
-}
-.email > .attachment_container > .attachment {
-    margin: 10px 10px 0 10px;
-    padding: 2px;
-    overflow: hidden;
-    cursor: pointer;
-    border: 1px solid transparent;
-    border-radius: 4px;
-    display: inline;
-}
-
-.email > .attachment_container > .attachment:hover,
-.email > .attachment_container > .attachment:active {
-    border-color: rgba(0,0,0,0.18);
-    box-shadow: inset 0px 0px 1px rgba(255,255,255,0.8);
-}
-
-.email > .attachment_container > .attachment:active {
-    padding: 3px 1px 1px 3px;
-    border-color: rgba(0,0,0,0.20);
-    background-color: rgba(0,0,0,0.05);
-    box-shadow: inset 0px 0px 2px rgba(0,0,0,0.05);
-}
+  }
 
-.email > .attachment_container > .attachment .preview {
-    width: 52px;
-    height: 52px;
-    text-align: center;
-    vertical-align: middle;
-}
-.email > .attachment_container > .attachment .preview img {
-    max-width: 50px;
-    max-height: 50px;
-}
-.email > .attachment_container > .attachment .preview .thumbnail {
-    border: 1px solid #999;
-    box-shadow: 0 0 5px #b8b8b8;
-    background-size: 16px 16px;
-    background-position:0 0, 8px 0, 8px -8px, 0px 8px;
-}
-.email > .attachment_container > .attachment:hover .preview .thumbnail {
-    background-image:
-        -webkit-linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent),
-        -webkit-linear-gradient(-45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent),
-        -webkit-linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%),
-        -webkit-linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%);
-}
-.email > .attachment_container > .attachment .info {
-    vertical-align: middle;
-    padding-left: 5px;
-}
-.email > .attachment_container > .attachment .info > :not(.filename) {
-    color: #666;
-}
-
-.header {
-    overflow: hidden;
-}
-.header .field {
-    clear: both;
-    overflow: hidden;
-    font-size: 90%;
-}
-.header .field .title,
-.header .field .value {
-    float: left;
-    padding: 2px 0;
-}
-.header .field .title {
-    width: 5em;
-    text-align: right;
-    padding-right: 7px;
-    color: #777;
-    position: absolute;
-}
-.header .field .value {
-    color: black;
-    margin-left: 5.25em;
-    max-height: 5em;
-    overflow-y: auto;
-}
-.header .field .value a {
-    color: black;
-    text-decoration: none;
-}
-.header .field.important .address_name {
-    font-weight: bold;
-}
-.header .field .address_value {
-    color: #777;
-}
-
-.geary_spacer {
-    display: table;
-    box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    width: 100% !important;
-}
-
-.signature {
-    color: #777;
-    display: inline;
-}
-.signature a,
-.quote_container a {
-    color: #5fb2e7;
-}
-
-.quote_container {
+  .quote_container {
     position: relative;
     margin: 5px 0;
     padding: 12px;
     color: #303030;
     background-color: #e8e8e8;/* recv-quoted */
     border-radius: 4px;
-}
-.quote_container .quote {
+  }
+  .quote_container .quote {
     overflow: hidden;
     position: relative;
     z-index: 0;
-}
-body:not(.nohide) .quote_container.controllable .quote {
-    max-height: 80px;
-}
-body:not(.nohide) .quote_container.controllable.show .quote {
+  }
+  .quote_container.controllable .quote {
+    max-height: 6em;
+  }
+  .quote_container.controllable.show .quote {
     max-height: none;
-}
+  }
 
-.email.sent .quote_container {
+  .sent .quote_container {
     background-color: #e8e8e8;/* sent-quoted */
-}
+  }
 
-.quote_container > .shower,
-.quote_container > .hider {
+  .quote_container > .shower,
+  .quote_container > .hider {
     position: absolute;
     z-index: 1;
     bottom: -7px;
     left: 0;
     right: 0;
     display: none;
-}
-.quote_container > .shower > input,
-.quote_container > .hider > input {
+  }
+
+  .quote_container > .shower > input,
+  .quote_container > .hider > input {
     width: 100%;
     height: 15px;
     padding: 0;
     font-size: 7px;  /* Absolute size in pixels for graphics */
     color: #888;
-}
-.quote_container > .shower:hover > input,
-.quote_container > .hider:hover > input {
+  }
+  .quote_container > .shower:hover > input,
+  .quote_container > .hider:hover > input {
     color: #000;
-}
-body:not(.nohide) .quote_container.controllable {
+  }
+
+  .quote_container.controllable {
     margin-bottom: 7px;
     padding-bottom: 0;
-}
-body:not(.nohide) .quote_container.controllable.show {
+  }
+  .quote_container.controllable.show {
     padding-bottom: 12px;
-}
-body:not(.nohide) .quote_container.controllable > .shower {
+  }
+  .quote_container.controllable > .shower {
     display: block;
-}
-body:not(.nohide) .quote_container.controllable.show > .shower {
+  }
+  .quote_container.controllable.show > .shower {
     display: none;
-}
-body:not(.nohide) .quote_container.controllable.show > .hider {
+  }
+  .quote_container.controllable.show > .hider {
     display: block;
-}
+  }
 
-#message_container {
-    position: absolute;
-    left: 0;
-    right: 0;
-    padding: 0 15px 15px;
-    box-sizing: border-box;
-    min-height: 100%;
-}
-#multiple_messages {
-    display: none;
-    text-align: center;
-}
-#multiple_messages > .email {
-    margin: 100px auto;
-    display: inline-block;
-    width: auto;
-    padding: 15px;
-}
-#email_template,
-#attachment_template,
-#link_warning_template {
-    display: none;
-}
-
-blockquote {
-    margin: 5px 10px 5px 10px;
-    padding-left: 5px;
-    padding-right: 5px;
-    border: 0;
-    border-left: 3px #aaa solid;
-}
-
-.search_coloring *::selection {
+  .search_coloring *::selection {
     background-color: #00ddff;
+  }
 }
 
-.draft_edit {
-    display: none;
-    margin: 16px;
-    text-align: right;
-}
-
-.draft_edit_button {
-    background-color: #e8e8e8;
-}
-
-#spinner {
-    display: none;
-    margin: 100px auto;
-    width: 128px;
-}
-
-/*
-Spinner code from CSSload.net
-License: http://cssload.net/en/terms_of_use
-*/
-
-#spinner #floatingCirclesG {
-    position:relative;
-    width:128px;
-    height:128px;
-    -webkit-transform:scale(0.6);
-    transform:scale(0.6);
-}
-
-#spinner .f_circleG {
-    position:absolute;
-    background-color:#FFFFFF;
-    height:23px;
-    width:23px;
-    -webkit-border-radius:12px;
-    -webkit-animation-name:f_fadeG;
-    -webkit-animation-duration:1.04s;
-    -webkit-animation-iteration-count:infinite;
-    -webkit-animation-direction:linear;
-    border-radius:12px;
-    animation-name:f_fadeG;
-    animation-duration:1.04s;
-    animation-iteration-count:infinite;
-    animation-direction:linear;
-}
-
-#spinner #frotateG_01 {
-    left:0;
-    top:52px;
-    -webkit-animation-delay:0.39s;
-    animation-delay:0.39s;
-}
-
-#spinner #frotateG_02 {
-    left:15px;
-    top:15px;
-    -webkit-animation-delay:0.52s;
-    animation-delay:0.52s;
-}
-
-#spinner #frotateG_03 {
-    left:52px;
-    top:0;
-    -webkit-animation-delay:0.65s;
-    animation-delay:0.65s;
-}
-
-#spinner #frotateG_04 {
-    right:15px;
-    top:15px;
-    -webkit-animation-delay:0.78s;
-    animation-delay:0.78s;
-}
-
-#spinner #frotateG_05 {
-    right:0;
-    top:52px;
-    -webkit-animation-delay:0.91s;
-    animation-delay:0.91s;
-}
-
-#spinner #frotateG_06 {
-    right:15px;
-    bottom:15px;
-    -webkit-animation-delay:1.04s;
-    animation-delay:1.04s;
-}
-
-#spinner #frotateG_07 {
-    left:52px;
-    bottom:0;
-    -moz-animation-delay:1.17s;
-    -webkit-animation-delay:1.17s;
-    -ms-animation-delay:1.17s;
-    -o-animation-delay:1.17s;
-    animation-delay:1.17s;
-}
-
-#spinner #frotateG_08 {
-    left:15px;
-    bottom:15px;
-    -moz-animation-delay:1.3s;
-    -webkit-animation-delay:1.3s;
-    -ms-animation-delay:1.3s;
-    -o-animation-delay:1.3s;
-    animation-delay:1.3s;
-}
+@media print {
+  body {
+    background-color: white !important;
+  }
 
-@-webkit-keyframes f_fadeG {
-    0% {
-        background-color:#000000
-    }
-    
-    100% {
-    background-color:#FFFFFF
-    }
+  #part_container {
+    display: none !important;
+  }
+  #print_container {
+    display: inline-block !important;
+    background-color: white !important;
+  }
+  #print_container .preview {
+    display: none !important;
+  }
 }
-
-/* /Spinner */
-


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]