add a simple appearing preview for unexpanded cdm and normal mode

This commit is contained in:
Andrew Dolgov 2013-03-25 16:08:20 +04:00
parent 4cdb81737a
commit d2f3467bb6
6 changed files with 98 additions and 4 deletions

20
cdm.css
View file

@ -174,3 +174,23 @@ div.cdm.expanded div.cdmHeader a.title, div.cdm.active div.cdmHeader a.title {
font-size : 13px;
}
div#small_article_preview {
width : 300px;
max-height : 350px;
overflow : hidden;
border : 1px solid #c0c0c0;
background : white;
position : absolute;
box-shadow : 2px 2px 4px #c0c0c0;
z-index : 2;
}
div#small_article_preview div.content {
padding : 5px;
font-size : 12px;
color : gray;
}
div#small_article_preview div.content img {
max-width : 290px;
}

View file

@ -413,7 +413,7 @@ class Feeds extends Handler_Protected {
}
}
$mouseover_attrs = "onmouseover='postMouseIn($id)'
$mouseover_attrs = "onmouseover='postMouseIn(event, $id)'
onmouseout='postMouseOut($id)'";
$reply['content'] .= "<div class='$class' id='RROW-$id' $label_row_style $mouseover_attrs>";
@ -512,7 +512,7 @@ class Feeds extends Handler_Protected {
}
}
$mouseover_attrs = "onmouseover='postMouseIn($id)'
$mouseover_attrs = "onmouseover='postMouseIn(event, $id)'
onmouseout='postMouseOut($id)'";
$expanded_class = $expand_cdm ? "expanded" : "";
@ -537,7 +537,6 @@ class Feeds extends Handler_Protected {
onclick=\"return cdmClicked(event, $id);\"
class=\"titleWrap$hlc_suffix\">
<a class=\"title\"
title=\"".htmlspecialchars($line['title'])."\"
target=\"_blank\" href=\"".
htmlspecialchars($line["link"])."\">".
$line["title"] .

View file

@ -843,5 +843,32 @@ class RPC extends Handler_Protected {
}
}
function cdmArticlePreview() {
$id = db_escape_string($this->link, $_REQUEST['id']);
$result = db_query($this->link, "SELECT link,
ttrss_entries.title, content, feed_url
FROM
ttrss_entries, ttrss_user_entries
LEFT JOIN ttrss_feeds ON (ttrss_user_entries.feed_id = ttrss_feeds.id)
WHERE ref_id = '$id' AND ref_id = ttrss_entries.id AND
ttrss_user_entries.owner_uid = ". $_SESSION["uid"]);
if (db_num_rows($result) != 0) {
$link = db_fetch_result($result, 0, "link");
$title = db_fetch_result($result, 0, "title");
$feed_url = db_fetch_result($result, 0, "feed_url");
$content = sanitize($this->link,
db_fetch_result($result, 0, "content"), false, false, $feed_url);
print "<div class='content'>".$content."</content>";
} else {
print "Article not found.";
}
}
}
?>

View file

@ -123,6 +123,8 @@
</div>
</div>
<div style="display : none" onclick="Element.hide(this)" id="small_article_preview"></div>
<div id="header">
<img id="net-alert" style="display : none"
title="<?php echo __("Communication problem with server.") ?>"

View file

@ -13,6 +13,8 @@ var catchup_timeout_id = false;
var cids_requested = [];
var loaded_article_ids = [];
var _post_preview_timeout = false;
var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null;
function headlines_callback2(transport, offset, background, infscroll_req) {
@ -1166,12 +1168,54 @@ function getActiveArticleId() {
return _active_article_id;
}
function postMouseIn(id) {
function postMouseIn(e, id) {
post_under_pointer = id;
if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout);
if (!getInitParam("cdm_expanded")) {
_post_preview_timeout = window.setTimeout(function() {
displaySmallArticlePreview(e, id);
}, 1000);
}
}
function displaySmallArticlePreview(e, id) {
try {
var query = "?op=rpc&method=cdmarticlepreview&id=" + id;
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
cexc = $("CEXC-" + id);
preview = $("small_article_preview");
row = $("RROW-" + id);
if (id != getActiveArticleId() && (!isCdmMode() || (cexc && Element.visible(cexc))) && row && preview) {
preview.innerHTML = transport.responseText;
new Effect.Appear(preview, {duration:0.2});
preview.setStyle({
left: (e.clientX + 20) + 'px',
top: (Element.cumulativeOffset(row)[1] + row.offsetHeight + 10) + 'px' });
}
} });
} catch (e) {
exception_error("displaySmallArticlePreview", e);
}
}
function postMouseOut(id) {
post_under_pointer = false;
if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout);
if (Element.visible("small_article_preview"))
Element.hide("small_article_preview");
}
function unpackVisibleHeadlines() {

View file

@ -1220,3 +1220,5 @@ body#ttrssZoom div.footer {
margin-top : 1em;
text-align : center;
}