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.
This commit is contained in:
Michael James Gratton 2016-04-09 18:15:30 +10:00
parent b29d83e546
commit 103619c596
4 changed files with 141 additions and 760 deletions

View file

@ -461,8 +461,9 @@ public class ConversationViewer : Gtk.Stack {
ordered_matches.sort((a, b) => a.length - b.length);
if (!cancellable.is_cancelled()) {
foreach(string match in ordered_matches)
foreach(string match in ordered_matches) {
//web_view.mark_text_matches(match, false, 0);
}
//web_view.set_highlight_text_matches(true);
}

View file

@ -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 = ""; }
@ -54,11 +52,6 @@ public class ConversationWebView : StylishWebView {
GearyApplication.instance.config.bind(Configuration.CONVERSATION_VIEWER_ZOOM_KEY, this, "zoom_level_wrap");
notify["zoom-level"].connect(() => { zoom_level_wrap = zoom_level; });
// 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) {
@ -94,12 +87,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) {
@ -144,21 +159,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() {
@ -234,74 +234,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) {

View file

@ -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.
*/
@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;
}
/*
* General HTML style.
*/
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;
blockquote {
margin: 5px 10px 5px 10px;
padding-left: 5px;
padding-right: 5px;
border: 0;
border-left: 3px #aaa solid;
}
.composer_embed {
height: 300px;
}
/**
* Message chrome style.
*/
.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;
}
.email_container .header_container a:hover * {
color: #08c;
}
.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;
.signature a,
.quote_container a {
color: #5fb2e7;
}
.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 */
}
@media screen {
#part_container, .preview {
-webkit-user-select: auto;
-webkit-user-drag: auto;
}
.shower, .hider {
-webkit-user-select: none;
-webkit-user-drag: none;
}
.email .remote_images {
display: none;
margin: 0 16px;
border: 1px solid #999;
border-bottom: none;
padding: 1em;
background: #ffc;
}
.email .remote_images .close_show_images {
float: right;
margin-top: -0.67em;
margin-right: -0.67em;
}
.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;
@media print {
body {
background-color: white !important;
}
#part_container {
display: none !important;
}
#print_container {
display: inline-block !important;
background-color: white !important;
}
#print_container .preview {
display: none !important;
}
}
.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;
}
@-webkit-keyframes f_fadeG {
0% {
background-color:#000000
}
100% {
background-color:#FFFFFF
}
}
/* /Spinner */

View file

@ -1,63 +0,0 @@
<html>
<head>
<title>Geary</title>
<style id="default_fonts"></style>
<style id="blacklist_ids"></style>
</head>
<body>
<div id="message_container"><span id="placeholder"></span></div>
<div id="multiple_messages"><div id="selection_counter" class="email"></div></div>
<div id="email_template" class="email">
<div class="compressed_note"><span><span></div>
<div class="geary_spacer"></div>
<div class="email_container">
<div class="email_warning"></div>
<div class="header_container">
<img src="" class="avatar" />
<div class="button_bar">
<div class="starred button"><img src="" class="icon" /></div>
<div class="unstarred button"><img src="" class="icon" /></div>
<div class="menu button"><img src="" class="icon" /></div>
</div>
<img src="" class="attachment icon" />
<div class="header"></div>
<div class="preview"></div>
</div>
<div class="remote_images"><img class="close_show_images button" /></div>
<div class="body" dir="auto"></div>
<div class="draft_edit"><span class="draft_edit_button button"></span></div>
</div>
</div>
<div id="attachment_template" class="attachment_container">
<div class="top_border"></div>
<table class="attachment"><tr>
<td class="preview"><img src="" /></td>
<td class="info">
<div class="filename"></div>
<div class="filesize"></div>
</td>
</tr></table>
</div>
<div id="link_warning_template" class="link_warning">
<img class="close_link_warning button" />
</div>
<div id="spinner">
<!--
Spinner code from CSSLoad.net
License: http://cssload.net/en/terms_of_use
-->
<div id="floatingCirclesG">
<div class="f_circleG" id="frotateG_01"></div>
<div class="f_circleG" id="frotateG_02"></div>
<div class="f_circleG" id="frotateG_03"></div>
<div class="f_circleG" id="frotateG_04"></div>
<div class="f_circleG" id="frotateG_05"></div>
<div class="f_circleG" id="frotateG_06"></div>
<div class="f_circleG" id="frotateG_07"></div>
<div class="f_circleG" id="frotateG_08"></div>
</div>
</div>
</body>
</html>