Commit 591f97d8 authored by Sebastian Reichel's avatar Sebastian Reichel

Imported Upstream version 1.5.1

parent 9863683b
......@@ -148,10 +148,19 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
"dijitTreeRow Error";
},
getLabel: function(item) {
var name = String(item.name);
/* Horrible */
name = name.replace(""", "\"");
name = name.replace("&", "&");
name = name.replace("—", "-");
name = name.replace("&lt;", "<");
name = name.replace("&gt;", ">");
if (item.unread > 0) {
return item.name + " (" + item.unread + ")";
return name + " (" + item.unread + ")";
} else {
return item.name;
return name;
}
},
selectFeed: function(feed, is_cat) {
......@@ -251,6 +260,25 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
return cat_unread;
},
collapseCat: function(id) {
if (!this.model.hasCats()) return;
var tree = this;
var node = tree._itemNodesMap['CAT:' + id][0];
var item = tree.model.store._itemsByIdentity['CAT:' + id];
if (node && item) {
var hidden = tree.model.store.getValue(item, 'hidden');
if (hidden)
tree._expandNode(node);
else
tree._collapseNode(node);
tree.model.store.setValue(item, 'hidden', !hidden);
}
},
collapseHiddenCats: function() {
if (!this.model.hasCats()) return;
......@@ -269,4 +297,83 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
});
},
getNextFeed: function (feed, is_cat) {
if (is_cat) {
treeItem = this.model.store._itemsByIdentity['CAT:' + feed];
} else {
treeItem = this.model.store._itemsByIdentity['FEED:' + feed];
}
items = this.model.store._arrayOfAllItems;
var item = items[0];
for (var i = 0; i < items.length; i++) {
if (items[i] == treeItem) {
for (j = i+1; j < items.length; j++) {
var id = String(items[j].id);
var box = this._itemNodesMap[id];
if (box) {
var row = box[0].rowNode;
var cat = box[0].rowNode.parentNode.parentNode;
if (Element.visible(cat) && Element.visible(row)) {
item = items[j];
break;
}
}
}
break;
}
}
if (item) {
return [this.model.store.getValue(item, 'bare_id'),
!this.model.store.getValue(item, 'id').match('FEED:')];
} else {
return false;
}
},
getPreviousFeed: function (feed, is_cat) {
if (is_cat) {
treeItem = this.model.store._itemsByIdentity['CAT:' + feed];
} else {
treeItem = this.model.store._itemsByIdentity['FEED:' + feed];
}
items = this.model.store._arrayOfAllItems;
var item = items[0];
for (var i = 0; i < items.length; i++) {
if (items[i] == treeItem) {
for (j = i-1; j > 0; j--) {
var id = String(items[j].id);
var box = this._itemNodesMap[id];
if (box) {
var row = box[0].rowNode;
var cat = box[0].rowNode.parentNode.parentNode;
if (Element.visible(cat) && Element.visible(row)) {
item = items[j];
break;
}
}
}
break;
}
}
if (item) {
return [this.model.store.getValue(item, 'bare_id'),
!this.model.store.getValue(item, 'id').match('FEED:')];
} else {
return false;
}
},
});
......@@ -26,6 +26,15 @@ dojo.declare("fox.PrefFeedTree", lib.CheckBoxTree, {
if (args.item.icon)
tnode.iconNode.src = args.item.icon[0];
var param = this.model.store.getValue(args.item, 'param');
if (param) {
param = dojo.doc.createElement('span');
param.className = 'feedParam';
param.innerHTML = args.item.param[0];
dojo.place(param, tnode.labelNode, 'after');
}
return tnode;
},
onDndDrop: function() {
......
......@@ -135,6 +135,8 @@
$limit = (int) db_escape_string($_REQUEST["limit"]);
$offset = (int) db_escape_string($_REQUEST["offset"]);
chdir(".."); // so feed_has_icon() would work properly for relative ICONS_DIR
$feeds = api_get_feeds($link, $cat_id, $unread_only, $limit, $offset);
print api_wrap_reply(API_STATUS_OK, $seq, $feeds);
......
......@@ -82,18 +82,8 @@
if ($op == "rpc" || $op == "viewfeed" || $op == "view") {
print_error_xml(6); die;
} else {
print "
<html><body>
<p>Error: Not logged in.</p>
<script type=\"text/javascript\">
if (parent.window != 'undefined') {
parent.window.location = \"tt-rss.php\";
} else {
window.location = \"tt-rss.php\";
}
</script>
</body></html>
";
header("Location: tt-rss.php?return=" .
urlencode($_SERVER['REQUEST_URI']));
}
exit;
}
......@@ -474,7 +464,7 @@
authenticate_user($link, "admin", null);
}
if ($key && !$_SESSION["uid"]) {
if ($key) {
$result = db_query($link, "SELECT owner_uid FROM
ttrss_access_keys WHERE access_key = '$key' AND feed_id = '$feed'");
......
......@@ -33,6 +33,14 @@ div.cdmContent {
font-weight : normal;
}
div.cdmContent a {
color : #4684ff;
}
div.cdmContent a:hover {
color : black;
}
div.cdmContentInner {
margin : 0px 10px 10px 10px;
}
......
......@@ -71,8 +71,8 @@
define('CHECK_FOR_NEW_VERSION', true);
// Check for new versions of tt-rss automatically.
define('USE_CURL_FOR_ICONS', false);
// Fetch favicons using CURL, useful if your PHP has disabled remote fopen()
define('USE_CURL', false);
// Use CURL to fetch remote data instead of PHP built-in fopen()
define('DIGEST_ENABLE', true);
// Global option to enable daily digests. Also toggles the ability of users
......@@ -89,7 +89,8 @@
// Enable support for interface translations
define('MYSQL_CHARSET', 'UTF8');
// Connection charset for MySQL.
// Connection charset for MySQL. If you have a legacy database and/or experience
// garbage unicode characters with this option, try setting it to a blank string.
define('DEFAULT_UPDATE_METHOD', 0);
// Which feed parsing library to use as default:
......@@ -135,6 +136,11 @@
// option can be used to integrate tt-rss with Apache's external
// authentication modules.
define('AUTO_LOGIN', false);
// Set this to true if you use ALLOW_REMOTE_USER_AUTH and you want
// to skip the login form. If set to true, users won't be able to
// set application language and settings profile.
define('LOCK_DIRECTORY', 'lock');
// Directory for lockfiles, must be writable to the user you run
// daemon process or cronjobs under.
......@@ -183,7 +189,7 @@
// Your OAuth instance authentication information for Twitter, visit
// http://twitter.com/oauth_clients to register your instance.
define('CONFIG_VERSION', 20);
define('CONFIG_VERSION', 21);
// Expected config version. Please update this option in config.php
// if necessary (after migrating all new options from this file).
......
......@@ -140,7 +140,7 @@ function viewfeed(feed, subop, is_cat, offset) {
console.log(query);
var unread_ctr = -1;
/* var unread_ctr = -1;
if (!is_cat) unread_ctr = getFeedUnread(feed);
......@@ -170,7 +170,7 @@ function viewfeed(feed, subop, is_cat, offset) {
request_counters();
remove_splash();
} else {
} else { */
if (!is_cat) {
if (!setFeedExpandoIcon(feed, is_cat, 'images/indicator_white.gif'))
......@@ -185,7 +185,7 @@ function viewfeed(feed, subop, is_cat, offset) {
setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif');
headlines_callback2(transport, page_offset);
} });
}
// }
} catch (e) {
exception_error("viewfeed", e);
......
......@@ -371,7 +371,7 @@
}
function fetch_file_contents($url, $type = false) {
if (USE_CURL_FOR_ICONS) {
if (USE_CURL) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
......@@ -435,7 +435,7 @@
$favicon_url = rewrite_relative_url($url, "/favicon.ico");
// Run a test to see if what we have attempted to get actually exists.
if(USE_CURL_FOR_ICONS || url_validate($favicon_url)) {
if(USE_CURL || url_validate($favicon_url)) {
return $favicon_url;
} else {
return false;
......@@ -656,7 +656,7 @@
_debug("enabling image cache");
}
$rss->set_image_handler('./image.php', 'i');
$rss->set_image_handler(get_self_url_prefix() . '/image.php', 'i');
}
if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) {
......@@ -755,7 +755,7 @@
$icon_url = substr($icon_url, 0, 250);
if ($icon_url && $orig_icon_url != $icon_url) {
if (USE_CURL_FOR_ICONS || url_validate($icon_url)) {
if (USE_CURL || url_validate($icon_url)) {
db_query($link, "UPDATE ttrss_feeds SET icon_url = '$icon_url' WHERE id = '$feed'");
}
}
......@@ -766,6 +766,10 @@
$filters = load_filters($link, $feed, $owner_uid);
if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) {
print_r($filters);
}
if ($use_simplepie) {
$iterator = $rss->get_items();
} else {
......@@ -1981,7 +1985,12 @@
}
}
header("Location: " . $_SERVER["REQUEST_URI"]);
if ($_REQUEST['return']) {
header("Location: " . $_REQUEST['return']);
} else {
header("Location: " . $_SERVER["REQUEST_URI"]);
}
exit;
return;
......@@ -1991,9 +2000,15 @@
}
if (!$_SESSION["uid"] || !validate_session($link)) {
render_login_form($link, $mobile);
//header("Location: login.php");
exit;
if (defined('ALLOW_REMOTE_USER_AUTH') && ALLOW_REMOTE_USER_AUTH
&& $_SERVER["REMOTE_USER"] && defined('AUTO_LOGIN') && AUTO_LOGIN) {
authenticate_user($link,$_SERVER['REMOTE_USER'],null);
$_SESSION["ref_schema_version"] = get_schema_version($link, true);
} else {
render_login_form($link, $mobile);
//header("Location: login.php");
exit;
}
} else {
/* bump login timestamp */
db_query($link, "UPDATE ttrss_users SET last_login = NOW() WHERE id = " .
......@@ -4093,7 +4108,7 @@
"</option>";
$rss_link = htmlspecialchars(get_self_url_prefix() .
"/backend.php?op=rss&id=$feed_id&is_cat=$is_cat$view_mode$search_q");
"/backend.php?op=rss&id=$feed_id&is_cat=$is_cat&view_mode=$view_mode$search_q");
print "<option value=\"0\" disabled=\"1\">".__('Feed:')."</option>";
......@@ -4430,13 +4445,13 @@
<img src=\"".theme_image($link, "images/sign_excl.png")."\">$msg</div>";
}
function format_notice($msg) {
function format_notice($msg, $id = "") {
global $link;
return "<div class=\"notice\" id=\"$id\">
<img src=\"".theme_image($link, "images/sign_info.png")."\">$msg</div>";
}
function format_error($msg) {
function format_error($msg, $id = "") {
global $link;
return "<div class=\"error\" id=\"$id\">
<img src=\"".theme_image($link, "images/sign_excl.png")."\">$msg</div>";
......@@ -4771,6 +4786,10 @@
catchupArticlesById($link, $ids, $cmode);
}
if ($subop == "ForceUpdate" && sprintf("%d", $feed) > 0) {
update_rss_feed($link, $feed, true);
}
if ($subop == "MarkAllRead") {
catchup_feed($link, $feed, $cat_view);
......@@ -7059,7 +7078,7 @@
if ($value) {
print "<style type=\"text/css\">";
print $value;
print str_replace("<br/>", "\n", $value);
print "</style>";
}
......
......@@ -5,7 +5,7 @@
<h2><?php echo __("Navigation") ?></h2>
<table>
<!-- <tr><td class='n'>j/k</td><td><?php echo __("Move between feeds") ?></td></tr> -->
<tr><td class='n'>j/k</td><td><?php echo __("Move between feeds") ?></td></tr>
<tr><td class='n'>n/p</td><td><?php echo __("Move between articles") ?></td></tr>
<tr><td class='n'>/</td><td><?php echo __("Show search dialog") ?></td></tr>
</table>
......
images/logo_wide.png

8.84 KB | W: | H:

images/logo_wide.png

7.22 KB | W: | H:

images/logo_wide.png
images/logo_wide.png
images/logo_wide.png
images/logo_wide.png
  • 2-up
  • Swipe
  • Onion skin
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -143,8 +143,10 @@
if ($subop == "setpref") {
header("Content-Type: text/plain");
$value = str_replace("\n", "<br/>", $_REQUEST['value']);
$key = db_escape_string($_REQUEST["key"]);
$value = db_escape_string($_REQUEST["value"]);
$value = db_escape_string($value);
set_pref($link, $key, $value);
......
......@@ -796,6 +796,8 @@
$value = get_pref($link, "USER_STYLESHEET");
$value = str_replace("<br/>", "\n", $value);
print T_sprintf("You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline.", "tt-rss.css");
print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
......
......@@ -55,7 +55,8 @@
$cat['items'] = array();
$cat['type'] = 'category';
$feed_result = db_query($link, "SELECT id, title, last_error
$feed_result = db_query($link, "SELECT id, title, last_error,
".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated
FROM ttrss_feeds
WHERE cat_id = '".$line['id']."' AND owner_uid = ".$_SESSION["uid"].
" ORDER BY order_id, title");
......@@ -68,6 +69,8 @@
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime($link,
$feed_line['last_updated'], true);
array_push($cat['items'], $feed);
}
......@@ -84,7 +87,8 @@
$cat['items'] = array();
$cat['type'] = 'category';
$feed_result = db_query($link, "SELECT id, title,last_error
$feed_result = db_query($link, "SELECT id, title,last_error,
".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated
FROM ttrss_feeds
WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"].
" ORDER BY order_id, title");
......@@ -97,13 +101,16 @@
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime($link,
$feed_line['last_updated'], true);
array_push($cat['items'], $feed);
}
array_push($root['items'], $cat);
} else {
$feed_result = db_query($link, "SELECT id, title, last_error
$feed_result = db_query($link, "SELECT id, title, last_error,
".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated
FROM ttrss_feeds
WHERE owner_uid = ".$_SESSION["uid"].
" ORDER BY order_id, title");
......@@ -116,6 +123,8 @@
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime($link,
$feed_line['last_updated'], true);
array_push($root['items'], $feed);
}
......@@ -921,19 +930,51 @@
case 0:
print_warning(T_sprintf("Already subscribed to <b>%s</b>.", $feed_url));
break;
case 4:
print_notice("Multiple feed URLs found.");
$feed_urls = get_feeds_from_html($feed_url);
break;
case 5:
print_error(T_sprintf("Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL.", $feed_url));
break;
}
if ($p_from != 'tt-rss') {
$tt_uri = ($_SERVER['HTTPS'] != "on" ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . preg_replace('/backend\.php.*$/', 'tt-rss.php', $_SERVER["REQUEST_URI"]);
if ($feed_urls) {
print "<form action=\"backend.php\">";
print "<input type=\"hidden\" name=\"op\" value=\"pref-feeds\">";
print "<input type=\"hidden\" name=\"quiet\" value=\"1\">";
print "<input type=\"hidden\" name=\"subop\" value=\"add\">";
print "<select name=\"feed_url\">";
foreach ($feed_urls as $url => $name) {
$url = htmlspecialchars($url);
$name = htmlspecialchars($name);
$tp_uri = ($_SERVER['HTTPS'] != "on" ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . preg_replace('/backend\.php.*$/', 'prefs.php', $_SERVER["REQUEST_URI"]);
print "<option value=\"$url\">$name</option>";
}
print "<input type=\"submit\" value=\"".__("Subscribe to selected feed").
"\">";
print "</form>";
}
$result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]);
$tp_uri = get_self_url_prefix() . "/prefs.php";
$tt_uri = get_self_url_prefix();
$feed_id = db_fetch_result($result, 0, "id");
if ($rc <= 2){
$result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]);
$feed_id = db_fetch_result($result, 0, "id");
} else {
$feed_id = 0;
}
print "<p>";
if ($feed_id) {
......
var init_params = new Array();
var caller_subop = false;
var hotkey_prefix = false;
var hotkey_prefix_pressed = false;
var seq = "";
function feedlist_callback2(transport) {
try {
dijit.byId('feedConfigTab').attr('content', transport.responseText);
selectTab("feedConfig", true);
if (caller_subop) {
var tuple = caller_subop.split(":");
if (tuple[0] == 'editFeed') {
window.setTimeout('editFeed('+tuple[1]+')', 100);
}
caller_subop = false;
}
notify("");
} catch (e) {
exception_error("feedlist_callback2", e);
}
......@@ -869,15 +855,7 @@ function init_second_stage() {
try {
document.onkeydown = pref_hotkey_handler;
caller_subop = getURLParam('subop');
if (getURLParam("subopparam")) {
caller_subop = caller_subop + ":" + getURLParam("subopparam");
}
loading_set_progress(50);
notify("");
dojo.addOnLoad(function() {
......@@ -887,6 +865,14 @@ function init_second_stage() {
tab = dijit.byId(tab + "Tab");
if (tab) dijit.byId("pref-tabs").selectChild(tab);
}
var subop = getURLParam('subop');
if (subop == 'editFeed') {
var param = getURLParam('subopparam');
window.setTimeout('editFeed(' + param + ')', 100);
}
});
setTimeout("hotkey_prefix_timeout()", 5*1000);
......
<?php
require_once "functions.php";
define('EXPECTED_CONFIG_VERSION', 20);
define('EXPECTED_CONFIG_VERSION', 21);
define('SCHEMA_VERSION', 78);
if (!file_exists("config.php")) {
......@@ -11,6 +11,7 @@
}
require_once "config.php";
require_once "sanity_config.php";
if (CONFIG_VERSION != EXPECTED_CONFIG_VERSION) {
$err_msg = "config: your config file version is incorrect. See config.php-dist.\n";
......@@ -22,6 +23,16 @@
$err_msg = "config: HTMLPurifier cache directory should be writable by anyone (chmod -R 777 $purifier_cache_dir)";
}
if (GENERATED_CONFIG_CHECK != EXPECTED_CONFIG_VERSION) {
$err_msg = "config: your sanity_config.php is outdated, please recreate it using ./utils/regen_config_checks.sh";
}
foreach ($requred_defines as $d) {
if (!defined($d)) {
$err_msg = "config: required constant $d is not defined. Please check config.php";
}
}
if (defined('RSS_BACKEND_TYPE')) {
print "<b>Fatal error</b>: RSS_BACKEND_TYPE is deprecated. Please remove this
option from config.php\n";
......@@ -41,8 +52,8 @@
exit;
}
if (USE_CURL_FOR_ICONS && ! function_exists("curl_init")) {
print "<b>Fatal Error</b>: You have enabled USE_CURL_FOR_ICONS, but your PHP
if (USE_CURL && ! function_exists("curl_init")) {
print "<b>Fatal Error</b>: You have enabled USE_CURL, but your PHP
doesn't seem to support CURL functions.";
exit;
}
......@@ -110,6 +121,38 @@
$err_msg = "config: your ICONS_DIR (" . ICONS_DIR . ") is not writable.\n";
}
if (ini_get("open_basedir")) {
$err_msg = "php.ini: open_basedir is not supported.";
}
if (!ini_get("allow_url_fopen")) {
$err_msg = "php.ini: allow_url_fopen is required.";
}
if (!function_exists("json_encode")) {
$err_msg = "PHP: json functions not found.";
}
if (DB_TYPE == "mysql" && !function_exists("mysql_connect")) {
$err_msg = "PHP: MySQL functions not found.";
}
if (DB_TYPE == "pgsql" && !function_exists("pg_connect")) {
$err_msg = "PHP: PostgreSQL functions not found.";
}
if (!function_exists("mb_strlen")) {
$err_msg = "PHP: mbstring functions not found.";
}
if (ini_get("safe_mode")) {
$err_msg = "php.ini: Safe mode is not supported. If you wish to continue, remove this test from sanity_check.php and proceeed at your own risk. Please note that your bug reports will not be accepted or reviewed.";
}
if (defined('USE_CURL_FOR_ICONS')) {
$err_msg = "config: USE_CURL_FOR_ICONS has been renamed to USE_CURL.";
}
if ($err_msg) {
print "<b>Fatal Error</b>: $err_msg\n";
exit;
......
<?php # This file has been generated at: Tue Jan 11 12:10:54 MSK 2011
define('GENERATED_CONFIG_CHECK', 21);
$requred_defines = array( 'DB_TYPE', 'DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASS', 'DB_PORT', 'MAGPIE_FETCH_TIME_OUT', 'MAGPIE_CACHE_DIR', 'MAGPIE_CACHE_AGE', 'ICONS_DIR', 'ICONS_URL', 'SINGLE_USER_MODE', 'TMP_DIRECTORY', 'ENABLE_UPDATE_DAEMON', 'DAEMON_SLEEP_INTERVAL', 'DATABASE_BACKED_SESSIONS', 'SESSION_CHECK_ADDRESS', 'SESSION_COOKIE_LIFETIME', 'SESSION_EXPIRE_TIME', 'DAEMON_UPDATE_LOGIN_LIMIT', 'CHECK_FOR_NEW_VERSION', 'USE_CURL', 'DIGEST_ENABLE', 'DIGEST_EMAIL_LIMIT', 'DAEMON_SENDS_DIGESTS', 'ENABLE_TRANSLATIONS', 'MYSQL_CHARSET', 'DEFAULT_UPDATE_METHOD', 'SIMPLEPIE_CACHE_DIR', 'SIMPLEPIE_CACHE_IMAGES', 'COUNTERS_MAX_AGE', 'DIGEST_FROM_NAME', 'DIGEST_FROM_ADDRESS', 'DIGEST_SUBJECT', 'DIGEST_SMTP_HOST', 'DIGEST_SMTP_LOGIN', 'DIGEST_SMTP_PASSWORD', 'DAEMON_FEED_LIMIT', 'ALLOW_REMOTE_USER_AUTH', 'AUTO_LOGIN', 'LOCK_DIRECTORY', 'ENABLE_GZIP_OUTPUT', 'PHP_EXECUTABLE', 'ENABLE_REGISTRATION', 'REG_NOTIFY_ADDRESS', 'REG_MAX_USERS', 'FEEDBACK_URL', 'FORCE_ARTICLE_PURGE', 'SPHINX_ENABLED', 'SPHINX_INDEX', 'ENABLE_TWEET_BUTTON', 'CONSUMER_KEY', 'CONSUMER_SECRET', 'CONFIG_VERSION'); ?>
function themeBeforeLayout() {
$("headlines-wrap-inner").setAttribute("design", 'sidebar');
$("content-insert").setAttribute("region", "trailing");
$("content-insert").setStyle({
width: '50%',
height: 'auto'});
if ($("content-insert")) {
$("headlines-wrap-inner").setAttribute("design", 'sidebar');
$("content-insert").setAttribute("region", "trailing");
$("content-insert").setStyle({
width: '50%',
height: 'auto'});
}
}
function themeAfterLayout() {
$("headlines-toolbar").setStyle({
'border-right-width': '1px',
'border-color': '#88b0f0',
});
if ($("content-insert")) {
$("headlines-toolbar").setStyle({
'border-right-width': '1px',
'border-color': '#88b0f0',
});
}
}
......@@ -1592,6 +1592,12 @@ div.fatalError textarea {
font-weight : bold;
}
.feedParam {
color : gray;
float : right;
margin-right : 1em;
}
.dijitTreeLabel.Disabled, .labelParam.Disabled {
color : gray;
}
......
......@@ -704,12 +704,20 @@ function hotkey_handler(e) {
}
if (keycode == 74) { // j
// TODO: move to previous feed
var rv = dijit.byId("feedTree").getPreviousFeed(
getActiveFeedId(), activeFeedIsCat());
if (rv) viewfeed(rv[0], '', rv[1]);