aboutsummaryrefslogtreecommitdiff
path: root/p
diff options
context:
space:
mode:
Diffstat (limited to 'p')
-rw-r--r--p/api/greader.php226
-rw-r--r--p/api/index.php4
-rw-r--r--p/api/pshb.php4
-rw-r--r--p/scripts/jquery.sticky-kit.min.js9
-rw-r--r--p/scripts/main.js134
-rw-r--r--p/themes/BlueLagoon/BlueLagoon.css31
-rw-r--r--p/themes/BlueLagoon/icons/icon.svg2
-rw-r--r--p/themes/BlueLagoon/template.css696
-rw-r--r--p/themes/Dark/dark.css18
-rw-r--r--p/themes/Flat/flat.css18
-rw-r--r--p/themes/Origine-compact/origine-compact.css5
-rw-r--r--p/themes/Screwdriver/icons/icon.svg2
-rw-r--r--p/themes/Screwdriver/screwdriver.css18
-rw-r--r--p/themes/Swage/swage.css1280
-rw-r--r--p/themes/Swage/swage.scss91
-rw-r--r--p/themes/base-theme/template.css97
16 files changed, 1063 insertions, 1572 deletions
diff --git a/p/api/greader.php b/p/api/greader.php
index c6701096c..7cd312f2c 100644
--- a/p/api/greader.php
+++ b/p/api/greader.php
@@ -19,6 +19,7 @@ Server-side API compatible with Google Reader API layer 2
* https://github.com/devongovett/reader
* https://github.com/theoldreader/api
* https://www.inoreader.com/developers/
+* https://feedhq.readthedocs.io/en/latest/api/index.html
*/
require(__DIR__ . '/../../constants.php');
@@ -198,6 +199,7 @@ function clientLogin($email, $pass) { //http://web.archive.org/web/2013060409104
header('Content-Type: text/plain; charset=UTF-8');
$auth = $email . '/' . sha1(FreshRSS_Context::$system_conf->salt . $email . FreshRSS_Context::$user_conf->apiPasswordHash);
echo 'SID=', $auth, "\n",
+ 'LSID=null', "\n", //Vienna RSS
'Auth=', $auth, "\n";
exit();
} else {
@@ -258,7 +260,7 @@ function tagList() {
foreach ($res as $cName) {
$tags[] = array(
- 'id' => 'user/-/label/' . $cName,
+ 'id' => 'user/-/label/' . htmlspecialchars_decode($cName, ENT_QUOTES),
//'sortid' => $cName,
'type' => 'folder', //Inoreader
);
@@ -270,7 +272,7 @@ function tagList() {
$labels = $tagDAO->listTags(true);
foreach ($labels as $label) {
$tags[] = array(
- 'id' => 'user/-/label/' . $label->name(),
+ 'id' => 'user/-/label/' . htmlspecialchars_decode($label->name(), ENT_QUOTES),
//'sortid' => $cName,
'type' => 'tag', //Inoreader
'unread_count' => $label->nbUnread(), //Inoreader
@@ -298,17 +300,17 @@ function subscriptionList() {
foreach ($res as $line) {
$subscriptions[] = array(
'id' => 'feed/' . $line['id'],
- 'title' => $line['name'],
+ 'title' => escapeToUnicodeAlternative($line['name'], true),
'categories' => array(
array(
- 'id' => 'user/-/label/' . $line['c_name'],
- 'label' => $line['c_name'],
+ 'id' => 'user/-/label/' . htmlspecialchars_decode($line['c_name'], ENT_QUOTES),
+ 'label' => htmlspecialchars_decode($line['c_name'], ENT_QUOTES),
),
),
//'sortid' => $line['name'],
//'firstitemmsec' => 0,
- 'url' => $line['url'],
- 'htmlUrl' => $line['website'],
+ 'url' => htmlspecialchars_decode($line['url'], ENT_QUOTES),
+ 'htmlUrl' => htmlspecialchars_decode($line['website'], ENT_QUOTES),
'iconUrl' => $faviconsUrl . hash('crc32b', $salt . $line['url']),
);
}
@@ -345,6 +347,7 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
$c_name = '';
}
}
+ $c_name = htmlspecialchars($c_name, ENT_COMPAT, 'UTF-8');
$cat = $categoryDAO->searchByName($c_name);
$addCatId = $cat == null ? 0 : $cat->id();
} else if ($remove != '' && strpos($remove, 'user/-/label/')) {
@@ -355,26 +358,28 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
badRequest();
}
for ($i = count($streamNames) - 1; $i >= 0; $i--) {
- $streamName = $streamNames[$i]; //feed/http://example.net/sample.xml ; feed/338
- if (strpos($streamName, 'feed/') === 0) {
- $streamName = substr($streamName, 5);
+ $streamUrl = $streamNames[$i]; //feed/http://example.net/sample.xml ; feed/338
+ if (strpos($streamUrl, 'feed/') === 0) {
+ $streamUrl = substr($streamUrl, 5);
$feedId = 0;
- if (ctype_digit($streamName)) {
+ if (ctype_digit($streamUrl)) {
if ($action === 'subscribe') {
continue;
}
- $feedId = $streamName;
+ $feedId = $streamUrl;
} else {
- $feed = $feedDAO->searchByUrl($streamName);
+ $streamUrl = htmlspecialchars($streamUrl, ENT_COMPAT, 'UTF-8');
+ $feed = $feedDAO->searchByUrl($streamUrl);
$feedId = $feed == null ? -1 : $feed->id();
}
$title = isset($titles[$i]) ? $titles[$i] : '';
+ $title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8');
switch ($action) {
case 'subscribe':
if ($feedId <= 0) {
- $http_auth = ''; //TODO
+ $http_auth = '';
try {
- $feed = FreshRSS_feed_Controller::addFeed($streamName, $title, $addCatId, $c_name, $http_auth);
+ $feed = FreshRSS_feed_Controller::addFeed($streamUrl, $title, $addCatId, $c_name, $http_auth);
continue;
} catch (Exception $e) {
Minz_Log::error('subscriptionEdit error subscribe: ' . $e->getMessage(), API_LOG);
@@ -407,6 +412,7 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
function quickadd($url) {
try {
+ $url = htmlspecialchars($url, ENT_COMPAT, 'UTF-8');
$feed = FreshRSS_feed_Controller::addFeed($url);
exit(json_encode(array(
'numResults' => 1,
@@ -442,7 +448,7 @@ function unreadCount() { //http://blog.martindoms.com/2009/10/16/using-the-googl
}
}
$unreadcounts[] = array(
- 'id' => 'user/-/label/' . $cat->name(),
+ 'id' => 'user/-/label/' . htmlspecialchars_decode($cat->name(), ENT_QUOTES),
'count' => $cat->nbNotRead(),
'newestItemTimestampUsec' => $catLastUpdate . '000000',
);
@@ -455,7 +461,7 @@ function unreadCount() { //http://blog.martindoms.com/2009/10/16/using-the-googl
$tagDAO = FreshRSS_Factory::createTagDao();
foreach ($tagDAO->listTags(true) as $label) {
$unreadcounts[] = array(
- 'id' => 'user/-/label/' . $label->name(),
+ 'id' => 'user/-/label/' . htmlspecialchars_decode($label->name(), ENT_QUOTES),
'count' => $label->nbUnread(),
);
}
@@ -496,28 +502,29 @@ function entriesToArray($entries) {
$f_name = '_';
}
$item = array(
- 'id' => /*'tag:google.com,2005:reader/item/' .*/ dec2hex($entry->id()), //64-bit hexa http://code.google.com/p/google-reader-api/wiki/ItemId
+ 'id' => 'tag:google.com,2005:reader/item/' . dec2hex($entry->id()), //64-bit hexa http://code.google.com/p/google-reader-api/wiki/ItemId
'crawlTimeMsec' => substr($entry->id(), 0, -3),
'timestampUsec' => '' . $entry->id(), //EasyRSS
'published' => $entry->date(true),
- 'title' => $entry->title(),
+ 'title' => escapeToUnicodeAlternative($entry->title(), false),
'summary' => array('content' => $entry->content()),
'alternate' => array(
array('href' => htmlspecialchars_decode($entry->link(), ENT_QUOTES)),
),
'categories' => array(
'user/-/state/com.google/reading-list',
- 'user/-/label/' . $c_name,
+ 'user/-/label/' . htmlspecialchars_decode($c_name, ENT_QUOTES),
),
'origin' => array(
'streamId' => 'feed/' . $f_id,
- 'title' => $f_name, //EasyRSS
+ 'title' => escapeToUnicodeAlternative($f_name, true), //EasyRSS
//'htmlUrl' => $line['f_website'],
),
);
$author = $entry->authors(true);
+ $author = trim($author, '; ');
if ($author != '') {
- $item['author'] = $author;
+ $item['author'] = escapeToUnicodeAlternative($author, false);
}
if ($entry->isRead()) {
$item['categories'][] = 'user/-/state/com.google/read';
@@ -527,69 +534,117 @@ function entriesToArray($entries) {
}
$tagNames = isset($entryIdsTagNames['e_' . $entry->id()]) ? $entryIdsTagNames['e_' . $entry->id()] : array();
foreach ($tagNames as $tagName) {
- $item['categories'][] = 'user/-/label/' . $tagName;
+ $item['categories'][] = 'user/-/label/' . htmlspecialchars_decode($tagName, ENT_QUOTES);
}
$items[] = $item;
}
return $items;
}
-function streamContents($path, $include_target, $start_time, $count, $order, $exclude_target, $continuation) {
-//http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI
-//http://blog.martindoms.com/2009/10/16/using-the-google-reader-api-part-2/#feed
- header('Content-Type: application/json; charset=UTF-8');
-
- switch ($path) {
- case 'reading-list':
- $type = 'A';
- break;
- case 'starred':
- $type = 's';
- break;
- case 'feed':
- $type = 'f';
+function streamContentsFilters($type, $streamId, $filter_target, $exclude_target, $start_time, $stop_time) {
+ switch ($type) {
+ case 'f': //feed
+ if ($streamId != '' && !ctype_digit($streamId)) {
+ $feedDAO = FreshRSS_Factory::createFeedDao();
+ $streamId = htmlspecialchars($streamId, ENT_COMPAT, 'UTF-8');
+ $feed = $feedDAO->searchByUrl($streamId);
+ $streamId = $feed == null ? -1 : $feed->id();
+ }
break;
- case 'label':
+ case 'c': //category or label
$categoryDAO = FreshRSS_Factory::createCategoryDao();
- $cat = $categoryDAO->searchByName($include_target);
+ $streamId = htmlspecialchars($streamId, ENT_COMPAT, 'UTF-8');
+ $cat = $categoryDAO->searchByName($streamId);
if ($cat != null) {
$type = 'c';
- $include_target = $cat->id();
+ $streamId = $cat->id();
} else {
$tagDAO = FreshRSS_Factory::createTagDao();
- $tag = $tagDAO->searchByName($include_target);
+ $tag = $tagDAO->searchByName($streamId);
if ($tag != null) {
$type = 't';
- $include_target = $tag->id();
+ $streamId = $tag->id();
} else {
$type = 'A';
- $include_target = -1;
+ $streamId = -1;
}
}
break;
+ }
+
+ switch ($filter_target) {
+ case 'user/-/state/com.google/read':
+ $state = FreshRSS_Entry::STATE_READ;
+ break;
+ case 'user/-/state/com.google/unread':
+ $state = FreshRSS_Entry::STATE_NOT_READ;
+ break;
+ case 'user/-/state/com.google/starred':
+ $state = FreshRSS_Entry::STATE_FAVORITE;
+ break;
default:
- $type = 'A';
+ $state = FreshRSS_Entry::STATE_ALL;
break;
}
switch ($exclude_target) {
case 'user/-/state/com.google/read':
- $state = FreshRSS_Entry::STATE_NOT_READ;
+ $state &= FreshRSS_Entry::STATE_NOT_READ;
break;
case 'user/-/state/com.google/unread':
- $state = FreshRSS_Entry::STATE_READ;
+ $state &= FreshRSS_Entry::STATE_READ;
+ break;
+ case 'user/-/state/com.google/starred':
+ $state &= FreshRSS_Entry::STATE_NOT_FAVORITE;
+ break;
+ }
+
+ $searches = new FreshRSS_BooleanSearch('');
+ if ($start_time != '') {
+ $search = new FreshRSS_Search('');
+ $search->setMinDate($start_time);
+ $searches->add($search);
+ }
+ if ($stop_time != '') {
+ $search = new FreshRSS_Search('');
+ $search->setMaxDate($stop_time);
+ $searches->add($search);
+ }
+
+ return array($type, $streamId, $state, $searches);
+}
+
+function streamContents($path, $include_target, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation) {
+//http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI
+//http://blog.martindoms.com/2009/10/16/using-the-google-reader-api-part-2/#feed
+ header('Content-Type: application/json; charset=UTF-8');
+
+ switch ($path) {
+ case 'reading-list':
+ $type = 'A';
+ break;
+ case 'starred':
+ $type = 's';
+ break;
+ case 'feed':
+ $type = 'f';
+ break;
+ case 'label':
+ $type = 'c';
break;
default:
- $state = FreshRSS_Entry::STATE_ALL;
+ $type = 'A';
break;
}
+ list($type, $include_target, $state, $searches) = streamContentsFilters($type, $include_target, $filter_target, $exclude_target, $start_time, $stop_time);
+
if ($continuation != '') {
$count++; //Shift by one element
}
$entryDAO = FreshRSS_Factory::createEntryDao();
- $entries = $entryDAO->listWhere($type, $include_target, $state, $order === 'o' ? 'ASC' : 'DESC', $count, $continuation, new FreshRSS_BooleanSearch(''), $start_time);
+ $entries = $entryDAO->listWhere($type, $include_target, $state, $order === 'o' ? 'ASC' : 'DESC', $count, $continuation, $searches);
$items = entriesToArray($entries);
@@ -614,7 +669,7 @@ function streamContents($path, $include_target, $start_time, $count, $order, $ex
exit();
}
-function streamContentsItemsIds($streamId, $start_time, $count, $order, $exclude_target, $continuation) {
+function streamContentsItemsIds($streamId, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation) {
//http://code.google.com/p/google-reader-api/wiki/ApiStreamItemsIds
//http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI
//http://blog.martindoms.com/2009/10/16/using-the-google-reader-api-part-2/#feed
@@ -622,55 +677,32 @@ function streamContentsItemsIds($streamId, $start_time, $count, $order, $exclude
$id = '';
if ($streamId === 'user/-/state/com.google/reading-list') {
$type = 'A';
- } elseif ('user/-/state/com.google/starred') {
+ } elseif ($streamId === 'user/-/state/com.google/starred') {
$type = 's';
} elseif (strpos($streamId, 'feed/') === 0) {
$type = 'f';
- $id = basename($streamId);
+ $streamId = substr($streamId, 5);
} elseif (strpos($streamId, 'user/-/label/') === 0) {
$type = 'c';
- $c_name = substr($streamId, 13);
- $categoryDAO = FreshRSS_Factory::createCategoryDao();
- $cat = $categoryDAO->searchByName($c_name);
- if ($cat != null) {
- $type = 'c';
- $id = $cat->id();
- } else {
- $tagDAO = FreshRSS_Factory::createTagDao();
- $tag = $tagDAO->searchByName($c_name);
- if ($tag != null) {
- $type = 't';
- $id = $tag->id();
- } else {
- $type = 'A';
- $id = -1;
- }
- }
+ $streamId = substr($streamId, 13);
}
- switch ($exclude_target) {
- case 'user/-/state/com.google/read':
- $state = FreshRSS_Entry::STATE_NOT_READ;
- break;
- default:
- $state = FreshRSS_Entry::STATE_ALL;
- break;
- }
+ list($type, $id, $state, $searches) = streamContentsFilters($type, $streamId, $filter_target, $exclude_target, $start_time, $stop_time);
if ($continuation != '') {
$count++; //Shift by one element
}
$entryDAO = FreshRSS_Factory::createEntryDao();
- $ids = $entryDAO->listIdsWhere($type, $id, $state, $order === 'o' ? 'ASC' : 'DESC', $count, $continuation, new FreshRSS_BooleanSearch(''), $start_time);
+ $ids = $entryDAO->listIdsWhere($type, $id, $state, $order === 'o' ? 'ASC' : 'DESC', $count, $continuation, $searches);
if ($continuation != '') {
array_shift($ids); //Discard first element that was already sent in the previous response
$count--;
}
- if (empty($ids)) { //For News+ bug https://github.com/noinnion/newsplus/issues/84#issuecomment-57834632
- $ids[] = 0;
+ if (empty($ids) && isset($_GET['client']) && $_GET['client'] === 'newsplus') {
+ $ids[] = 0; //For News+ bug https://github.com/noinnion/newsplus/issues/84#issuecomment-57834632
}
$itemRefs = array();
foreach ($ids as $id) {
@@ -697,7 +729,10 @@ function streamContentsItems($e_ids, $order) {
header('Content-Type: application/json; charset=UTF-8');
foreach ($e_ids as $i => $e_id) {
- $e_ids[$i] = hex2dec(basename($e_id)); //Strip prefix 'tag:google.com,2005:reader/item/'
+ if (strpos($e_id, '/') !== null) {
+ $e_id = hex2dec(basename($e_id)); //Strip prefix 'tag:google.com,2005:reader/item/'
+ }
+ $e_ids[$i] = $e_id;
}
$entryDAO = FreshRSS_Factory::createEntryDao();
@@ -717,7 +752,10 @@ function streamContentsItems($e_ids, $order) {
function editTag($e_ids, $a, $r) {
foreach ($e_ids as $i => $e_id) {
- $e_ids[$i] = hex2dec(basename($e_id)); //Strip prefix 'tag:google.com,2005:reader/item/'
+ if (strpos($e_id, '/') !== null) {
+ $e_id = hex2dec(basename($e_id)); //Strip prefix 'tag:google.com,2005:reader/item/'
+ }
+ $e_ids[$i] = $e_id;
}
$entryDAO = FreshRSS_Factory::createEntryDao();
@@ -748,6 +786,7 @@ function editTag($e_ids, $a, $r) {
}
}
if ($tagName != '') {
+ $tagName = htmlspecialchars($tagName, ENT_COMPAT, 'UTF-8');
$tag = $tagDAO->searchByName($tagName);
if ($tag == null) {
$tagDAO->addTag(array('name' => $tagName));
@@ -771,6 +810,7 @@ function editTag($e_ids, $a, $r) {
default:
if (strpos($r, 'user/-/label/') === 0) {
$tagName = substr($r, 13);
+ $tagName = htmlspecialchars($tagName, ENT_COMPAT, 'UTF-8');
$tag = $tagDAO->searchByName($tagName);
if ($tag != null) {
foreach ($e_ids as $e_id) {
@@ -788,7 +828,9 @@ function renameTag($s, $dest) {
if ($s != '' && strpos($s, 'user/-/label/') === 0 &&
$dest != '' && strpos($dest, 'user/-/label/') === 0) {
$s = substr($s, 13);
+ $s = htmlspecialchars($s, ENT_COMPAT, 'UTF-8');
$dest = substr($dest, 13);
+ $dest = htmlspecialchars($dest, ENT_COMPAT, 'UTF-8');
$categoryDAO = FreshRSS_Factory::createCategoryDao();
$cat = $categoryDAO->searchByName($s);
@@ -810,6 +852,7 @@ function renameTag($s, $dest) {
function disableTag($s) {
if ($s != '' && strpos($s, 'user/-/label/') === 0) {
$s = substr($s, 13);
+ $s = htmlspecialchars($s, ENT_COMPAT, 'UTF-8');
$categoryDAO = FreshRSS_Factory::createCategoryDao();
$cat = $categoryDAO->searchByName($s);
if ($cat != null) {
@@ -838,6 +881,7 @@ function markAllAsRead($streamId, $olderThanId) {
$entryDAO->markReadFeed($f_id, $olderThanId);
} elseif (strpos($streamId, 'user/-/label/') === 0) {
$c_name = substr($streamId, 13);
+ $c_name = htmlspecialchars($c_name, ENT_COMPAT, 'UTF-8');
$categoryDAO = FreshRSS_Factory::createCategoryDao();
$cat = $categoryDAO->searchByName($c_name);
if ($cat != null) {
@@ -902,12 +946,14 @@ if (count($pathInfos) < 3) {
* exclude items from a particular feed (obviously not useful in this
* request, but xt appears in other listing requests). */
$exclude_target = isset($_GET['xt']) ? $_GET['xt'] : '';
+ $filter_target = isset($_GET['it']) ? $_GET['it'] : '';
$count = isset($_GET['n']) ? intval($_GET['n']) : 20; //n=[integer] : The maximum number of results to return.
$order = isset($_GET['r']) ? $_GET['r'] : 'd'; //r=[d|n|o] : Sort order of item results. d or n gives items in descending date order, o in ascending order.
/* ot=[unix timestamp] : The time from which you want to retrieve
* items. Only items that have been crawled by Google Reader after
* this time will be returned. */
$start_time = isset($_GET['ot']) ? intval($_GET['ot']) : 0;
+ $stop_time = isset($_GET['nt']) ? intval($_GET['nt']) : 0;
/* Continuation token. If a StreamContents response does not represent
* all items in a timestamp range, it will have a continuation attribute.
* The same request can be re-issued with the value of that attribute put
@@ -920,23 +966,31 @@ if (count($pathInfos) < 3) {
if (isset($pathInfos[7])) {
if ($pathInfos[6] === 'feed') {
$include_target = $pathInfos[7];
- StreamContents($pathInfos[6], $include_target, $start_time, $count, $order, $exclude_target, $continuation);
+ if ($include_target != '' && !ctype_digit($include_target)) {
+ $include_target = empty($_SERVER['REQUEST_URI']) ? '' : $_SERVER['REQUEST_URI'];
+ if (preg_match('#/reader/api/0/stream/contents/feed/([A-Za-z0-9\'!*()%$_.~+-]+)#', $include_target, $matches) && isset($matches[1])) {
+ $include_target = urldecode($matches[1]);
+ } else {
+ $include_target = '';
+ }
+ }
+ streamContents($pathInfos[6], $include_target, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation);
} elseif ($pathInfos[6] === 'user' && isset($pathInfos[8]) && isset($pathInfos[9])) {
if ($pathInfos[8] === 'state') {
if ($pathInfos[9] === 'com.google' && isset($pathInfos[10])) {
if ($pathInfos[10] === 'reading-list' || $pathInfos[10] === 'starred') {
$include_target = '';
- streamContents($pathInfos[10], $include_target, $start_time, $count, $order, $exclude_target, $continuation);
+ streamContents($pathInfos[10], $include_target, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation);
}
}
} elseif ($pathInfos[8] === 'label') {
$include_target = $pathInfos[9];
- streamContents($pathInfos[8], $include_target, $start_time, $count, $order, $exclude_target, $continuation);
+ streamContents($pathInfos[8], $include_target, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation);
}
}
} else { //EasyRSS
$include_target = '';
- streamContents('reading-list', $include_target, $start_time, $count, $order, $exclude_target, $continuation);
+ streamContents('reading-list', $include_target, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation);
}
} elseif ($pathInfos[5] === 'items') {
if ($pathInfos[6] === 'ids' && isset($_GET['s'])) {
@@ -944,7 +998,7 @@ if (count($pathInfos) < 3) {
* be repeated to fetch the item IDs from multiple streams at once
* (more efficient from a backend perspective than multiple requests). */
$streamId = $_GET['s'];
- streamContentsItemsIds($streamId, $start_time, $count, $order, $exclude_target, $continuation);
+ streamContentsItemsIds($streamId, $start_time, $stop_time, $count, $order, $filter_target, $exclude_target, $continuation);
} else if ($pathInfos[6] === 'contents' && isset($_POST['i'])) { //FeedMe
$e_ids = multiplePosts('i'); //item IDs
streamContentsItems($e_ids, $order);
diff --git a/p/api/index.php b/p/api/index.php
index 108841819..ee37b794b 100644
--- a/p/api/index.php
+++ b/p/api/index.php
@@ -2,13 +2,13 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB">
<head>
<meta charset="UTF-8" />
-<title>FreshRSS API</title>
+<title>FreshRSS API endpoints</title>
<meta name="robots" content="noindex" />
<link rel="start" href="../i/" />
</head>
<body>
-<h1>FreshRSS API</h1>
+<h1>FreshRSS API endpoints</h1>
<h2>Google Reader compatible API</h2>
<dl>
diff --git a/p/api/pshb.php b/p/api/pshb.php
index ac78bfd74..b6f03593d 100644
--- a/p/api/pshb.php
+++ b/p/api/pshb.php
@@ -79,7 +79,7 @@ if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'subscribe') {
}
$hubJson['lease_start'] = time();
if (!isset($hubJson['error'])) {
- $hubJson['error'] = true; //Do not assume that PubSubHubbub works until the first successul push
+ $hubJson['error'] = true; //Do not assume that WebSub works until the first successul push
}
file_put_contents('./!hub.json', json_encode($hubJson));
header('Connection: close');
@@ -162,5 +162,5 @@ if ($nb === 0) {
file_put_contents('./!hub.json', json_encode($hubJson));
}
-Minz_Log::notice('PubSubHubbub ' . $self . ' done: ' . $nb, PSHB_LOG);
+Minz_Log::notice('WebSub ' . $self . ' done: ' . $nb, PSHB_LOG);
exit('Done: ' . $nb . "\n");
diff --git a/p/scripts/jquery.sticky-kit.min.js b/p/scripts/jquery.sticky-kit.min.js
deleted file mode 100644
index e2a3c6de9..000000000
--- a/p/scripts/jquery.sticky-kit.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
-*/
-(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));
-if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("<div />"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,
-u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,c=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),
-h.detach()),b={position:"",width:"",top:""},a.css(b).removeClass(t).trigger("sticky_kit:unstick")),B&&(b=f.height(),u+q>b&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),
-a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",
-y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n<K;n++)d=this[n],J(b(d));return this}}).call(this);
diff --git a/p/scripts/main.js b/p/scripts/main.js
index f96828048..4ba329dc1 100644
--- a/p/scripts/main.js
+++ b/p/scripts/main.js
@@ -237,29 +237,29 @@ function mark_favorite(active) {
});
}
-function toggleContent(new_active, old_active) {
+function toggleContent(new_active, old_active, skipping) {
+ // If skipping, move current without activating or marking as read
if (new_active.length === 0) {
return;
}
- if (context.does_lazyload) {
+ if (context.does_lazyload && !skipping) {
new_active.find('img[data-original], iframe[data-original]').each(function () {
- this.onload = function () { $(document.body).trigger("sticky_kit:recalc"); };
this.setAttribute('src', this.getAttribute('data-original'));
this.removeAttribute('data-original');
});
}
if (old_active[0] !== new_active[0]) {
- if (isCollapsed) {
+ if (isCollapsed && !skipping) { // BUG?: isCollapsed can only ever be true
new_active.addClass("active");
}
old_active.removeClass("active current");
new_active.addClass("current");
- if (context.auto_remove_article && !old_active.hasClass('not_read')) {
+ if (context.auto_remove_article && !old_active.hasClass('not_read') && !skipping) {
auto_remove(old_active);
}
- } else {
+ } else { // collapse_entry calls toggleContent(flux_current, flux_current, false)
new_active.toggleClass('active');
}
@@ -278,6 +278,10 @@ function toggleContent(new_active, old_active) {
}
}
+ if (skipping) {
+ // when skipping, this feels more natural if it's not so near the top
+ new_pos -= $(window).height() / 4;
+ }
if (context.hide_posts) {
if (relative_move) {
new_pos += old_scroll;
@@ -295,7 +299,7 @@ function toggleContent(new_active, old_active) {
}
}
- if (context.auto_mark_article && new_active.hasClass('active')) {
+ if (context.auto_mark_article && new_active.hasClass('active') && !skipping) {
mark_read(new_active, true);
}
}
@@ -313,13 +317,29 @@ function auto_remove(element) {
function prev_entry() {
var old_active = $(".flux.current"),
new_active = old_active.length === 0 ? $(".flux:last") : old_active.prevAll(".flux:first");
- toggleContent(new_active, old_active);
+ toggleContent(new_active, old_active, false);
}
function next_entry() {
var old_active = $(".flux.current"),
new_active = old_active.length === 0 ? $(".flux:first") : old_active.nextAll(".flux:first");
- toggleContent(new_active, old_active);
+ toggleContent(new_active, old_active, false);
+
+ if (new_active.nextAll().length < 3) {
+ load_more_posts();
+ }
+}
+
+function skip_prev_entry() {
+ var old_active = $(".flux.current"),
+ new_active = old_active.length === 0 ? $(".flux:last") : old_active.prevAll(".flux:first");
+ toggleContent(new_active, old_active, true);
+}
+
+function skip_next_entry() {
+ var old_active = $(".flux.current"),
+ new_active = old_active.length === 0 ? $(".flux:first") : old_active.nextAll(".flux:first");
+ toggleContent(new_active, old_active, true);
if (new_active.nextAll().length < 3) {
load_more_posts();
@@ -402,7 +422,7 @@ function last_category() {
function collapse_entry() {
var flux_current = $(".flux.current");
- toggleContent(flux_current, flux_current);
+ toggleContent(flux_current, flux_current, false);
}
function user_filter(key) {
@@ -507,29 +527,8 @@ function init_posts() {
}
}
-function inject_script(name) {
- var script = document.createElement('script');
- script.async = 'async';
- script.defer = 'defer';
- script.src = '../scripts/' + name;
- document.head.appendChild(script);
-}
-
-function init_sticky_column() {
- if (!window.$ || !window.$.fn.stick_in_parent) {
- if (window.console) {
- console.log('FreshRSS waiting for Sticky-kit…');
- }
- window.setTimeout(init_sticky_column, 200);
- return;
- }
- if ($('.toggle_aside').css('display') === 'none') {
- $('#aside_feed .tree').stick_in_parent({parent:'#aside_feed'});
- }
-}
-
function init_column_categories() {
- if (context.current_view !== 'normal') {
+ if (context.current_view !== 'normal' && context.current_view !== 'reader') {
return;
}
@@ -543,38 +542,43 @@ function init_column_categories() {
this.alt = '▽';
}
});
- $(this).parent().next(".tree-folder-items").slideToggle(300 , function() { $(document.body).trigger("sticky_kit:recalc"); });
+ $(this).parent().next(".tree-folder-items").slideToggle(300, function () {
+ //Workaround for Gecko bug in Firefox 64-65(+?):
+ var sidebar = document.getElementById('sidebar');
+ if (sidebar && sidebar.scrollHeight > sidebar.clientHeight && //if needs scrollbar
+ sidebar.scrollWidth >= sidebar.offsetWidth) { //but no scrollbar
+ sidebar.style['overflow-y'] = 'scroll'; //then force scrollbar
+ setTimeout(function () { sidebar.style['overflow-y'] = ''; }, 0);
+ }
+ });
return false;
});
+
$('#aside_feed').on('click', '.tree-folder-items .feed .dropdown-toggle', function () {
- if ($(this).nextAll('.dropdown-menu').length === 0) {
- var itemId = $(this).closest('.item').attr('id'),
- templateId = itemId.substring(0, 2) === 't_' ? 'tag_config_template' : 'feed_config_template',
- id = itemId.substr(2),
- feed_web = $(this).data('fweb'),
- template = $('#' + templateId)
- .html().replace(/------/g, id).replace('http://example.net/', feed_web);
+ var itemId = $(this).closest('.item').attr('id'),
+ templateId = itemId.substring(0, 2) === 't_' ? 'tag_config_template' : 'feed_config_template',
+ id = itemId.substr(2),
+ feed_web = $(this).data('fweb'),
+ template = $('#' + templateId)
+ .html().replace(/------/g, id).replace('http://example.net/', feed_web);
+ if ($(this).next('.dropdown-menu').length === 0) {
$(this).attr('href', '#dropdown-' + id).prev('.dropdown-target').attr('id', 'dropdown-' + id).parent()
.append(template).find('button.confirm').removeAttr('disabled');
- $('.tree-folder-items .dropdown-close a').click(function(){
- $('.tree').removeClass('treepadding');
- $(document.body).trigger("sticky_kit:recalc");
- });
+ } else {
+ if ($(this).next('.dropdown-menu').css('display') === 'none') {
+ id = $(this).closest('.item').attr('id').substr(2);
+ $(this).attr('href', '#dropdown-' + id);
+ } else {
+ $(this).attr('href', "#close");
+ }
}
});
-
- $('.tree-folder-items .dropdown-toggle').click(function(){
- $('.tree').addClass('treepadding');
- $(document.body).trigger("sticky_kit:recalc");
- });
-
- init_sticky_column();
}
function init_shortcuts() {
if (!(window.shortcut && window.shortcuts)) {
if (window.console) {
- console.log('FreshRSS waiting for sortcut.js…');
+ console.log('FreshRSS waiting for shortcut.js…');
}
window.setTimeout(init_shortcuts, 200);
return;
@@ -637,12 +641,15 @@ function init_shortcuts() {
shortcut.add(shortcuts.prev_entry, prev_entry, {
'disable_in_input': true
});
+ shortcut.add(shortcuts.skip_prev_entry, skip_prev_entry, {
+ 'disable_in_input': true
+ });
shortcut.add(shortcuts.first_entry, function () {
var old_active = $(".flux.current"),
first = $(".flux:first");
if (first.hasClass("flux")) {
- toggleContent(first, old_active);
+ toggleContent(first, old_active, false);
}
}, {
'disable_in_input': true
@@ -650,12 +657,15 @@ function init_shortcuts() {
shortcut.add(shortcuts.next_entry, next_entry, {
'disable_in_input': true
});
+ shortcut.add(shortcuts.skip_next_entry, skip_next_entry, {
+ 'disable_in_input': true
+ });
shortcut.add(shortcuts.last_entry, function () {
var old_active = $(".flux.current"),
last = $(".flux:last");
if (last.hasClass("flux")) {
- toggleContent(last, old_active);
+ toggleContent(last, old_active, false);
}
}, {
'disable_in_input': true
@@ -752,7 +762,7 @@ function init_shortcuts() {
function init_stream(divStream) {
divStream.on('click', '.flux_header,.flux_content', function (e) { //flux_toggle
- if ($(e.target).closest('.keep_unread, .content, .item.website, .item.link, .dropdown-menu').length > 0) {
+ if ($(e.target).closest('.content, .item.website, .item.link, .dropdown-menu').length > 0) {
return;
}
if (!context.sides_close_article && $(e.target).is('div.flux_content')) {
@@ -768,7 +778,7 @@ function init_stream(divStream) {
}
return true;
}
- toggleContent(new_active, old_active);
+ toggleContent(new_active, old_active, false);
});
divStream.on('click', '.flux a.read', function () {
@@ -827,8 +837,10 @@ function init_stream(divStream) {
}
}
+var $nav_entries = null;
+
function init_nav_entries() {
- var $nav_entries = $('#nav_entries');
+ $nav_entries = $('#nav_entries');
$nav_entries.find('.previous_entry').click(function () {
prev_entry();
return false;
@@ -1166,7 +1178,6 @@ function load_more_posts() {
$('#load_more').removeClass('loading');
$('#bigMarkAsRead').removeAttr('disabled');
load_more = false;
- $(document.body).trigger('sticky_kit:recalc');
});
}
@@ -1259,8 +1270,6 @@ function init_crypto_form() {
}
//</crypto form (Web login)>
-
-
function init_confirm_action() {
$('body').on('click', '.confirm', function () {
var str_confirmation = $(this).attr('data-str-confirm');
@@ -1274,13 +1283,13 @@ function init_confirm_action() {
}
function init_print_action() {
- $('.item.share > a[href="#"]').click(function () {
+ $('.item.share > a[href="#"]').click(function (e) {
var content = "<html><head><style>" +
"body { font-family: Serif; text-align: justify; }" +
"a { color: #000; text-decoration: none; }" +
"a:after { content: ' [' attr(href) ']'}" +
"</style></head><body>" +
- $(".flux.current .content").html() +
+ $(e.target).closest('.flux_content').find('.content').html() +
"</body></html>";
var tmp_window = window.open();
@@ -1509,7 +1518,6 @@ function init_beforeDOM() {
return;
}
if (['normal', 'reader', 'global'].indexOf(context.current_view) >= 0) {
- inject_script('jquery.sticky-kit.min.js');
init_normal();
}
}
diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css
index 164088f4b..94eb8e3a8 100644
--- a/p/themes/BlueLagoon/BlueLagoon.css
+++ b/p/themes/BlueLagoon/BlueLagoon.css
@@ -137,8 +137,6 @@ button.as-link[disabled] {
.stick .btn:first-child,.stick input:first-child {
border-radius: 6px 0 0 6px;
}
-.stick .btn-important:first-child {
-}
.stick .btn:last-child, .stick input:last-child {
border-radius: 0 6px 6px 0;
}
@@ -566,11 +564,29 @@ a.btn {
color: #0090FF
}
+/*=== Scrollbar */
+
+@supports (scrollbar-width: thin) {
+ #sidebar {
+ scrollbar-color: rgba(255, 255, 255, 0.05) rgba(0, 0, 0, 0.0);
+ }
+ #sidebar:hover {
+ scrollbar-color: rgba(255, 255, 255, 0.3) rgba(0, 0, 0, 0.0);
+ }
+}
+@supports not (scrollbar-width: thin) {
+ #sidebar::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.1);
+ }
+ #sidebar:hover::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.3);
+ }
+}
+
/*=== STRUCTURE */
/*===============*/
/*=== Header */
.header {
- height: 55px;
background: linear-gradient(0deg, #EDE7DE 0%, #FFF 100%) #EDE7DE;
background: -webkit-linear-gradient(bottom, #EDE7DE 0%, #FFF 100%);
border-bottom: solid 1px #BDB7AE;
@@ -582,14 +598,14 @@ a.btn {
text-align: center;
}
.header > .item.title .logo {
- height: 60px;
- width: 60px;
+ height: 40px;
+ width: 40px;
}
.header > .item.title{
width: 250px;
}
.header > .item.title h1 {
- margin: 0.5em 0;
+ margin: 10px 0;
}
.header > .item.title h1 a {
text-decoration: none;
@@ -607,7 +623,8 @@ a.btn {
/*=== Body */
#global {
background:#F9F7F4;
- height: calc(100% - 60px);
+ /* Header : 60px + 1px border bottom */
+ height: calc(100% - 61px);
}
.aside {
box-shadow: 0 2px 2px #171717 inset;
diff --git a/p/themes/BlueLagoon/icons/icon.svg b/p/themes/BlueLagoon/icons/icon.svg
index 8abfea179..777e85de1 100644
--- a/p/themes/BlueLagoon/icons/icon.svg
+++ b/p/themes/BlueLagoon/icons/icon.svg
@@ -1,5 +1,5 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 59.4 59.7">
<defs>
<linearGradient id="linearGradient3796">
<stop stop-color="#0090ff" offset="0"/>
diff --git a/p/themes/BlueLagoon/template.css b/p/themes/BlueLagoon/template.css
deleted file mode 100644
index 4bc0fb735..000000000
--- a/p/themes/BlueLagoon/template.css
+++ /dev/null
@@ -1,696 +0,0 @@
-@charset "UTF-8";
-
-/*=== GENERAL */
-/*============*/
-html, body {
- margin: 0;
- padding: 0;
- font-size: 92%;
-}
-
-/*=== Links */
-a {
- text-decoration: none;
-}
-a:hover {
- text-decoration: underline;
-}
-
-/*=== Lists */
-ul, ol, dd {
- margin: 0;
- padding: 0;
-}
-
-/*=== Titles */
-h1 {
- margin: 0.6em 0 0.3em;
- font-size: 1.5em;
- line-height: 1.6em;
-}
-h2 {
- margin: 0.5em 0 0.25em;
- font-size: 1.3em;
- line-height: 2em;
-}
-h3 {
- margin: 0.5em 0 0.25em;
- font-size: 1.1em;
- line-height: 2em;
-}
-
-/*=== Paragraphs */
-p {
- margin: 1em 0 0.5em;
- font-size: 1em;
-}
-
-/*=== Images */
-img {
- height: auto;
- max-width: 100%;
-}
-img.favicon {
- height: 16px;
- width: 16px;
- vertical-align: middle;
-}
-
-/*=== Videos */
-iframe, embed, object, video {
- max-width: 100%;
-}
-
-/*=== Forms */
-legend {
- display: block;
- width: 100%;
- clear: both;
-}
-label {
- display: block;
-}
-input {
- width: 180px;
-}
-textarea {
- width: 300px;
-}
-input, select, textarea {
- display: inline-block;
- max-width: 100%;
- font-size: 0.8rem;
-}
-input[type="radio"],
-input[type="checkbox"] {
- width: 15px !important;
- min-height: 15px !important;
-}
-input.extend:focus {
- width: 300px;
-}
-
-/*=== COMPONENTS */
-/*===============*/
-/*=== Forms */
-.form-group::after {
- content: "";
- display: block;
- clear: both;
-}
-.form-group.form-actions {
- min-width: 250px;
-}
-.form-group .group-name {
- display: block;
- float: left;
- width: 200px;
-}
-.form-group .group-controls {
- min-width: 250px;
- margin: 0 0 0 220px;
-}
-.form-group .group-controls .control {
- display: block;
-}
-
-/*=== Buttons */
-.stick {
- display: inline-block;
- white-space: nowrap;
-}
-.btn,
-a.btn {
- display: inline-block;
- cursor: pointer;
- overflow: hidden;
-}
-.btn-important {
- font-weight: bold;
-}
-
-/*=== Navigation */
-.nav-list .nav-header,
-.nav-list .item {
- display: block;
-}
-.nav-list .item,
-.nav-list .item > a {
- display: block;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-.nav-head {
- display: block;
-}
-.nav-head .item {
- display: inline-block;
-}
-
-/*=== Horizontal-list */
-.horizontal-list {
- display: table;
- table-layout: fixed;
- width: 100%;
-}
-.horizontal-list .item {
- display: table-cell;
-}
-
-/*=== Dropdown */
-.dropdown {
- position: relative;
- display: inline-block;
-}
-.dropdown-target {
- display: none;
-}
-.dropdown-menu {
- display: none;
- min-width: 200px;
- margin: 0;
- position: absolute;
- right: 0;
- background: #fff;
- border: 1px solid #aaa;
-}
-.dropdown-header {
- display: block;
-}
-.dropdown-menu > .item {
- display: block;
-}
-.dropdown-menu > .item > a,
-.dropdown-menu > .item > span {
- display: block;
-}
-.dropdown-menu > .item[aria-checked="true"] > a::before {
- content: '✓';
-}
-.dropdown-menu .input {
- display: block;
-}
-.dropdown-menu .input select,
-.dropdown-menu .input input {
- display: block;
- max-width: 95%;
-}
-.dropdown-target:target ~ .dropdown-menu {
- display: block;
- z-index: 10;
-}
-.dropdown-close {
- display: inline;
-}
-.dropdown-close a {
- font-size: 0;
- position: fixed;
- top: 0; bottom: 0;
- left: 0; right: 0;
- display: block;
- z-index: -10;
-}
-.separator {
- display: block;
- height: 0;
- border-bottom: 1px solid #aaa;
-}
-
-/*=== Alerts */
-.alert {
- display: block;
- width: 90%;
-}
-.group-controls .alert {
- width: 100%
-}
-.alert-head {
- margin: 0;
- font-weight: bold;
-}
-.alert ul {
- margin: 5px 20px;
-}
-
-/*=== Icons */
-.icon {
- display: inline-block;
- width: 16px;
- height: 16px;
- vertical-align: middle;
- line-height: 16px;
-}
-
-/*=== Pagination */
-.pagination {
- display: table;
- width: 100%;
- margin: 0;
- padding: 0;
- table-layout: fixed;
-}
-.pagination .item {
- display: table-cell;
-}
-.pagination .pager-first,
-.pagination .pager-previous,
-.pagination .pager-next,
-.pagination .pager-last {
- width: 100px;
-}
-
-/*=== STRUCTURE */
-/*===============*/
-/*=== Header */
-.header {
- display: table;
- width: 100%;
- table-layout: fixed;
-}
-.header > .item {
- display: table-cell;
-}
-.header > .item.title {
- width: 250px;
- white-space: nowrap;
-}
-.header > .item.title h1 {
- display: inline-block;
-}
-.header > .item.title .logo {
- display: inline-block;
- height: 32px;
- width: 32px;
- vertical-align: middle;
-}
-.header > .item.configure {
- width: 100px;
-}
-
-/*=== Body */
-#global {
- display: table;
- width: 100%;
- height: 100%;
- table-layout: fixed;
-}
-.aside {
- display: table-cell;
- height: 100%;
- width: 250px;
- vertical-align: top;
-}
-.aside.aside_flux {
- background: #fff;
-}
-
-/*=== Aside main page (categories) */
-.categories {
- list-style: none;
- margin: 0;
-}
-.category {
- display: block;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-.category .btn:not([data-unread="0"])::after {
- content: attr(data-unread);
-}
-
-/*=== Aside main page (feeds) */
-.categories .feeds {
- width: 100%;
- list-style: none;
-}
-.categories .feeds:not(.active) {
- display: none;
-}
-.categories .feeds .feed {
- display: inline-block;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- vertical-align: middle;
-}
-.categories .feeds .feed:not([data-unread="0"])::before {
- content: "(" attr(data-unread) ") ";
-}
-.categories .feeds .dropdown-menu {
- left: 0;
-}
-.categories .feeds .item .dropdown-toggle > .icon {
- visibility: hidden;
- cursor: pointer;
- vertical-align: top;
-}
-.categories .feeds .item .dropdown-target:target ~ .dropdown-toggle > .icon,
-.categories .feeds .item:hover .dropdown-toggle > .icon,
-.categories .feeds .item.active .dropdown-toggle > .icon {
- visibility: visible;
-}
-
-/*=== New article notification */
-#new-article {
- display: none;
-}
-#new-article > a {
- display: block;
-}
-
-/*=== Day indication */
-.day .name {
- position: absolute;
- right: 0;
- width: 50%;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-/*=== Feed article header and footer */
-.flux_header {
- position: relative;
-}
-.flux .item {
- line-height: 40px;
- white-space: nowrap;
-}
-.flux .item.manage,
-.flux .item.link {
- width: 40px;
- text-align: center;
-}
-.flux .item.website {
- width: 200px;
-}
-.flux.not_read .item.title,
-.flux.current .item.title {
- font-weight: bold;
-}
-.flux:not(.current):hover .item.title {
- position: absolute;
- max-width: calc(100% - 320px);
- background: #fff;
-}
-.flux .item.title a {
- color: #000;
- text-decoration: none;
-}
-.flux .item.date {
- width: 145px;
- text-align: right;
-}
-.flux .item > a {
- display: block;
-}
-.flux .item > a {
- display: block;
- text-decoration: none;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-.flux .item.share > a {
- display: list-item;
- list-style-position: inside;
- list-style-type: decimal;
-}
-
-/*=== Feed article content */
-.hide_posts > .flux:not(.active) > .flux_content {
- display: none;
-}
-.content {
- min-height: 20em;
- margin: auto;
- line-height: 1.7em;
- word-wrap: break-word;
-}
-.content.large {
- max-width: 1000px;
-}
-.content.medium {
- max-width: 800px;
-}
-.content.thin {
- max-width: 550px;
-}
-.content ul,
-.content ol,
-.content dd {
- margin: 0 0 0 15px;
- padding: 0 0 5px 15px;
-}
-.content pre {
- overflow: auto;
-}
-
-/*=== Notification and actualize notification */
-.notification {
- position: absolute;
- top: 1em;
- left: 25%; right: 25%;
- z-index: 10;
- background: #fff;
- border: 1px solid #aaa;
-}
-.notification.closed {
- display: none;
-}
-.notification a.close {
- position: absolute;
- top: 0; bottom: 0;
- right: 0;
- display: inline-block;
-}
-
-#actualizeProgress {
- position: fixed;
-}
-#actualizeProgress progress {
- max-width: 100%;
- vertical-align: middle;
-}
-#actualizeProgress .progress {
- vertical-align: middle;
-}
-
-/*=== Navigation menu (for articles) */
-#nav_entries {
- position: fixed;
- bottom: 0; left: 0;
- display: table;
- width: 250px;
- background: #fff;
- table-layout: fixed;
-}
-#nav_entries .item {
- display: table-cell;
- width: 30%;
-}
-#nav_entries a {
- display: block;
-}
-
-/*=== "Load more" part */
-#load_more {
- min-height: 40px;
-}
-.loading {
- background: url("loader.gif") center center no-repeat;
- font-size: 0;
-}
-#bigMarkAsRead {
- display: block;
- padding: 3em 0;
- text-align: center;
-}
-.bigTick {
- font-size: 7em;
- line-height: 1.6em;
-}
-
-/*=== Statistiques */
-.stat > table {
- width: 100%;
-}
-
-/*=== GLOBAL VIEW */
-/*================*/
-/*=== Category boxes */
-#stream.global .box-category {
- display: inline-block;
- width: 19em;
- max-width: 95%;
- margin: 20px 10px;
- border: 1px solid #ccc;
- vertical-align: top;
-}
-#stream.global .category {
- width: 100%;
-}
-#stream.global .btn {
- display: block;
-}
-#stream.global .box-category .feeds {
- display: block;
- overflow: auto;
-}
-#stream.global .box-category .feed {
- width: 19em;
- max-width: 90%;
-}
-
-/*=== Panel */
-#overlay {
- display: none;
- position: fixed;
- top: 0; bottom: 0;
- left: 0; right: 0;
- background: rgba(0, 0, 0, 0.9);
-}
-#panel {
- display: none;
- position: fixed;
- top: 1em; bottom: 1em;
- left: 2em; right: 2em;
- overflow: auto;
- background: #fff;
-}
-#panel .close {
- position: fixed;
- top: 0; bottom: 0;
- left: 0; right: 0;
- display: block;
-}
-#panel .close img {
- display: none;
-}
-
-/*=== DIVERS */
-/*===========*/
-.nav-login,
-.nav_menu .search,
-.nav_menu .toggle_aside {
- display: none;
-}
-
-.aside .toggle_aside {
- position: absolute;
- right: 0;
- display: none;
- width: 30px;
- height: 30px;
- line-height: 30px;
- text-align: center;
-}
-
-/*=== MOBILE */
-/*===========*/
-@media(max-width: 840px) {
- .header,
- .aside .btn-important,
- .aside .feeds .dropdown,
- .flux_header .item.website span,
- .item.date, .day .date,
- .dropdown-menu > .no-mobile,
- .no-mobile {
- display: none;
- }
- .nav-login {
- display: block;
- }
- .nav_menu .toggle_aside,
- .aside .toggle_aside,
- .nav_menu .search,
- #panel .close img {
- display: inline-block;
- }
-
- .aside {
- position: fixed;
- top: 0; bottom: 0;
- left: 0;
- width: 0;
- overflow: hidden;
- z-index: 100;
- }
- .aside:target {
- width: 90%;
- overflow: auto;
- }
- .aside .categories {
- margin: 10px 0 75px;
- }
-
- .flux_header .item.website {
- width: 40px;
- }
-
- .flux:not(.current):hover .item.title {
- position: relative;
- width: auto;
- white-space: nowrap;
- }
-
- .notification {
- top: 0;
- left: 0;
- right: 0;
- }
-
- #nav_entries {
- width: 100%;
- }
-
- #stream.global .box-category {
- margin: 10px 0;
- }
-
- #panel {
- top: 0; bottom: 0;
- left: 0; right: 0;
- }
- #panel .close {
- top: 0; right: 0;
- left: auto; bottom: auto;
- display: inline-block;
- width: 30px;
- height: 30px;
- }
-}
-
-/*=== PRINTER */
-/*============*/
-@media print {
- .header, .aside,
- .nav_menu, .day,
- .flux_header,
- .flux_content .bottom,
- .pagination,
- #nav_entries {
- display: none;
- }
- html, body {
- background: #fff;
- color: #000;
- font-family: Serif;
- }
- #global,
- .flux_content {
- display: block !important;
- }
- .flux_content .content {
- width: 100% !important;
- }
- .flux_content .content a {
- color: #000;
- }
- .flux_content .content a::after {
- content: " [" attr(href) "] ";
- font-style: italic;
- }
-}
diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css
index 31ff514a2..28ea253ff 100644
--- a/p/themes/Dark/dark.css
+++ b/p/themes/Dark/dark.css
@@ -502,6 +502,24 @@ a.btn {
color: #888;
}
+/*=== Scrollbar */
+@supports (scrollbar-width: thin) {
+ #sidebar {
+ scrollbar-color: rgba(255, 255, 255, 0.05) rgba(0, 0, 0, 0.0);
+ }
+ #sidebar:hover {
+ scrollbar-color: rgba(255, 255, 255, 0.3) rgba(0, 0, 0, 0.0);
+ }
+}
+@supports not (scrollbar-width: thin) {
+ #sidebar::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.1);
+ }
+ #sidebar:hover::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.3);
+ }
+}
+
/*=== STRUCTURE */
/*===============*/
/*=== Header */
diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css
index be047a394..1c5c3e795 100644
--- a/p/themes/Flat/flat.css
+++ b/p/themes/Flat/flat.css
@@ -505,6 +505,24 @@ a.btn {
color: #fff;
}
+/*=== Scrollbar */
+@supports (scrollbar-width: thin) {
+ #sidebar {
+ scrollbar-color: rgba(255, 255, 255, 0.05) rgba(0, 0, 0, 0.0);
+ }
+ #sidebar:hover {
+ scrollbar-color: rgba(255, 255, 255, 0.3) rgba(0, 0, 0, 0.0);
+ }
+}
+@supports not (scrollbar-width: thin) {
+ #sidebar::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.1);
+ }
+ #sidebar:hover::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.3);
+ }
+}
+
/*=== STRUCTURE */
/*===============*/
/*=== Header */
diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css
index 26129415a..11f3b3b25 100644
--- a/p/themes/Origine-compact/origine-compact.css
+++ b/p/themes/Origine-compact/origine-compact.css
@@ -167,7 +167,8 @@ form th {
cursor: pointer;
overflow: hidden;
}
-a.btn {
+a.btn,
+.stick .btn {
min-height: 20px;
line-height: 20px;
}
@@ -571,7 +572,7 @@ a.btn {
.header > .item.search input {
width: 230px;
- padding: 1px 5px 0px 5px;
+ padding: 1px 5px;
}
.header .item.search input:focus {
width: 350px;
diff --git a/p/themes/Screwdriver/icons/icon.svg b/p/themes/Screwdriver/icons/icon.svg
index 268814463..b388fa5d3 100644
--- a/p/themes/Screwdriver/icons/icon.svg
+++ b/p/themes/Screwdriver/icons/icon.svg
@@ -1,4 +1,4 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 57.9 58.2">
<defs>
<linearGradient id="linearGradient4149">
<stop stop-color="#d18114" offset="0"/>
diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css
index 1bc49c2db..2576c485f 100644
--- a/p/themes/Screwdriver/screwdriver.css
+++ b/p/themes/Screwdriver/screwdriver.css
@@ -559,6 +559,24 @@ a.btn {
.tree-folder-items > .item.active > a {
}
+/*=== Scrollbar */
+@supports (scrollbar-width: thin) {
+ #sidebar {
+ scrollbar-color: rgba(255, 255, 255, 0.05) rgba(0, 0, 0, 0.0);
+ }
+ #sidebar:hover {
+ scrollbar-color: rgba(255, 255, 255, 0.3) rgba(0, 0, 0, 0.0);
+ }
+}
+@supports not (scrollbar-width: thin) {
+ #sidebar::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.1);
+ }
+ #sidebar:hover::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.3);
+ }
+}
+
/*=== STRUCTURE */
/*===============*/
/*=== Header */
diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css
index 5cab13bd7..24a3ccbed 100644
--- a/p/themes/Swage/swage.css
+++ b/p/themes/Swage/swage.css
@@ -1,1211 +1,1127 @@
-textarea,input,select {
-min-height:25px;
-margin-top:4px;
-line-height:25px;
-vertical-align:middle;
-background:#FCFCFC;
-border:none;
-padding-left:5px
+textarea, input, select {
+min-height: 25px;
+margin-top: 4px;
+line-height: 25px;
+vertical-align: middle;
+background: #FCFCFC;
+border: none;
+padding-left: 5px;
}
-input:invalid,select:invalid {
-color:#B0425B;
-border-color:#B0425B;
-box-shadow:none
+input:invalid, select:invalid {
+color: #B0425B;
+border-color: #B0425B;
+box-shadow: none;
}
-.nav-list .nav-header,.nav-list .item {
-height:2.5em;
-line-height:2.5em;
-font-size:.9rem
+.nav-list .nav-header, .nav-list .item {
+height: 2.5em;
+line-height: 2.5em;
+font-size: 0.9rem;
}
-.dropdown-menu > .item,.dropdown-menu > .item > a,.dropdown-menu > .item > span,.dropdown-menu > .item > as-link,.dropdown-menu > .item button {
-padding:0 22px;
-line-height:2.5em;
-font-size:.8rem;
-color:#FCFCFC
+.dropdown-menu > .item, .dropdown-menu > .item > a, .dropdown-menu > .item > span, .dropdown-menu > .item > as-link, .dropdown-menu > .item button {
+padding: 0 22px;
+line-height: 2.5em;
+font-size: 0.8rem;
+color: #FCFCFC;
}
-.form-group::after,.flux::after {
-content:"";
-display:block;
-clear:both
+.form-group::after, .flux::after {
+content: "";
+display: block;
+clear: both;
}
-html,body {
-height:100%;
-font-family:Helvetica,Arial,sans-serif
+.stick.configure-feeds, .header > .item.title, .aside, #new-article, .notification, #nav_entries {
+width: 231px;
}
-a {
-color:#00488b;
-outline:none
+html, body {
+height: 100%;
+font-family: Helvetica, Arial, sans-serif;
}
+a {
+color: #00488b;
+outline: none;
+}
a.btn {
-min-height:25px;
-line-height:25px;
-text-decoration:none
+min-height: 25px;
+line-height: 25px;
+text-decoration: none;
}
-
a.btn:hover {
-background:#00488b
+background: #00488b;
+}
+a#btn-subscription {
+width: 76%;
+}
+a#btn-importExport {
+width: 5%;
}
img.icon:hover {
-background:none
+background: none;
}
div#stream {
-margin-top:35px
+margin-top: 35px;
}
sup {
-top:-.3em
+top: -0.3em;
}
legend {
-display:inline-block;
-width:auto;
-margin:20px 0 5px;
-padding:5px 20px;
-font-size:1.4em;
-clear:both;
-background:#e3e3e3
+display: inline-block;
+width: auto;
+margin: 20px 0 5px;
+padding: 5px 20px;
+font-size: 1.4em;
+clear: both;
+background: #e3e3e3;
}
label {
-min-height:25px
+min-height: 25px;
}
textarea {
-width:360px;
-height:100px;
-background:#e3e3e3
+width: 360px;
+height: 100px;
+background: #e3e3e3;
}
-
textarea:focus {
-border-color:#00488b
+border-color: #00488b;
}
-input:focus,select:focus {
-border-color:#00488b
+input:focus, select:focus {
+border-color: #00488b;
}
-
-input:disabled,select:disabled {
-background:#FCFCFC
+input:disabled, select:disabled {
+background: #FCFCFC;
}
select {
-background:#e3e3e3
+background: #e3e3e3;
}
input.extend {
-transition:width 200ms linear
+transition: width 200ms linear;
}
option {
-padding:0 .5em
+padding: 0 .5em;
}
table {
-border-collapse:collapse
+border-collapse: collapse;
}
-tr,td,th {
-padding:.5em;
-border:1px solid #e3e3e3
+tr, td, th {
+padding: 0.5em;
+border: 1px solid #e3e3e3;
}
th {
-background:#FCFCFC
+background: #FCFCFC;
}
-form td,form th {
-font-weight:400;
-text-align:center
+form td, form th {
+font-weight: normal;
+text-align: center;
}
.category .title.error::before {
-display:inline-block;
-padding-right:7px;
-width:16px;
-content:url(../Swage/icons/error.svg)
+display: inline-block;
+padding-right: 7px;
+width: 16px;
+content: url(../Swage/icons/error.svg);
}
.form-group {
-padding:5px;
-border:1px solid transparent
+padding: 5px;
+border: 1px solid transparent;
}
-
.form-group:hover {
-background:#FCFCFC;
-border:1px solid #FCFCFC
+background: #FCFCFC;
+border: 1px solid #FCFCFC;
}
-
.form-group.form-actions {
-margin:15px 0 25px;
-padding:5px 0;
-background:#e3e3e3;
-border-top:3px solid #e3e3e3
+margin: 15px 0 25px;
+padding: 5px 0;
+background: #e3e3e3;
+border-top: 3px solid #e3e3e3;
}
-
.form-group.form-actions .btn {
-margin:0 10px
+margin: 0 10px;
}
-
.form-group .group-name {
-padding:10px 0;
-text-align:right
+padding: 10px 0;
+text-align: right;
}
-
.form-group .group-controls {
-min-height:25px;
-padding:5px 0
+min-height: 25px;
+padding: 5px 0;
}
-
.form-group .group-controls .control {
-line-height:2em
+line-height: 2.0em;
}
-
.form-group table {
-margin:10px 0 0 220px
+margin: 10px 0 0 220px;
}
.stick {
-vertical-align:middle;
-font-size:0
+vertical-align: middle;
+font-size: 0;
}
.btn {
-display:inline-block;
-min-height:35px;
-min-width:15px;
-margin:0;
-padding:5px 10px;
-font-size:.9rem;
-vertical-align:middle;
-cursor:pointer;
-overflow:hidden;
-background:#0062be;
-border:none;
-color:#FCFCFC
+display: inline-block;
+min-height: 35px;
+min-width: 15px;
+margin: 0;
+padding: 5px 10px;
+font-size: 0.9rem;
+vertical-align: middle;
+cursor: pointer;
+overflow: hidden;
+background: #0062be;
+border: none;
+color: #FCFCFC;
}
-
-.btn.active,.btn :active,.btn :hover {
-background:#00488b;
-text-decoration:none
+.btn.active, .btn :active, .btn :hover {
+background: #00488b;
+text-decoration: none;
}
-.btn-important,.btn-attention {
-font-weight:400;
-background:#FA8052;
-color:#FCFCFC
+.btn-important, .btn-attention {
+font-weight: normal;
+background: #FA8052;
+color: #FCFCFC;
}
-
-.btn-important:hover,.btn-important :active,.btn-attention:hover,.btn-attention :active {
-background:#f95c20!important
+.btn-important:hover, .btn-important :active, .btn-attention:hover, .btn-attention :active {
+background: #f95c20 !important;
}
.nav-list .nav-header {
-padding:0 10px;
-font-weight:700;
-background:#22303d;
-color:#FCFCFC;
-cursor:default
+padding: 0 10px;
+font-weight: bold;
+background: #22303d;
+color: #FCFCFC;
+cursor: default;
}
-
-.nav-list .item:hover,.nav-list .item .active {
-background:#00488b;
-color:#FCFCFC
+.nav-list .item:hover, .nav-list .item.active {
+background: #00488b;
+color: #FCFCFC;
}
-
-.nav-list .item:hover a,.nav-list .item .active a {
-color:#FCFCFC
+.nav-list .item:hover a, .nav-list .item.active a {
+color: #FCFCFC;
}
-
-.nav-list .item:hover.empty a,.nav-list .item:hover .error a,.nav-list .item .active.empty a,.nav-list .item .active .error a {
-color:#FCFCFC
+.nav-list .item:hover.empty a, .nav-list .item:hover .error a, .nav-list .item.active.empty a, .nav-list .item.active .error a {
+color: #FCFCFC;
}
-
-.nav-list .item:hover.empty a,.nav-list .item .active.empty a {
-background:#FA8052
+.nav-list .item:hover.empty a, .nav-list .item.active.empty a {
+background: #FA8052;
}
-
-.nav-list .item:hover.error a,.nav-list .item .active.error a {
-background:#c46178
+.nav-list .item:hover.error a, .nav-list .item.active.error a {
+background: #c46178;
}
-
.nav-list .item > a {
-padding:0 10px
+padding: 0 10px;
}
-
.nav-list .item.empty a {
-color:#FA8052
+color: #FA8052;
}
-
.nav-list .item.error a {
-color:#c46178
+color: #c46178;
}
-
.nav-list .disable {
-text-align:center;
-background:#FCFCFC;
-color:#969696
+text-align: center;
+background: #FCFCFC;
+color: #969696;
}
-
.nav-list .nav-form {
-padding:3px;
-text-align:center
+padding: 3px;
+text-align: center;
}
-
.nav-list a:hover {
-text-decoration:none
+text-decoration: none;
}
.nav-head {
-margin:0;
-text-align:right;
-background:#22303d;
-color:#FCFCFC
+margin: 0;
+text-align: right;
+background: #22303d;
+color: #FCFCFC;
}
-
.nav-head a {
-color:#FCFCFC
+color: #FCFCFC;
}
-
.nav-head .item {
-padding:5px 10px;
-font-size:.9rem;
-line-height:1.5rem
+padding: 5px 10px;
+font-size: 0.9rem;
+line-height: 1.5rem;
}
.horizontal-list {
-margin:0;
-padding:0
+margin: 0;
+padding: 0;
}
-
.horizontal-list .item {
-vertical-align:middle
+vertical-align: middle;
}
.dropdown-menu {
-padding:5px 0;
-font-size:.8rem;
-text-align:left;
-border:none;
-background-color:#00488b
+padding: 5px 0;
+font-size: 0.8rem;
+text-align: left;
+border: none;
+background-color: #00488b;
}
-
.dropdown-menu .dropdown-header {
-cursor:default
+cursor: default;
}
-
.dropdown-menu > .item {
-padding:0;
-margin-left:10px
+padding: 0;
+margin-left: 10px;
}
-
.dropdown-menu > .item > a {
-min-width:initial;
-white-space:nowrap
+min-width: initial;
+white-space: nowrap;
}
-
.dropdown-menu > .item:hover {
-background:#0062be;
-color:#FCFCFC
+background: #0062be;
+color: #FCFCFC;
}
-
.dropdown-menu > .item:hover > a {
-text-decoration:none;
-color:#FCFCFC
+text-decoration: none;
+color: #FCFCFC;
}
-
.dropdown-menu > .item[aria-checked="true"] > a::before {
-font-weight:700;
-margin:0 0 0 -14px
+font-weight: bold;
+margin: 0 0 0 -14px;
}
-
-.dropdown-menu .input select,.dropdown-menu .input input {
-margin:0 auto 5px;
-padding:2px 5px
+.dropdown-menu .input select, .dropdown-menu .input input {
+margin: 0 auto 5px;
+padding: 2px 5px;
}
.dropdown-header {
-padding:0 5px 5px;
-font-weight:700;
-text-align:left;
-color:#FCFCFC
+padding: 0 5px 5px;
+font-weight: bold;
+text-align: left;
+color: #FCFCFC;
}
.separator {
-margin:5px 0;
-border-bottom:1px solid #e3e3e3;
-cursor:default
+margin: 5px 0;
+border-bottom: 1px solid #e3e3e3;
+cursor: default;
}
.alert {
-margin:5px auto;
-padding:10px 15px;
-font-size:.9em;
-background:#FCFCFC;
-border:none;
-color:#969696;
-text-shadow:0 0 1px #FCFCFC
+margin: 5px auto;
+padding: 10px 15px;
+font-size: 0.9em;
+background: #FCFCFC;
+border: none;
+color: #969696;
+text-shadow: 0 0 1px #FCFCFC;
}
-
.alert > a {
-text-decoration:underline;
-color:inherit
+text-decoration: underline;
+color: inherit;
}
.alert-head {
-font-size:1.15em
+font-size: 1.15em;
}
-.alert-warn,.alert-success,.alert-error {
-border:none
+.alert-warn, .alert-success, .alert-error {
+border: none;
}
.alert-warn {
-background:#FCFCFC;
-color:#FA8052
+background: #FCFCFC;
+color: #FA8052;
}
.alert-success {
-background:#FCFCFC;
-color:#5EAABF
+background: #FCFCFC;
+color: #5EAABF;
}
.alert-error {
-background:#FCFCFC;
-color:#B0425B
+background: #FCFCFC;
+color: #B0425B;
}
.pagination {
-text-align:center;
-font-size:.8em;
-background:#e3e3e3;
-color:#181621
+text-align: center;
+font-size: 0.8em;
+background: #e3e3e3;
+color: #181621;
}
-
.pagination .item.pager-current {
-font-weight:700;
-font-size:1.5em;
-background:#22303d;
-color:#e3e3e3
+font-weight: bold;
+font-size: 1.5em;
+background: #22303d;
+color: #e3e3e3;
}
-
.pagination .item a {
-display:block;
-font-style:italic;
-line-height:3em;
-text-decoration:none;
-color:#181621
+display: block;
+font-style: italic;
+line-height: 3em;
+text-decoration: none;
+color: #181621;
}
-
.pagination .item a:hover {
-background:#22303d;
-color:#e3e3e3
+background: #22303d;
+color: #e3e3e3;
}
-
-.pagination .loading,.pagination a:hover.loading {
-font-size:0;
-background:url(loader.gif) center center no-repeat #22303d
+.pagination .loading, .pagination a:hover.loading {
+font-size: 0;
+background: url(loader.gif) center center no-repeat #22303d;
}
.content {
-padding:20px 10px
+padding: 20px 10px;
}
-
.content .pagination {
-margin:0;
-padding:0
+margin: 0;
+padding: 0;
}
-
.content hr {
-margin:30px 10px;
-height:1px;
-background:#e3e3e3;
-border:0;
-box-shadow:0 2px 5px #e3e3e3
+margin: 30px 10px;
+height: 1px;
+background: #e3e3e3;
+border: 0;
+box-shadow: 0 2px 5px #e3e3e3;
}
-
.content pre {
-margin:10px auto;
-padding:10px 20px;
-overflow:auto;
-background:#181621;
-color:#FCFCFC;
-font-size:.9rem
+margin: 10px auto;
+padding: 10px 20px;
+overflow: auto;
+background: #181621;
+color: #FCFCFC;
+font-size: 0.9rem;
}
-
.content pre code {
-background:transparent;
-color:#FCFCFC;
-border:none
+background: transparent;
+color: #FCFCFC;
+border: none;
}
-
.content code {
-padding:2px 5px;
-color:#B0425B;
-background:#FCFCFC;
-border:1px solid #FCFCFC
+padding: 2px 5px;
+color: #B0425B;
+background: #FCFCFC;
+border: 1px solid #FCFCFC;
}
-
.content blockquote {
-display:block;
-margin:0;
-padding:5px 20px;
-border-top:1px solid #e3e3e3;
-border-bottom:1px solid #e3e3e3;
-background:#FCFCFC;
-color:#969696
+display: block;
+margin: 0;
+padding: 5px 20px;
+border-top: 1px solid #e3e3e3;
+border-bottom: 1px solid #e3e3e3;
+background: #FCFCFC;
+color: #969696;
}
-
.content blockquote p {
-margin:0
+margin: 0;
}
-
.content > h1.title > a {
-color:#181621
+color: #181621;
}
.box {
-border:1px solid #e3e3e3
+border: 1px solid #e3e3e3;
}
-
.box .box-title {
-margin:0;
-padding:5px 10px;
-background:#e3e3e3;
-color:#969696;
-border-bottom:1px solid #e3e3e3
+margin: 0;
+padding: 5px 10px;
+background: #e3e3e3;
+color: #969696;
+border-bottom: 1px solid #e3e3e3;
}
-
.box .box-content {
-max-height:260px
+max-height: 260px;
}
-
.box .box-content .item {
-padding:0 10px;
-font-size:.9rem;
-line-height:2.5em
+padding: 0 10px;
+font-size: 0.9rem;
+line-height: 2.5em;
}
-
.box .box-content .item .configure {
-visibility:hidden
+visibility: hidden;
}
-
.box .box-content .item .configure .icon {
-vertical-align:middle;
-background-color:#e3e3e3
+vertical-align: middle;
+background-color: #e3e3e3;
}
-
.box .box-content .item:hover .configure {
-visibility:visible
+visibility: visible;
}
-
.box.category .box-title .title {
-font-weight:400;
-text-decoration:none;
-text-align:left
+font-weight: normal;
+text-decoration: none;
+text-align: left;
}
-
.box.category:not([data-unread="0"]) .box-title {
-background:#0062be
+background: #0062be;
}
-
.box.category:not([data-unread="0"]) .box-title:active {
-background:#00488b
+background: #00488b;
}
-
.box.category:not([data-unread="0"]) .box-title .title {
-font-weight:700;
-color:#FCFCFC
+font-weight: bold;
+color: #FCFCFC;
}
-
.box.category .title:not([data-unread="0"])::after {
-position:absolute;
-top:5px;
-right:10px;
-border:0;
-background:none;
-font-weight:700;
-box-shadow:none;
-text-shadow:none
+position: absolute;
+top: 5px;
+right: 10px;
+border: 0;
+background: none;
+font-weight: bold;
+box-shadow: none;
+text-shadow: none;
}
-
.box.category .item.feed {
-padding:2px 10px;
-font-size:.8rem
+padding: 2px 10px;
+font-size: 0.8rem;
}
.tree {
-margin:10px 0
+margin: 10px 0;
}
.tree-folder-title {
-position:relative;
-padding:0 10px;
-background:#22303d;
-line-height:2.3rem;
-font-size:1rem;
-height:35px
+position: relative;
+padding: 0 10px;
+background: #22303d;
+line-height: 2.3rem;
+font-size: 1rem;
+height: 35px;
}
-
.tree-folder-title .title {
-background:inherit;
-color:#FCFCFC
+background: inherit;
+color: #FCFCFC;
}
-
.tree-folder-title .title:hover {
-text-decoration:none
+text-decoration: none;
}
.tree-folder-items {
-background:#22303d
+background: #22303d;
}
-
.tree-folder-items > .item {
-padding:0 10px;
-line-height:2.5rem;
-font-size:.8rem
+padding: 0 10px;
+line-height: 2.5rem;
+font-size: 0.8rem;
}
-
.tree-folder-items > .item.active {
-background:#00488b
+background: #00488b;
}
-
.tree-folder-items > .item > a {
-text-decoration:none;
-color:#FCFCFC
+text-decoration: none;
+color: #FCFCFC;
}
-.header > .item {
-vertical-align:middle
+@supports (scrollbar-width: thin) {
+ #sidebar {
+scrollbar-color: rgba(255, 255, 255, 0.05) rgba(0, 0, 0, 0.0);
+}
+#sidebar:hover {
+scrollbar-color: rgba(255, 255, 255, 0.3) rgba(0, 0, 0, 0.0);
+}
}
-.header > .item.title {
-width:231px;
-position:absolute
+@supports not (scrollbar-width: thin) {
+#sidebar::-webkit-scrollbar-thumb {
+background: rgba(255, 255, 255, 0.1);
+}
+#sidebar:hover::-webkit-scrollbar-thumb {
+background: rgba(255, 255, 255, 0.3);
+}
}
+.header > .item {
+vertical-align: middle;
+}
+.header > .item.title {
+position: absolute;
+}
.header > .item.title h1 {
-margin:0;
-display:block
+margin: 0;
+display: block;
}
-
.header > .item.title h1 a {
-text-decoration:none;
-color:#FCFCFC
+text-decoration: none;
+color: #FCFCFC;
}
-
.header > .item.title .logo {
-display:inline-block;
-height:26px;
-vertical-align:top;
-position:relative;
-top:5px
+display: inline-block;
+height: 26px;
+vertical-align: top;
+position: relative;
+top: 5px;
}
-
.header > .item.search input {
-width:230px
+width: 230px;
}
-
.header .item.search input:focus {
-width:350px
+width: 350px;
}
-
.header .item.search {
-display:none
+display: none;
}
-
.header .item.configure {
-position:fixed;
-right:0;
-z-index:1000;
-width:35px
+position: fixed;
+right: 0px;
+z-index: 1000;
+width: 35px;
}
-
.header h1 {
-text-align:center;
-font-size:1.5em
+text-align: center;
+font-size: 1.5em;
}
.aside {
-background:#22303d;
-padding:35px 0;
-width:231px
+background: #22303d;
+padding: 35px 0;
}
-
.aside.aside_feed .tree {
-margin:0 0 50px
+margin: 0 0 50px;
}
-
-.aside.aside_feed .nav-form input,.aside.aside_feed .nav-form select {
-width:140px
+.aside.aside_feed .nav-form input, .aside.aside_feed .nav-form select {
+width: 140px;
}
-
.aside.aside_feed .nav-form .dropdown .dropdown-menu {
-right:-20px
+right: -20px;
}
-
.aside.aside_feed .nav-form .dropdown .dropdown-menu::after {
-right:33px
+right: 33px;
}
.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after {
-position:absolute;
-right:0;
-margin:6px 0;
-padding:0 10px;
-font-size:.9rem;
-line-height:1.5rem;
-background:inherit
+position: absolute;
+right: 0;
+margin: 6px 0;
+padding: 0 10px;
+font-size: 0.9rem;
+line-height: 1.5rem;
+background: inherit;
}
-
.aside_feed .tree-folder-items .dropdown-menu::after {
-left:2px
+left: 2px;
}
.post {
-padding:10px 50px;
-font-size:.9em
+padding: 10px 50px;
+font-size: 0.9em;
}
-
.post input {
-background:#e3e3e3
+background: #e3e3e3;
+}
+.post input.long {
+height: 33px;
+margin-top: 0px;
}
-
.post form {
-margin:10px 0
+margin: 10px 0;
}
-
.post.content {
-max-width:550px
+max-width: 550px;
}
.prompt {
-text-align:center
+text-align: center;
}
-
.prompt label {
-text-align:left
+text-align: left;
}
-
.prompt form {
-margin:10px auto 20px;
-width:200px
+margin: 10px auto 20px auto;
+width: 200px;
}
-
.prompt input {
-margin:5px auto;
-width:100%
+margin: 5px auto;
+width: 100%;
}
-
.prompt p {
-margin:20px 0
+margin: 20px 0;
}
#new-article {
-text-align:center;
-font-size:1em;
-background:#0062be;
-position:fixed;
-bottom:48px;
-z-index:900;
-left:0;
-width:231px;
-line-height:1.5em
+text-align: center;
+font-size: 1em;
+background: #0062be;
+position: fixed;
+bottom: 48px;
+z-index: 900;
+left: 0;
+line-height: 1.5em;
}
-
#new-article:hover {
-background:#00488b
+background: #00488b;
}
-
#new-article > a {
-line-height:1.5em;
-font-weight:700;
-color:#FCFCFC
+line-height: 1.5em;
+font-weight: bold;
+color: #FCFCFC;
}
-
#new-article > a:hover {
-text-decoration:none
+text-decoration: none;
}
.day {
-padding:0 10px;
-font-weight:700;
-line-height:3em;
-text-align:center
+padding: 0 10px;
+font-weight: bold;
+line-height: 3em;
+text-align: center;
}
-
.day .name {
-display:none
+display: none;
}
.nav a {
-color:#FCFCFC
+color: #FCFCFC;
}
.nav_menu {
-font-size:0;
-background-color:#0062be;
-position:fixed;
-width:100%;
-z-index:900
+font-size: 0;
+background-color: #0062be;
+position: fixed;
+width: 100%;
+z-index: 900;
}
-
.nav_menu .item.search {
-display:inline-block;
-position:fixed;
-right:40px
+display: inline-block;
+position: fixed;
+right: 40px;
}
.flux {
-padding-right:10px;
-background:#FCFCFC
+padding-right: 10px;
+background: #FCFCFC;
}
-
.flux::after {
-margin:0 auto;
-width:90%;
-border-top:1px solid #e3e3e3
+margin: 0 auto;
+width: 90%;
+border-top: 1px solid #e3e3e3;
}
-
-.flux:hover,.flux .current {
-background:#FFF
+.flux:hover, .flux .current {
+background: #FFFFFF;
}
-
-.flux:hover:not(.current):hover .item.title,.flux .current:not(.current):hover .item.title {
-background:#FFF
+.flux:hover:not(.current):hover .item.title, .flux .current:not(.current):hover .item.title {
+background: #FFFFFF;
}
-
.flux.not_read {
-background:#FFF3ED
+background: #FFF3ED;
}
-
.flux.not_read:not(.current):hover .item.title {
-background:#FFF3ED
+background: #FFF3ED;
}
-
.flux.favorite {
-background:#FFF6DA
+background: #FFF6DA;
}
-
.flux.favorite:not(.current):hover .item.title {
-background:#FFF6DA
+background: #FFF6DA;
}
-
.flux .date {
-font-size:.7rem;
-color:#969696
+font-size: 0.7rem;
+color: #969696;
}
-
.flux .bottom {
-font-size:.8rem;
-text-align:center
+font-size: 0.8rem;
+text-align: center;
}
-
.flux .website .favicon {
-padding:5px
+padding: 5px;
}
-
.flux label {
-color:#FCFCFC;
-cursor:pointer
+color: #FCFCFC;
+cursor: pointer;
}
.flux_header {
-font-size:.8rem;
-cursor:pointer
+font-size: 0.8rem;
+cursor: pointer;
}
-
.flux_header .title {
-font-size:.9rem
+font-size: 0.9rem;
}
.notification {
-text-align:center;
-font-weight:700;
-font-size:1em;
-padding:10px 0;
-z-index:10;
-vertical-align:middle;
-background:#e3e3e3;
-color:#969696;
-border:none;
-position:fixed;
-bottom:48px;
-left:0;
-top:auto;
-width:231px;
-height:auto
-}
-
-.notification.good,.notification .bad {
-color:#FCFCFC
+text-align: center;
+font-weight: bold;
+font-size: 1em;
+padding: 10px 0;
+z-index: 10;
+vertical-align: middle;
+background: #e3e3e3;
+color: #969696;
+border: none;
+position: fixed;
+bottom: 48px;
+left: 0;
+top: auto;
+height: auto;
+}
+.notification.good, .notification .bad {
+color: #FCFCFC;
}
-
.notification.good {
-background:#5EAABF
+background: #5EAABF;
}
-
.notification.good a.close:hover {
-background:#5EAABF
+background: #5EAABF;
}
-
.notification.bad {
-background:#c46178
+background: #c46178;
}
-
.notification.bad a.close:hover {
-background:#c46178
+background: #c46178;
}
-
.notification#actualizeProgress {
-line-height:2em
+line-height: 2em;
}
-
.notification a.close {
-display:none
+display: none;
}
#bigMarkAsRead {
-text-align:center;
-text-decoration:none;
-background:#e3e3e3;
-padding:20px!important
+text-align: center;
+text-decoration: none;
+background: #e3e3e3;
}
-
#bigMarkAsRead:hover {
-background:#22303d;
-color:#FCFCFC
+background: #22303d;
+color: #FCFCFC;
}
#nav_entries {
-margin:0;
-text-align:center;
-line-height:3em;
-table-layout:fixed;
-width:231px;
-background:#22303d
+margin: 0;
+text-align: center;
+line-height: 3em;
+table-layout: fixed;
+background: #22303d;
}
.stat {
-margin:10px 0 20px
+margin: 10px 0 20px;
+}
+.stat th, .stat td, .stat tr {
+border: none;
+}
+.stat > table td, .stat > table th {
+border-bottom: 1px solid #e3e3e3;
+}
+.stat > .horizontal-list {
+margin: 0 0 5px;
+}
+.stat > .horizontal-list .item {
+overflow: hidden;
+white-space: nowrap;
+text-overflow: ellipsis;
+}
+.stat > .horizontal-list .item:first-child {
+width: 270px;
}
-.stat th,.stat td,.stat tr {
-border:none
+.formLogin #global {
+height: 0;
}
-.stat > table td,.stat > table th {
-border-bottom:1px solid #e3e3e3
+.formLogin .header {
+height: 55px;
+background: #22303d;
}
-.stat > .horizontal-list {
-margin:0 0 5px
+.formLogin .header > .item.configure {
+width: 200px;
+position: unset;
}
-.stat > .horizontal-list .item {
-overflow:hidden;
-white-space:nowrap;
-text-overflow:ellipsis
+.formLogin a.signin {
+ color: #FCFCFC;
+ padding-left: 5px;
}
-.stat > .horizontal-list .item:first-child {
-width:270px
+.formLogin .header > .item.title h1 {
+ display: unset;
+}
+
+.formLogin input {
+ border-left: 5px solid;
+ border-right: 1px solid #e3e3e3;
+ border-top: 1px solid #e3e3e3;
+ border-bottom: 1px solid #e3e3e3;
}
.loglist {
-overflow:hidden;
-border:1px solid #969696
+overflow: hidden;
+border: 1px solid #969696;
}
.log {
-padding:5px 2%;
-overflow:auto;
-font-size:.8rem;
-background:#FCFCFC
+padding: 5px 2%;
+overflow: auto;
+font-size: 0.8rem;
+background: #FCFCFC;
}
-
.log > .date {
-margin:0 10px 0 0;
-padding:5px 10px
+margin: 0 10px 0 0;
+padding: 5px 10px;
}
-
.log.error > .date {
-background:#c46178;
-color:#FCFCFC
+background: #c46178;
+color: #FCFCFC;
}
-
.log.warning > .date {
-background:#FA8052;
-color:#FCFCFC
+background: #FA8052;
+color: #FCFCFC;
}
-
.log.notice > .date {
-background:#e3e3e3;
-color:#FCFCFC
+background: #e3e3e3;
+color: #FCFCFC;
}
-
.log.debug > .date {
-background:#181621;
-color:#FCFCFC
+background: #181621;
+color: #FCFCFC;
}
@media (max-width: 840px) {
-.dropdown-header,.dropdown-menu > .item {
-padding:12px
+.formLogin .header {
+display: none;
+}
+
+.dropdown-header, .dropdown-menu > .item {
+padding: 12px;
}
#new-article {
-width:100%;
-bottom:initial
+width: 100%;
+bottom: initial;
}
.header {
-display:table
+display: table;
}
-
.header .item.title .logo {
-display:none
+display: none;
}
.header > .item.title h1 a {
-display:block;
-position:absolute;
-top:-35px;
-left:10px;
-font-size:.6em
+display: block;
+position: absolute;
+top: -35px;
+left: 10px;
+font-size: 0.6em;
}
-.header .item.configure,button.read_all.btn {
-display:none
+.header .item.configure, button.read_all.btn {
+display: none;
}
-.flux .item.manage,.flux_header .item.website {
-width:35px;
-text-align:center
+.flux .item.manage, .flux_header .item.website {
+width: 35px;
+text-align: center;
}
.aside {
-width:0;
-transition:width 200ms linear
+width: 0;
+transition: width 200ms linear;
}
-
.aside .toggle_aside {
-display:block;
-height:50px;
-line-height:50px;
-text-align:right;
-padding-right:10px;
-background:#22303d
+display: block;
+height: 50px;
+line-height: 50px;
+text-align: right;
+padding-right: 10px;
+background: #22303d;
}
-
.aside.aside_feed {
-padding:0
+padding: 0;
}
-
.aside:target {
-width:78%
+width: 78%;
}
.nav_menu {
-position:initial;
-height:71px
+position: initial;
+height: 71px;
}
-
.nav_menu .btn {
-margin:5px 10px
+margin: 5px 10px;
}
-
.nav_menu .stick {
-margin:0 10px
+margin: 0 10px;
}
-
.nav_menu .stick .btn {
-margin:5px 0
+margin: 5px 0;
}
-
.nav_menu .search {
-position:absolute!important;
-top:35px;
-left:55px
+position: absolute !important;
+top: 35px;
+left: 55px;
}
-
.nav_menu .search input {
-width:85%
+width: 85%;
}
.pagination {
-margin:0 0 3.5em
+margin: 0 0 3.5em;
}
#panel .close {
-display:block;
-height:50px;
-line-height:50px;
-text-align:right;
-padding-right:10px;
-background:#22303d
+display: block;
+height: 50px;
+line-height: 50px;
+text-align: right;
+padding-right: 10px;
+background: #22303d;
}
.day .name {
-font-size:1.1rem
+font-size: 1.1rem;
}
.notification {
-width:100%
+width: 100%;
}
-
.notification a.close {
-display:block;
-left:0;
-background:transparent
+display: block;
+left: 0;
+background: transparent;
}
-
.notification a.close:hover {
-opacity:.5
+opacity: 0.5;
}
-
.notification a.close .icon {
-display:none
+display: none;
}
#nav_entries {
-width:100%!important
+width: 100% !important;
}
div#stream {
-margin-top:0
+margin-top: 0px;
}
a.btn.toggle_aside {
-position:absolute;
-top:29px
+position: absolute;
+top: 29px;
}
-form#mark-read-menu,a#actualize,a#toggle-order,div#nav_menu_actions,div#nav_menu_views {
-position:absolute
+form#mark-read-menu, a#actualize, a#toggle-order, div#nav_menu_actions, div#nav_menu_views {
+position: absolute;
}
form#mark-read-menu {
-right:46px;
-top:30px;
-z-index:1100
+right: 46px;
+top: 30px;
+z-index: 1100;
}
-a#actualize,a#toggle-order {
-right:0
+a#actualize, a#toggle-order {
+right: 0px;
}
a#actualize {
-top:29px
+top: 29px;
}
-a#toggle-order,div#nav_menu_actions,div#nav_menu_views {
-top:65px
+a#toggle-order, div#nav_menu_actions, div#nav_menu_views {
+top: 65px;
}
div#nav_menu_actions {
-left:0
+left: 0px;
}
div#nav_menu_views {
-right:50px
+right: 50px;
}
}
-
@media (max-width: 410px) {
.nav_menu .stick {
-margin:0
+margin: 0;
}
}
-
@media (max-width: 374px) {
#nav_menu_views {
-display:none
+display: none;
}
}
-
button.as-link {
-color:#FCFCFC;
-outline:none
+color: #FCFCFC;
+outline: none;
}
.dropdown-target:target ~ .btn.dropdown-toggle {
-background:#00488b
+background: #00488b;
}
.tree-folder.active .tree-folder-title {
-background:#00488b;
-font-weight:700
+background: #00488b;
+font-weight: bold;
}
.feed.item.empty {
-color:#FA8052
+color: #FA8052;
}
-
.feed.item.empty.active {
-background:#FA8052;
-color:#FCFCFC
+background: #FA8052;
+color: #FCFCFC;
}
-
.feed.item.empty.active > a {
-color:#FCFCFC
+color: #FCFCFC;
}
-
.feed.item.empty > a {
-color:#FA8052
+color: #FA8052;
}
-
.feed.item.error {
-color:#c46178
+color: #c46178;
}
-
.feed.item.error.active {
-background:#c46178;
-color:#FCFCFC
+background: #c46178;
+color: #FCFCFC;
}
-
.feed.item.error.active > a {
-color:#FCFCFC
+color: #FCFCFC;
}
-
.feed.item.error > a {
-color:#c46178
+color: #c46178;
}
#dropdown-query ~ .dropdown-menu .dropdown-header .icon {
-vertical-align:middle;
-float:right
+vertical-align: middle;
+float: right;
}
#stream.reader .flux {
-padding:0 0 50px;
-background:#FCFCFC;
-color:#22303d;
-border:none
+padding: 0 0 50px;
+background: #FCFCFC;
+color: #22303d;
+border: none;
}
-
#stream.reader .flux .author {
-margin:0 0 10px;
-font-size:90%;
-color:#969696
+margin: 0 0 10px;
+font-size: 90%;
+color: #969696;
}
-#nav_menu_actions ul.dropdown-menu,#nav_menu_read_all ul.dropdown-menu {
-left:0
+#nav_menu_actions ul.dropdown-menu, #nav_menu_read_all ul.dropdown-menu {
+left: 0px;
}
#slider label {
-min-height:initial
+min-height: initial;
}
-
#slider .form-group:hover {
-background:inital
-} \ No newline at end of file
+background: inital;
+}
diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss
index 9bd0326d9..ecacba832 100644
--- a/p/themes/Swage/swage.scss
+++ b/p/themes/Swage/swage.scss
@@ -12,6 +12,7 @@ $color_stared: #FFF6DA;
$color_unread: #FFF3ED;
$color_hover: #FFFFFF;
+
// @extend-elements
%input {
min-height: 25px;
@@ -48,6 +49,10 @@ $color_hover: #FFFFFF;
clear: both;
}
+%aside-width {
+ width: 231px;
+}
+
// /@extend-elements
html,
body {
@@ -66,6 +71,12 @@ a {
background: darken( $color_nav, 10%);
}
}
+ &#btn-subscription {
+ width: 76%;
+ }
+ &#btn-importExport {
+ width: 5%;
+ }
}
img {
@@ -205,6 +216,9 @@ form {
.stick {
vertical-align: middle;
font-size: 0;
+ &.configure-feeds {
+ @extend %aside-width;
+ }
}
.btn {
@@ -250,7 +264,7 @@ form {
.item {
@extend %nav-list;
&:hover,
- .active {
+ &.active {
background: darken( $color_nav, 10%);
color: $color_light;
a {
@@ -337,7 +351,7 @@ form {
> a {
min-width: initial;
white-space: nowrap;
- }
+ }
&:hover {
background: $color_nav;
color: $color_light;
@@ -589,11 +603,29 @@ form {
}
}
+@supports (scrollbar-width: thin) {
+ #sidebar {
+ scrollbar-color: rgba(255, 255, 255, 0.05) rgba(0, 0, 0, 0.0);
+ }
+ #sidebar:hover {
+ scrollbar-color: rgba(255, 255, 255, 0.3) rgba(0, 0, 0, 0.0);
+ }
+}
+
+@supports not (scrollbar-width: thin) {
+ #sidebar::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.1);
+ }
+ #sidebar:hover::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.3);
+ }
+}
+
.header {
> .item {
vertical-align: middle;
&.title {
- width: 231px;
+ @extend %aside-width;
position: absolute;
h1 {
margin: 0;
@@ -636,7 +668,7 @@ form {
.aside {
background: $color_aside;
padding: 35px 0;
- width: 231px;
+ @extend %aside-width;
&.aside_feed {
.tree {
margin: 0 0 50px;
@@ -678,6 +710,10 @@ form {
font-size: 0.9em;
input {
background: darken( $color_light, 10% );
+ &.long{
+ height: 33px;
+ margin-top: 0px;
+ }
}
form {
margin: 10px 0;
@@ -713,7 +749,7 @@ form {
bottom: 48px;
z-index: 900;
left: 0;
- width: 231px;
+ @extend %aside-width;
line-height: 1.5em;
&:hover {
background: darken( $color_nav, 10%);
@@ -825,7 +861,7 @@ form {
bottom: 48px;
left: 0;
top: auto;
- width: 231px;
+ @extend %aside-width;
height: auto;
&.good,
.bad {
@@ -855,7 +891,6 @@ form {
text-align: center;
text-decoration: none;
background: darken( $color_light, 10%);
- padding: 20px !IMPORTANT;
&:hover {
background: $color_aside;
color: $color_light;
@@ -867,7 +902,7 @@ form {
text-align: center;
line-height: 3em;
table-layout: fixed;
- width: 231px;
+ @extend %aside-width;
background: $color_aside;
}
@@ -897,6 +932,37 @@ form {
}
}
+.formLogin {
+ #global {
+ height: 0;
+ }
+
+ .header {
+ height: 55px;
+ background: $color_aside;
+ > .item {
+ &.configure {
+ width: 200px;
+ position: unset;
+ }
+ &.title h1 {
+ display: unset;
+ }
+ }
+ }
+ a.signin {
+ color: $color_light;
+ padding-left: 5px;
+ }
+
+ input {
+ border-left: 5px solid;
+ border-right: 1px darken( $color_light, 10%);
+ border-top: 1px darken( $color_light, 10%);
+ border-bottom: 1px darken( $color_light, 10%);
+ }
+}
+
.loglist {
overflow: hidden;
border: 1px solid darken( $color_light, 40% );
@@ -930,10 +996,13 @@ form {
}
@media(max-width: 840px) {
+ .formLogin .header {
+ display: none;
+ }
.dropdown-header, .dropdown-menu > .item {
padding: 12px;
}
-
+
#new-article {
width: 100%;
bottom: initial;
@@ -1156,5 +1225,5 @@ button.as-link {
background: inital;
}
}
-
-} \ No newline at end of file
+
+}
diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css
index b211d0516..099aee916 100644
--- a/p/themes/base-theme/template.css
+++ b/p/themes/base-theme/template.css
@@ -109,7 +109,7 @@ input[type="checkbox"] {
min-height: 15px !important;
}
.dropdown-menu label > input[type="text"] {
- with: 150px;
+ width: 150px;
width: calc(99% - 5em);
}
.dropdown-menu input[type="checkbox"] {
@@ -143,7 +143,7 @@ td.numeric {
/*===============*/
[aria-hidden="true"] {
- display: none;
+ display: none !important;
}
/*=== Forms */
@@ -168,6 +168,13 @@ td.numeric {
display: block;
}
+@supports (position: sticky) {
+ #mark-read-aside {
+ position: sticky;
+ top: 0;
+ }
+}
+
/*=== Buttons */
.stick {
display: inline-block;
@@ -230,6 +237,11 @@ a.btn {
background: #fff;
border: 1px solid #aaa;
}
+.dropdown-menu-scrollable {
+ max-height: 75vh;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
.dropdown-header {
display: block;
}
@@ -256,7 +268,7 @@ a.btn {
}
.dropdown-target:target ~ .dropdown-menu {
display: block;
- z-index: 10;
+ z-index: 1000;
}
.dropdown-close {
display: inline;
@@ -268,6 +280,7 @@ a.btn {
left: 0; right: 0;
display: block;
z-index: -10;
+ cursor: default;
}
.separator {
display: block;
@@ -368,16 +381,40 @@ a.btn {
cursor: grab;
}
+/*=== Scrollbar */
+@supports (scrollbar-width: thin) {
+ #sidebar {
+ overflow-y: auto;
+ scrollbar-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.05);
+ scrollbar-width: thin;
+ }
+ #sidebar:hover {
+ scrollbar-color: rgba(0, 0, 0, 0.3) rgba(0, 0, 0, 0.05);
+ }
+}
+
+@supports not (scrollbar-width: thin) {
+ #sidebar::-webkit-scrollbar {
+ background: rgba(0, 0, 0, 0.05);
+ width: 8px;
+ }
+ #sidebar::-webkit-scrollbar-thumb {
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: 5px;
+ display: unset;
+ }
+ #sidebar:hover::-webkit-scrollbar-thumb {
+ background: rgba(0, 0, 0, 0.3);
+ }
+}
+
/*=== Tree */
.tree {
margin: 0;
- padding: 0 0 2em 0;
+ max-height: 99vh;
list-style: none;
text-align: left;
-}
-
-.treepadding {
- padding: 0 0 15em 0;
+ overflow-x: hidden;
}
.tree-folder-items {
@@ -407,6 +444,10 @@ a.btn {
white-space: nowrap;
text-overflow: ellipsis;
}
+.tree-bottom {
+ visibility: hidden;
+ margin-bottom: 18em;
+}
/*=== STRUCTURE */
/*===============*/
@@ -445,7 +486,6 @@ a.btn {
}
.aside {
display: table-cell;
- height: 100%;
width: 300px;
vertical-align: top;
}
@@ -667,6 +707,21 @@ br + br + br {
height: 300px;
}
+/*=== LOGIN VIEW */
+/*================*/
+.formLogin .header > .item {
+ padding: 10px 30px;
+}
+
+.formLogin .header > .item.title {
+ text-align: left;
+}
+
+.formLogin .header > .item.configure {
+ text-align: right;
+}
+
+
/*=== GLOBAL VIEW */
/*================*/
#stream.global {
@@ -854,6 +909,29 @@ pre.enclosure-description {
white-space: pre-line;
}
+/*=== READER */
+/*===========*/
+.reader .nav_menu .toggle_aside {
+ display: inline-block;
+}
+
+.reader .aside .toggle_aside {
+ display: block;
+ width: 100%;
+}
+
+.reader .aside {
+ width: 0;
+}
+
+.reader .aside:target {
+ width: 300px;
+}
+
+.reader .aside .stick {
+ display: none;
+}
+
/*=== MOBILE */
/*===========*/
@media(max-width: 840px) {
@@ -894,7 +972,6 @@ pre.enclosure-description {
}
.aside:target {
width: 90%;
- overflow: auto;
}
.flux_header .item.website {