--- /dev/null
+body {
+ background : #f0f0f0;
+ color : gray;
+ font-family : sans-serif;
+ font-size : 12px;
+}
+
+a {
+ color : #0069D8;
+ text-decoration : none;
+}
+
+a:hover {
+ color : gray;
+}
+
+#header a, #footer a {
+ color : gray;
+}
+
+#header {
+ font-weight : bold;
+ font-size : 14px;
+ font-family : "Lucida Grande", "Segoe UI", Tahoma, Arial, sans-serif;
+ margin-left : 1em;
+ margin-right : 1em;
+}
+
+#header div.links {
+ float : right;
+}
+
+#search {
+ float : right;
+ clear : left;
+
+}
+
+#content {
+ border : 1px solid #e0e0e0;
+ background : white;
+ padding : 0.8em;
+ margin : 0.5em;
+}
+
+#footer {
+ font-size : 12px;
+ text-align : center;
+}
+
+/*#content h1 {
+ font-weight : bold;
+ font-size : 25px;
+ font-family : "Lucida Grande", "Segoe UI", Tahoma, Arial, sans-serif;
+ letter-spacing : -2;
+ margin : 0px 0px 0.5em 0px;
+ color : black;
+}
+
+#content h2 {
+ font-weight : bold;
+ font-size : 20px;
+ font-family : "Lucida Grande", "Segoe UI", Tahoma, Arial, sans-serif;
+ letter-spacing : 2;
+ margin : 0px 0px 0.5em 0px;
+ color : #684C99;
+}
+
+#content h3 {
+ font-weight : bold;
+ font-size : 16px;
+ font-family : "Lucida Grande", "Segoe UI", Tahoma, Arial, sans-serif;
+ letter-spacing : 2;
+ margin : 0px 0px 0.5em 0px;
+ color : #659a4c;
+} */
+
+#content h1 {
+ margin : 0px 0px 20px 0px;
+ font-family : "Lucida Grande", "Segoe UI", Tahoma, Arial, sans-serif;
+ font-size : 18px;
+ letter-spacing : 1px;
+ color : #684C99;
+}
+
+#title {
+}
+
+#latest {
+ padding : 5px;
+}
+
+#feeds {
+ float : right;
+ width : 30%;
+ min-width : 300px;
+ padding : 5px;
+ font-size : 14px;
+}
+
+#feeds h1 {
+ text-align : right;
+}
+
+#feeds ul#feeds-content img {
+ width : 16px;
+ height : 16px;
+ vertical-align : middle;
+ margin-right : 5px;
+}
+
+#feeds ul#feeds-content div.unread-ctr {
+ color : gray;
+ float : right;
+}
+
+#feeds ul#feeds-content li {
+ margin : 0px 0px 2px 0px;
+}
+
+#feeds ul#feeds-content {
+ list-style-type : none;
+ font-weight : bold;
+ color : #659a4c;
+ margin : 0px;
+ padding : 0px;
+}
+
+#headlines {
+ padding : 5px;
+ font-size : 14px;
+}
+
+#headlines ul#headlines-content img {
+ width : 16px;
+ height : 16px;
+ vertical-align : middle;
+ margin-right : 5px;
+}
+
+#headlines ul#headlines-content {
+ list-style-type : none;
+ color : gray;
+ margin : 0px;
+ padding : 0px;
+}
+
+#headlines ul#headlines-content li {
+ margin : 0px 0px 10px 0px;
+ color : #909090;
+}
+
+#headlines ul#headlines-content a.title {
+ font-weight : bold;
+ font-size : 16px;
+}
+
+#headlines ul#headlines-content div.excerpt {
+ margin-left : 22px;
+ color : #404040;
+}
+
+#headlines ul#headlines-content div.info {
+ margin-left : 22px;
+}
+
+#headlines ul#headlines-content div.info a {
+ color : gray;
+}
+
--- /dev/null
+var last_feeds = [];
+
+function find_feed(feeds, feed_id) {
+ try {
+ for (var i = 0; i < feeds.length; i++) {
+ if (feeds[i].id == feed_id)
+ return feeds[i];
+ }
+
+ return false;
+
+ } catch (e) {
+ exception_error("find_feed", e);
+ }
+}
+
+function add_feed_entry(feed) {
+ try {
+ var icon_part = "";
+
+ if (feed.has_icon)
+ icon_part = "<img alt='zz' src='icons/" + feed.id + ".ico'/>";
+
+ var tmp_html = "<li>" +
+ icon_part +
+ feed.title +
+ "<div class='unread-ctr'>" + feed.unread + "</div>" +
+ "</li>";
+
+ $("feeds-content").innerHTML += tmp_html;
+
+ } catch (e) {
+ exception_error("add_feed_entry", e);
+ }
+}
+
+function add_latest_entry(article) {
+ try {
+
+ } catch (e) {
+ exception_error("add_latest_entry", e);
+ }
+}
+
+function add_headline_entry(article, feed) {
+ try {
+
+ var icon_part = "";
+
+ if (article.has_icon)
+ icon_part = "<img alt='zz' src='icons/" + article.feed_id + ".ico'/>";
+
+ var tmp_html = "<li>" +
+ icon_part +
+ "<a class='title'>" + article.title + "</a>" +
+ "<div class='excerpt'>" + article.excerpt + "</div>" +
+ "<div class='info'><a>" + feed.title + "</a> " + " @ " +
+ article.updated + "</div>" +
+ "</li>";
+
+ $("headlines-content").innerHTML += tmp_html;
+
+ } catch (e) {
+ exception_error("add_headline_entry", e);
+ }
+}
+
+function digest_update(transport) {
+ try {
+ var feeds = transport.responseXML.getElementsByTagName('feeds')[0];
+ var headlines = transport.responseXML.getElementsByTagName('headlines')[0];
+
+ if (feeds) {
+ last_feeds = feeds;
+
+ feeds = eval("(" + feeds.firstChild.nodeValue + ")");
+
+ for (var i = 0; i < feeds.length; i++) {
+ add_feed_entry(feeds[i]);
+ }
+ }
+
+ if (headlines) {
+ headlines = eval("(" + headlines.firstChild.nodeValue + ")");
+
+ for (var i = 0; i < headlines.length; i++) {
+ add_headline_entry(headlines[i], find_feed(feeds, headlines[i].feed_id));
+ }
+ }
+
+ } catch (e) {
+ exception_error("digest_update", e);
+ }
+ }
+
+function digest_init() {
+ try {
+
+ new Ajax.Request("backend.php", {
+ parameters: "backend.php?op=rpc&subop=digest-init",
+ onComplete: function(transport) {
+ digest_update(transport);
+ } });
+
+ } catch (e) {
+ exception_error("digest_init", e);
+ }
+}
--- /dev/null
+<?php
+ error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
+ require_once "functions.php";
+ require_once "sessions.php";
+ require_once "sanity_check.php";
+ require_once "version.php";
+ require_once "config.php";
+ require_once "db-prefs.php";
+
+ $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
+
+ login_sequence($link);
+
+ $dt_add = get_script_dt_add();
+
+ no_cache_incantation();
+
+ header('Content-Type: text/html; charset=utf-8');
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+<head>
+ <title>Tiny Tiny Digest</title>
+ <link rel="stylesheet" type="text/css" href="digest.css?<?php echo $dt_add ?>"/>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+
+ <?php $user_css_url = get_pref($link, 'USER_STYLESHEET_URL'); ?>
+ <?php if ($user_css_url) { ?>
+ <link rel="stylesheet" type="text/css" href="<?php echo $user_css_url ?>"/>
+ <?php } ?>
+
+ <link rel="shortcut icon" type="image/png" href="images/favicon.png"/>
+
+ <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" charset="utf-8" src="localized_js.php?<?php echo $dt_add ?>"></script>
+ <script type="text/javascript" charset="utf-8" src="tt-rss.js?<?php echo $dt_add ?>"></script>
+ <script type="text/javascript" charset="utf-8" src="functions.js?<?php echo $dt_add ?>"></script>
+
+ <script type="text/javascript" src="digest.js"></script>
+
+ <script type="text/javascript">
+ Event.observe(window, 'load', function() {
+ digest_init();
+ });
+ </script>
+</head>
+<body id="ttrssDigest">
+ <div id="header">
+
+ <div class="links">
+
+ <?php if (!SINGLE_USER_MODE) { ?>
+ <?php echo __('Hello,') ?> <b><?php echo $_SESSION["name"] ?></b> |
+ <?php } ?>
+
+ <?php if (!SINGLE_USER_MODE) { ?>
+ <a href="logout.php"><?php echo __('Logout') ?></a>
+ <?php } ?>
+
+ </div>
+
+ Tiny Tiny Digest
+
+ </div>
+ <div id="content">
+ <div id="title">
+ <div id="search">
+ <input name="search" type="search"></input>
+ <button>Search</button>
+ </div>
+
+ </div>
+
+ <div id="latest">
+ <h1>latest articles</h1>
+
+ <em>TODO</em>
+
+ <div id="latest-content"> </div>
+ </div>
+
+ <div id="feeds">
+ <h1>feeds</h1>
+
+ <ul id="feeds-content"> </ul>
+ </div>
+
+ <div id="headlines">
+ <h1>headlines</h1>
+
+ <ul id="headlines-content"> </ul>
+ </div>
+
+ <br clear="both">
+
+ </div>
+
+ <div id="footer">
+
+ <a href="http://tt-rss.org/">Tiny Tiny RSS</a>
+ <?php if (!defined('HIDE_VERSION')) { ?>
+ v<?php echo VERSION ?>
+ <?php } ?>
+ © 2005–<?php echo date('Y') ?>
+ <a href="http://fakecake.org/">Andrew Dolgov</a></div>
+
+</body>