add tweet button to digest, misc digest fixes; rework article tweeting to use ajax loading of needed info

This commit is contained in:
Andrew Dolgov 2010-11-25 12:58:29 +03:00
parent 411fe209d6
commit ba7e88e5a5
7 changed files with 96 additions and 48 deletions

View file

@ -526,6 +526,10 @@
$print_exec_time = false; $print_exec_time = false;
break; // digestSend break; // digestSend
case "loading":
print __("Loading, please wait...") . " " .
"<img src='images/indicator_tiny.gif'>";
case "getProfiles": case "getProfiles":
$login = db_escape_string($_REQUEST["login"]); $login = db_escape_string($_REQUEST["login"]);
$password = db_escape_string($_REQUEST["password"]); $password = db_escape_string($_REQUEST["password"]);
@ -553,6 +557,7 @@
} // Select action according to $op value. } // Select action according to $op value.
// We close the connection to database. // We close the connection to database.
db_close($link); db_close($link);
?> ?>

View file

@ -1,7 +1,7 @@
body { body#ttrssDigest {
background : #f0f0f0; background : #f0f0f0;
color : black; color : black;
font-family : sans-serif; font-family : "Lucida Grande", Arial, sans-serif;
font-size : 12px; font-size : 12px;
} }
@ -298,3 +298,13 @@ a:hover {
#overlay img { #overlay img {
vertical-align : middle; vertical-align : middle;
} }
div.fatalError button {
margin-top : 5px;
}
div.fatalError textarea {
width : 100%;
height : 100px;
}

View file

@ -429,6 +429,7 @@ function add_headline_entry(article, feed, no_effects) {
"<div class='digest-check'>" + "<div class='digest-check'>" +
mark_part + mark_part +
publ_part + publ_part +
"<img title='" + __("Share on Twitter") + "' onclick=\"tweet_article("+article.id+", true)\" src='images/art-tweet.png'>" +
"<img title='" + __("Mark as read") + "' onclick=\"view("+article.id+", true)\" src='images/digest_checkbox.png'>" + "<img title='" + __("Mark as read") + "' onclick=\"view("+article.id+", true)\" src='images/digest_checkbox.png'>" +
"</div>" + "</div>" +
"<a target=\"_blank\" href=\""+article.link+"\""+ "<a target=\"_blank\" href=\""+article.link+"\""+
@ -497,7 +498,7 @@ function parse_feeds(transport) {
var feeds = transport.responseXML.getElementsByTagName('feeds')[0]; var feeds = transport.responseXML.getElementsByTagName('feeds')[0];
if (feeds) { if (feeds) {
feeds = eval("(" + feeds.firstChild.nodeValue + ")"); feeds = JSON.parse(feeds.firstChild.nodeValue);
feeds.sort( function (a,b) feeds.sort( function (a,b)
{ {
@ -546,7 +547,7 @@ function parse_headlines(transport, replace, no_effects) {
var headlines_title = transport.responseXML.getElementsByTagName('headlines-title')[0]; var headlines_title = transport.responseXML.getElementsByTagName('headlines-title')[0];
if (headlines && headlines_title) { if (headlines && headlines_title) {
headlines = eval("(" + headlines.firstChild.nodeValue + ")"); headlines = JSON.parse(headlines.firstChild.nodeValue);
var title = headlines_title.firstChild.nodeValue; var title = headlines_title.firstChild.nodeValue;
@ -578,13 +579,13 @@ function parse_headlines(transport, replace, no_effects) {
if (ids.length > 0) { if (ids.length > 0) {
if (pr) { if (pr) {
$('headlines-content').appendChild(pr); $('headlines-content').appendChild(pr);
if (!no_effects) new Effect.ScrollTo(inserted); if (!no_effects && inserted) new Effect.ScrollTo(inserted);
} else { } else {
$('headlines-content').innerHTML += "<li id='H-MORE-PROMPT'>" + $('headlines-content').innerHTML += "<li id='H-MORE-PROMPT'>" +
"<div class='body'>" + "<div class='body'>" +
"<a href=\"javascript:catchup_visible_articles()\">" + "<a href=\"#\" onclick=\"catchup_visible_articles()\">" +
__("Mark as read") + "</a> | " + __("Mark as read") + "</a> | " +
"<a href=\"javascript:load_more()\">" + "<a href=\"#\" onclick=\"load_more()\">" +
__("Load more...") + "</a>" + __("Load more...") + "</a>" +
"<img style=\"display : none\" "+ "<img style=\"display : none\" "+
"id=\"H-LOADING-IMG\" src='images/indicator_tiny.gif'>" + "id=\"H-LOADING-IMG\" src='images/indicator_tiny.gif'>" +
@ -622,6 +623,7 @@ function init_second_stage() {
function init() { function init() {
try { try {
dojo.require("dijit.Dialog");
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: "?op=rpc&subop=sanityCheck", parameters: "?op=rpc&subop=sanityCheck",
@ -793,3 +795,33 @@ function update_title(unread) {
} }
} }
function tweet_article(id) {
try {
var query = "?op=rpc&subop=getTweetInfo&id=" + param_escape(id);
console.log(query);
var d = new Date();
var ts = d.getTime();
var w = window.open('backend.php?op=loading', 'ttrss_tweet',
"status=0,toolbar=0,location=0,width=500,height=400,scrollbars=1,menubar=0");
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
var ti = JSON.parse(transport.responseText);
var share_url = "http://twitter.com/share?_=" + ts +
"&text=" + param_escape(ti.title) +
"&url=" + param_escape(ti.link);
w.location.href = share_url;
} });
} catch (e) {
exception_error("tweet_article", e);
}
}

View file

@ -23,8 +23,9 @@
<html> <html>
<head> <head>
<title>Tiny Tiny RSS</title> <title>Tiny Tiny RSS</title>
<link rel="stylesheet" type="text/css" href="lib/dijit/themes/claro/claro.css"/>
<link rel="stylesheet" type="text/css" href="digest.css?<?php echo $dt_add ?>"/> <link rel="stylesheet" type="text/css" href="digest.css?<?php echo $dt_add ?>"/>
<link rel="stylesheet" type="text/css" href="infobox.css?<?php echo $dt_add ?>"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
@ -37,6 +38,7 @@
<script type="text/javascript" src="lib/prototype.js"></script> <script type="text/javascript" src="lib/prototype.js"></script>
<script type="text/javascript" src="lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls"></script> <script type="text/javascript" src="lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls"></script>
<script type="text/javascript" src="lib/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript" charset="utf-8" src="localized_js.php?<?php echo $dt_add ?>"></script> <script type="text/javascript" charset="utf-8" src="localized_js.php?<?php echo $dt_add ?>"></script>
<script type="text/javascript" charset="utf-8" src="functions.js?<?php echo $dt_add ?>"></script> <script type="text/javascript" charset="utf-8" src="functions.js?<?php echo $dt_add ?>"></script>
@ -48,7 +50,7 @@
}); });
</script> </script>
</head> </head>
<body id="ttrssDigest"> <body id="ttrssDigest" class="claro">
<div id="overlay" style="display : block"> <div id="overlay" style="display : block">
<div id="overlay_inner"> <div id="overlay_inner">
<noscript> <noscript>
@ -63,17 +65,6 @@
</div> </div>
</div> </div>
<div id="dialog_overlay" style="display : none"> </div>
<div id="errorBoxShadow" style="display : none">
<div id="errorBox">
<div id="xebTitle"><?php echo __('Fatal Exception') ?></div><div id="xebContent">&nbsp;</div>
<div id="xebBtn" align='center'>
<button onclick="closeErrorBox()"><?php echo __('Close this window') ?></button>
</div>
</div>
</div>
<div id="header"> <div id="header">
<div class="links"> <div class="links">

View file

@ -4577,15 +4577,6 @@
print "<div id=\"PTITLE-$id\" style=\"display : none\">" . print "<div id=\"PTITLE-$id\" style=\"display : none\">" .
truncate_string(strip_tags($line['title']), 15) . "</div>"; truncate_string(strip_tags($line['title']), 15) . "</div>";
$tweet_title = htmlspecialchars(
truncate_string(strip_tags($line['title']), 100, '...'));
$tweet_link = htmlspecialchars($line['link']);
print "<span id=\"TWEETINFO-$id\" style=\"display : none\">";
print json_encode(array("title" => $tweet_title, "link" => $tweet_link));
print "</span>";
print "<div class=\"postReply\" id=\"POST-$id\">"; print "<div class=\"postReply\" id=\"POST-$id\">";
/* print "<div dojoType=\"dijit.Menu\" style=\"display: none;\" /* print "<div dojoType=\"dijit.Menu\" style=\"display: none;\"
@ -5232,18 +5223,6 @@
print_article_enclosures($link, $id, $always_display_enclosures, print_article_enclosures($link, $id, $always_display_enclosures,
$article_content); $article_content);
$short_title = truncate_string(
strip_tags($line['title']), 90);
$tweet_title = htmlspecialchars(
truncate_string(strip_tags($line['title']), 100, '...'));
$tweet_link = htmlspecialchars($line['link']);
print "<span id=\"TWEETINFO-$id\" style=\"display : none\">";
print json_encode(array("title" => $tweet_title, "link" => $tweet_link));
print "</span>";
print "</div>"; print "</div>";
print "<div class=\"cdmFooter\">"; print "<div class=\"cdmFooter\">";

View file

@ -982,6 +982,26 @@
return; return;
} }
if ($subop == "getTweetInfo") {
header("Content-Type: text/html");
$id = db_escape_string($_REQUEST['id']);
$result = db_query($link, "SELECT title, link
FROM ttrss_entries, ttrss_user_entries
WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']);
if (db_num_rows($result) != 0) {
$title = truncate_string(strip_tags(db_fetch_result($result, 0, 'title')),
100, '...');
$article_link = db_fetch_result($result, 0, 'link');
}
print json_encode(array("title" => $title, "link" => $article_link,
"id" => $id));
return;
}
print "<rpc-reply><error>Unknown method: $subop</error></rpc-reply>"; print "<rpc-reply><error>Unknown method: $subop</error></rpc-reply>";
} }
?> ?>

View file

@ -2305,17 +2305,28 @@ function initHeadlinesMenu() {
function tweetArticle(id) { function tweetArticle(id) {
try { try {
var query = "?op=rpc&subop=getTweetInfo&id=" + param_escape(id);
console.log(query);
var d = new Date(); var d = new Date();
var ts = d.getTime(); var ts = d.getTime();
var ti = JSON.parse($("TWEETINFO-" + id).innerHTML); var w = window.open('backend.php?op=loading', 'ttrss_tweet',
"status=0,toolbar=0,location=0,width=500,height=400,scrollbars=1,menubar=0");
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
var ti = JSON.parse(transport.responseText);
var share_url = "http://twitter.com/share?_=" + ts + var share_url = "http://twitter.com/share?_=" + ts +
"&text=" + param_escape(ti.title) + "&text=" + param_escape(ti.title) +
"&url=" + param_escape(ti.link); "&url=" + param_escape(ti.link);
window.open(share_url, 'ttrss_tweet', w.location.href = share_url;
"status=0,toolbar=0,location=0,width=500,height=400,scrollbars=1,menubar=0");
} });
} catch (e) { } catch (e) {