summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md20
-rwxr-xr-xclasses/article.php78
-rw-r--r--classes/backend.php22
-rw-r--r--classes/db/prefs.php4
-rw-r--r--classes/dbupdater.php19
-rw-r--r--classes/digest.php15
-rw-r--r--classes/dlg.php52
-rw-r--r--classes/feedparser.php58
-rwxr-xr-xclasses/feeds.php234
-rwxr-xr-xclasses/handler/public.php121
-rwxr-xr-xclasses/logger/sql.php8
-rw-r--r--classes/mailer.php3
-rw-r--r--classes/opml.php72
-rw-r--r--classes/plugin.php19
-rwxr-xr-xclasses/pluginhost.php10
-rwxr-xr-xclasses/pref/feeds.php392
-rwxr-xr-xclasses/pref/filters.php178
-rw-r--r--classes/pref/labels.php54
-rw-r--r--classes/pref/prefs.php192
-rw-r--r--classes/pref/users.php147
-rwxr-xr-xclasses/rpc.php20
-rwxr-xr-xclasses/rssutils.php87
-rwxr-xr-xconfig.php-dist12
-rwxr-xr-xcss/cdm.less4
-rw-r--r--css/default.css144
-rw-r--r--css/default.css.map2
-rw-r--r--css/dijit_basic.less18
-rw-r--r--css/prefs.less31
-rwxr-xr-xcss/tt-rss.less99
-rw-r--r--css/utility.less3
-rw-r--r--css/zoom.less3
-rw-r--r--include/feedbrowser.php106
-rw-r--r--[-rwxr-xr-x]include/functions.php147
-rwxr-xr-xinclude/login_form.php3
-rwxr-xr-xinclude/sanity_check.php11
-rw-r--r--include/sessions.php2
-rw-r--r--index.php20
-rwxr-xr-xinstall/index.php17
-rw-r--r--js/AppBase.js22
-rw-r--r--js/CommonDialogs.js56
-rw-r--r--js/FeedStoreModel.js2
-rwxr-xr-xjs/FeedTree.js22
-rw-r--r--js/Feeds.js42
-rwxr-xr-xjs/Headlines.js93
-rw-r--r--js/PluginHost.js7
-rw-r--r--js/PrefFeedTree.js4
-rw-r--r--js/PrefUsers.js2
-rwxr-xr-xjs/Toolbar.js14
-rwxr-xr-xjs/form/ComboButton.js12
-rwxr-xr-xjs/form/DropDownButton.js12
-rwxr-xr-xjs/form/Select.js8
-rwxr-xr-xjs/prefs.js11
-rw-r--r--js/tt-rss.js22
-rwxr-xr-xplugins/af_comics/init.php11
-rw-r--r--plugins/af_fsckportal/init.php6
-rw-r--r--plugins/af_psql_trgm/init.php62
-rwxr-xr-xplugins/af_readability/init.php103
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Configuration.php (renamed from vendor/andreskrey/Readability/Configuration.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMAttr.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMAttr.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMCdataSection.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMCdataSection.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMCharacterData.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMCharacterData.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMComment.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMComment.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocument.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMDocument.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentFragment.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentFragment.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentType.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentType.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMElement.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMElement.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMEntity.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMEntity.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMEntityReference.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMEntityReference.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMNode.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMNode.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMNotation.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMNotation.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMProcessingInstruction.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMProcessingInstruction.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMText.php (renamed from vendor/andreskrey/Readability/Nodes/DOM/DOMText.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/NodeTrait.php (renamed from vendor/andreskrey/Readability/Nodes/NodeTrait.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Nodes/NodeUtility.php (renamed from vendor/andreskrey/Readability/Nodes/NodeUtility.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/ParseException.php (renamed from vendor/andreskrey/Readability/ParseException.php)0
-rw-r--r--plugins/af_readability/vendor/andreskrey/Readability/Readability.php (renamed from vendor/andreskrey/Readability/Readability.php)0
-rwxr-xr-xplugins/af_redditimgur/init.php63
-rwxr-xr-xplugins/af_tumblr_1280/init.php8
-rwxr-xr-xplugins/af_zz_imgproxy/init.php4
-rw-r--r--plugins/auth_internal/init.php4
-rw-r--r--plugins/bookmarklets/init.php4
-rwxr-xr-xplugins/cache_starred_images/init.php6
-rw-r--r--plugins/googlereaderkeys/init.php16
-rw-r--r--plugins/hotkeys_noscroll/init.php4
-rwxr-xr-xplugins/import_export/init.php63
-rw-r--r--plugins/mail/init.php15
-rw-r--r--plugins/mailto/init.php6
-rw-r--r--plugins/note/init.php11
-rw-r--r--plugins/search_sphinx/init.php5
-rw-r--r--plugins/search_sphinx/sphinxapi.php2
-rw-r--r--plugins/share/init.php10
-rw-r--r--plugins/toggle_sidebar/init.js9
-rw-r--r--plugins/toggle_sidebar/init.php10
-rw-r--r--prefs.php7
-rw-r--r--register.php2
-rw-r--r--schema/ttrss_schema_mysql.sql7
-rw-r--r--schema/ttrss_schema_pgsql.sql7
-rw-r--r--schema/versions/mysql/136.sql9
-rw-r--r--schema/versions/mysql/137.sql7
-rw-r--r--schema/versions/mysql/138.sql7
-rw-r--r--schema/versions/pgsql/136.sql9
-rw-r--r--schema/versions/pgsql/137.sql7
-rw-r--r--schema/versions/pgsql/138.sql7
-rw-r--r--templates/digest_template_html.txt3
-rw-r--r--themes/night.css142
-rw-r--r--themes/night.css.map2
-rw-r--r--themes/night_base.less12
-rw-r--r--themes/night_blue.css142
-rw-r--r--themes/night_blue.css.map2
-rwxr-xr-xupdate.php46
110 files changed, 1975 insertions, 1621 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 222630ece..e842faf48 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,14 +1,20 @@
## Contributing code the right way
-TLDR: it works pretty much like Github.
+New user accounts on Gogs are not allowed to fork repositories because of spam. To get
+initial fork access, do the following:
-1. Make an account on Gogs
-2. Fork the repository you're interested in (also see below)
-3. Do the needful
-4. File a pull request with your changes against master branch.
+1. Register on the forums and on Gogs
+2. Create a thread describing your proposed changes in Development subforum while
+including your Gogs username
+3. If your changes make sense to me, I'll update your repo limit and you'll be able to
+fork things and file pull requests
-**If you can't fork the repository on Gogs, please see this forum thread:**
+If you already have a fully functional Gogs account it works pretty much like Github:
-https://discourse.tt-rss.org/t/pull-requests-gogs-spam/1850/2
+1. Fork the repository you're interested in
+2. Do the needful
+3. File a pull request with your changes against master branch
+That's it. If you have any other questions, see this forum thread:
+https://discourse.tt-rss.org/t/how-to-contribute-code-via-pull-requests-on-git-tt-rss-org/1850
diff --git a/classes/article.php b/classes/article.php
index fd693a4fe..c23a1b820 100755
--- a/classes/article.php
+++ b/classes/article.php
@@ -100,15 +100,12 @@ class Article extends Handler_Protected {
$pluginhost->load_all(PluginHost::KIND_ALL, $owner_uid);
$pluginhost->load_data();
- $af_readability = $pluginhost->get_plugin("Af_Readability");
+ foreach ($pluginhost->get_hooks(PluginHost::HOOK_GET_FULL_TEXT) as $p) {
+ $extracted_content = $p->hook_get_full_text($url);
- if ($af_readability) {
- $enable_share_anything = $pluginhost->get($af_readability, "enable_share_anything");
-
- if ($enable_share_anything) {
- $extracted_content = $af_readability->extract_content($url);
-
- if ($extracted_content) $content = $extracted_content;
+ if ($extracted_content) {
+ $content = $extracted_content;
+ break;
}
}
}
@@ -151,6 +148,16 @@ class Article extends Handler_Protected {
content = ?, content_hash = ? WHERE id = ?");
$sth->execute([$content, $content_hash, $ref_id]);
+ if (DB_TYPE == "pgsql"){
+ $sth = $pdo->prepare("UPDATE ttrss_entries
+ SET tsvector_combined = to_tsvector( :ts_content)
+ WHERE id = :id");
+ $params = [
+ ":ts_content" => mb_substr(strip_tags($content ), 0, 900000),
+ ":id" => $ref_id];
+ $sth->execute($params);
+ }
+
$sth = $pdo->prepare("UPDATE ttrss_user_entries SET published = true,
last_published = NOW() WHERE
int_id = ? AND owner_uid = ?");
@@ -186,7 +193,15 @@ class Article extends Handler_Protected {
if ($row = $sth->fetch()) {
$ref_id = $row["id"];
-
+ if (DB_TYPE == "pgsql"){
+ $sth = $pdo->prepare("UPDATE ttrss_entries
+ SET tsvector_combined = to_tsvector( :ts_content)
+ WHERE id = :id");
+ $params = [
+ ":ts_content" => mb_substr(strip_tags($content ), 0, 900000),
+ ":id" => $ref_id];
+ $sth->execute($params);
+ }
$sth = $pdo->prepare("INSERT INTO ttrss_user_entries
(ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache,
last_read, note, unread, last_published)
@@ -211,8 +226,6 @@ class Article extends Handler_Protected {
function editArticleTags() {
- print __("Tags for this article (separated by commas):")."<br>";
-
$param = clean($_REQUEST['param']);
$tags = Article::get_article_tags($param);
@@ -223,23 +236,22 @@ class Article extends Handler_Protected {
print_hidden("op", "article");
print_hidden("method", "setArticleTags");
- print "<table width='100%'><tr><td>";
+ print "<header class='horizontal'>" . __("Tags for this article (separated by commas):")."</header>";
- print "<textarea dojoType=\"dijit.form.SimpleTextarea\" rows='4'
- style='height : 100px; font-size : 12px; width : 98%' id=\"tags_str\"
+ print "<section>";
+ print "<textarea dojoType='dijit.form.SimpleTextarea' rows='4'
+ style='height : 100px; font-size : 12px; width : 98%' id='tags_str'
name='tags_str'>$tags_str</textarea>
- <div class=\"autocomplete\" id=\"tags_choices\"
- style=\"display:none\"></div>";
-
- print "</td></tr></table>";
-
- print "<div class='dlgButtons'>";
-
- print "<button dojoType=\"dijit.form.Button\"
- onclick=\"dijit.byId('editTagsDlg').execute()\">".__('Save')."</button> ";
- print "<button dojoType=\"dijit.form.Button\"
+ <div class='autocomplete' id='tags_choices'
+ style='display:none'></div>";
+ print "</section>";
+
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button'
+ type='submit' class='alt-primary' onclick=\"dijit.byId('editTagsDlg').execute()\">".__('Save')."</button> ";
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('editTagsDlg').hide()\">".__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -519,7 +531,7 @@ class Article extends Handler_Protected {
$rv .= "<br clear='both'/>";
}
- $rv .= "<div class=\"attachments\" dojoType=\"dijit.form.DropDownButton\">".
+ $rv .= "<div class=\"attachments\" dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Attachments')."</span>";
$rv .= "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
@@ -700,17 +712,17 @@ class Article extends Handler_Protected {
$ids_qmarks = arr_qmarks($ids);
- if ($cmode == 0) {
+ if ($cmode == 1) {
$sth = $pdo->prepare("UPDATE ttrss_user_entries SET
- unread = false,last_read = NOW()
- WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
- } else if ($cmode == 1) {
+ unread = true
+ WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
+ } else if ($cmode == 2) {
$sth = $pdo->prepare("UPDATE ttrss_user_entries SET
- unread = true
- WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
+ unread = NOT unread,last_read = NOW()
+ WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
} else {
$sth = $pdo->prepare("UPDATE ttrss_user_entries SET
- unread = NOT unread,last_read = NOW()
+ unread = false,last_read = NOW()
WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
}
diff --git a/classes/backend.php b/classes/backend.php
index bd6b1ff19..5bd724728 100644
--- a/classes/backend.php
+++ b/classes/backend.php
@@ -7,13 +7,18 @@ class Backend extends Handler {
}
function digestTest() {
- header("Content-type: text/html");
-
- $rv = Digest::prepare_headlines_digest($_SESSION['uid'], 1, 1000);
+ if (isset($_SESSION['uid'])) {
+ header("Content-type: text/html");
- $rv[3] = "<pre>" . $rv[3] . "</pre>";
+ $rv = Digest::prepare_headlines_digest($_SESSION['uid'], 1, 1000);
- print_r($rv);
+ print "<h1>HTML</h1>";
+ print $rv[0];
+ print "<h1>Plain text</h1>";
+ print "<pre>".$rv[3]."</pre>";
+ } else {
+ print error_json(6);
+ }
}
private function display_main_help() {
@@ -149,13 +154,10 @@ class Backend extends Handler {
print "</ul>";
}
- print "<div class='dlgButtons'>";
- print "<button dojoType='dijit.form.Button' style='float : left' class='alt-info' onclick='window.open(\"https://tt-rss.org/wiki/InterfaceTips\")'>
- <i class='material-icons'>help</i> ".__("More info...")."</button>";
-
+ print "<footer class='text-center'>";
print "<button dojoType='dijit.form.Button'
onclick=\"return dijit.byId('helpDlg').hide()\">".__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
}
}
diff --git a/classes/db/prefs.php b/classes/db/prefs.php
index 1fddd27c5..fbe7e0eea 100644
--- a/classes/db/prefs.php
+++ b/classes/db/prefs.php
@@ -90,8 +90,10 @@ class Db_Prefs {
return $this->convert($value, $type_name);
+ } else if ($die_on_error) {
+ user_error("Fatal error, unknown preferences key: $pref_name (owner: $user_id)", E_USER_ERROR);
+ return null;
} else {
- user_error("Fatal error, unknown preferences key: $pref_name (owner: $user_id)", $die_on_error ? E_USER_ERROR : E_USER_WARNING);
return null;
}
}
diff --git a/classes/dbupdater.php b/classes/dbupdater.php
index c32afedee..94307aea0 100644
--- a/classes/dbupdater.php
+++ b/classes/dbupdater.php
@@ -42,15 +42,22 @@ class DbUpdater {
foreach ($lines as $line) {
if (strpos($line, "--") !== 0 && $line) {
- if (!$this->pdo->query($line)) {
+
+ if ($html_output)
+ print "<pre>$line</pre>";
+ else
+ Debug::log("> $line");
+
+ try {
+ $this->pdo->query($line); // PDO returns errors as exceptions now
+ } catch (PDOException $e) {
if ($html_output) {
- print_notice("Query: $line");
- print_error("Error: " . implode(", ", $this->pdo->errorInfo()));
+ print "<div class='text-error'>Error: " . $e->getMessage() . "</div>";
} else {
- Debug::log("Query: $line");
- Debug::log("Error: " . implode(", ", $this->pdo->errorInfo()));
+ Debug::log("Error: " . $e->getMessage());
}
+ $this->pdo->rollBack();
return false;
}
}
@@ -73,4 +80,4 @@ class DbUpdater {
}
}
-} \ No newline at end of file
+}
diff --git a/classes/digest.php b/classes/digest.php
index 0d2cac77e..f2533d160 100644
--- a/classes/digest.php
+++ b/classes/digest.php
@@ -166,6 +166,15 @@ class Digest
$line['feed_title'] = $line['cat_title'] . " / " . $line['feed_title'];
}
+ $article_labels = Article::get_article_labels($line["ref_id"], $user_id);
+ $article_labels_formatted = "";
+
+ if (is_array($article_labels) && count($article_labels) > 0) {
+ $article_labels_formatted = implode(", ", array_map(function($a) {
+ return $a[1];
+ }, $article_labels));
+ }
+
$tpl->setVariable('FEED_TITLE', $line["feed_title"]);
$tpl->setVariable('ARTICLE_TITLE', $line["title"]);
$tpl->setVariable('ARTICLE_LINK', $line["link"]);
@@ -174,6 +183,7 @@ class Digest
truncate_string(strip_tags($line["content"]), 300));
// $tpl->setVariable('ARTICLE_CONTENT',
// strip_tags($article_content));
+ $tpl->setVariable('ARTICLE_LABELS', $article_labels_formatted, true);
$tpl->addBlock('article');
@@ -181,8 +191,9 @@ class Digest
$tpl_t->setVariable('ARTICLE_TITLE', $line["title"]);
$tpl_t->setVariable('ARTICLE_LINK', $line["link"]);
$tpl_t->setVariable('ARTICLE_UPDATED', $updated);
-// $tpl_t->setVariable('ARTICLE_EXCERPT',
-// truncate_string(strip_tags($line["excerpt"]), 100));
+ $tpl_t->setVariable('ARTICLE_LABELS', $article_labels_formatted, true);
+ $tpl_t->setVariable('ARTICLE_EXCERPT',
+ truncate_string(strip_tags($line["content"]), 300, "..."), true);
$tpl_t->addBlock('article');
diff --git a/classes/dlg.php b/classes/dlg.php
index 89b88825e..4489af51a 100644
--- a/classes/dlg.php
+++ b/classes/dlg.php
@@ -14,7 +14,7 @@ class Dlg extends Handler_Protected {
}
function importOpml() {
- print __("If you have imported labels and/or filters, you might need to reload preferences to see your new data.") . "</p>";
+ print_notice("If you have imported labels and/or filters, you might need to reload preferences to see your new data.");
print "<div class='panel panel-scrollable'>";
@@ -24,11 +24,11 @@ class Dlg extends Handler_Protected {
print "</div>";
- print "<div align='center'>";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('opmlImportDlg').execute()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
print "</div>";
@@ -38,25 +38,25 @@ class Dlg extends Handler_Protected {
function pubOPMLUrl() {
$url_path = Opml::opml_publish_url();
- print "<div class='dlgSec'>" . __("Your Public OPML URL is:") . "</div>";
+ print "<header>" . __("Your Public OPML URL is:") . "</header>";
- print "<div class='dlgSecCont'>";
+ print "<section>";
print "<div class='panel text-center'>";
print "<a id='pub_opml_url' href='$url_path' target='_blank'>$url_path</a>";
print "</div>";
- print "</div>";
+ print "</section>";
- print "<div align='center'>";
+ print "<footer class='text-center'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return Helpers.OPML.changeKey()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return Helpers.OPML.changeKey()\">".
__('Generate new URL')."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return CommonDialogs.closeInfoBox()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return CommonDialogs.closeInfoBox()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
//return;
}
@@ -84,12 +84,10 @@ class Dlg extends Handler_Protected {
print "</div>";
- print "<div align='center'>";
-
+ print "<footer class='text-center'>";
print "<button onclick=\"return CommonDialogs.closeInfoBox()\">".
__('Close this window')."</button>";
-
- print "</div>";
+ print "</footer>";
//return;
}
@@ -149,11 +147,11 @@ class Dlg extends Handler_Protected {
print "</div>";
- print "<div align='center'>";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button'
onclick=\"return CommonDialogs.closeInfoBox()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -169,15 +167,15 @@ class Dlg extends Handler_Protected {
$feed_title = Feeds::getFeedTitle($feed_id, $is_cat);
- print "<div class='dlgSec'>".T_sprintf("%s can be accessed via the following secret URL:", $feed_title)."</div>";
+ print "<header>".T_sprintf("%s can be accessed via the following secret URL:", $feed_title)."</header>";
- print "<div class='dlgSecCont'>";
+ print "<section>";
print "<div class='panel text-center'>";
print "<a id='gen_feed_url' href='$url_path' target='_blank'>$url_path</a>";
print "</div>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgButtons'>";
+ print "<footer>";
print "<button dojoType='dijit.form.Button' style='float : left' class='alt-info' onclick='window.open(\"https://tt-rss.org/wiki/GeneratedFeeds\")'>
<i class='material-icons'>help</i> ".__("More info...")."</button>";
@@ -188,7 +186,7 @@ class Dlg extends Handler_Protected {
print "<button dojoType='dijit.form.Button' onclick=\"return CommonDialogs.closeInfoBox()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
//return;
}
@@ -197,12 +195,12 @@ class Dlg extends Handler_Protected {
print_warning(__("You are using default tt-rss password. Please change it in the Preferences (Personal data / Authentication)."));
- print "<div align='center'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"document.location.href = 'prefs.php'\">".
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button' onclick=\"document.location.href = 'prefs.php'\">".
__('Open Preferences')."</button> ";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<button dojoType='dijit.form.Button'
onclick=\"return CommonDialogs.closeInfoBox()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footeer>";
}
}
diff --git a/classes/feedparser.php b/classes/feedparser.php
index dc67e204e..9677164d3 100644
--- a/classes/feedparser.php
+++ b/classes/feedparser.php
@@ -13,20 +13,6 @@ class FeedParser {
const FEED_RSS = 1;
const FEED_ATOM = 2;
- function normalize_encoding($data) {
- if (preg_match('/^(<\?xml[\t\n\r ].*?encoding[\t\n\r ]*=[\t\n\r ]*["\'])(.+?)(["\'].*?\?>)/s', $data, $matches) === 1) {
-
- $encoding = strtolower($matches[2]);
-
- if (in_array($encoding, array_map('strtolower', mb_list_encodings())))
- $data = mb_convert_encoding($data, 'UTF-8', $encoding);
-
- $data = preg_replace('/^<\?xml[\t\n\r ].*?\?>/s', $matches[1] . "UTF-8" . $matches[3] , $data);
- }
-
- return $data;
- }
-
function __construct($data) {
libxml_use_internal_errors(true);
libxml_clear_errors();
@@ -37,46 +23,6 @@ class FeedParser {
$error = libxml_get_last_error();
- // libxml compiled without iconv?
- if ($error && $error->code == 32) {
- $data = $this->normalize_encoding($data);
-
- if ($data) {
- libxml_clear_errors();
-
- $this->doc = new DOMDocument();
- $this->doc->loadXML($data);
-
- $error = libxml_get_last_error();
- }
- }
-
- // some terrible invalid unicode entity?
- if ($error) {
- foreach (libxml_get_errors() as $err) {
- if ($err->code == 9) {
- // if the source feed is not in utf8, next conversion will fail
- $data = $this->normalize_encoding($data);
-
- // remove dangling bytes
- $data = mb_convert_encoding($data, 'UTF-8', 'UTF-8');
-
- // apparently not all UTF-8 characters are valid for XML
- $data = preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $data);
-
- if ($data) {
- libxml_clear_errors();
-
- $this->doc = new DOMDocument();
- $this->doc->loadXML($data);
-
- $error = libxml_get_last_error();
- }
- break;
- }
- }
- }
-
if ($error) {
foreach (libxml_get_errors() as $error) {
if ($error->level == LIBXML_ERR_FATAL) {
@@ -237,10 +183,12 @@ class FeedParser {
}
}
+ // libxml may have invalid unicode data in error messages
function error() {
- return $this->error;
+ return UConverter::transcode($this->error, 'UTF-8', 'UTF-8');
}
+ // WARNING: may return invalid unicode data
function errors() {
return $this->libxml_errors;
}
diff --git a/classes/feeds.php b/classes/feeds.php
index aac9b627f..86fa45ea7 100755
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -6,7 +6,7 @@ class Feeds extends Handler_Protected {
private $params;
function csrf_ignore($method) {
- $csrf_ignored = array("index", "feedbrowser", "quickaddfeed", "search");
+ $csrf_ignored = array("index", "quickaddfeed", "search");
return array_search($method, $csrf_ignored) !== false;
}
@@ -54,7 +54,7 @@ class Feeds extends Handler_Protected {
$reply .= "<span class=\"right\">";
$reply .= "<span id='selected_prompt'></span>";
$reply .= "&nbsp;";
- $reply .= "<select dojoType=\"dijit.form.Select\"
+ $reply .= "<select dojoType=\"fox.form.Select\"
onchange=\"Headlines.onActionChanged(this)\">";
$reply .= "<option value=\"0\" disabled='1'>".__('Select...')."</option>";
@@ -210,6 +210,8 @@ class Feeds extends Handler_Protected {
$highlight_words = $qfh_ret[5];
$reply['first_id'] = $qfh_ret[6];
$reply['is_vfeed'] = $qfh_ret[7];
+ $query_error_override = $qfh_ret[8];
+
$reply['search_query'] = [$search, $search_language];
$reply['vfeed_group_enabled'] = $vfeed_group_enabled;
@@ -387,28 +389,32 @@ class Feeds extends Handler_Protected {
if (is_object($result)) {
- switch ($view_mode) {
- case "unread":
- $message = __("No unread articles found to display.");
- break;
- case "updated":
- $message = __("No updated articles found to display.");
- break;
- case "marked":
- $message = __("No starred articles found to display.");
- break;
- default:
- if ($feed < LABEL_BASE_INDEX) {
- $message = __("No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter.");
- } else {
- $message = __("No articles found to display.");
- }
+ if ($query_error_override) {
+ $message = $query_error_override;
+ } else {
+ switch ($view_mode) {
+ case "unread":
+ $message = __("No unread articles found to display.");
+ break;
+ case "updated":
+ $message = __("No updated articles found to display.");
+ break;
+ case "marked":
+ $message = __("No starred articles found to display.");
+ break;
+ default:
+ if ($feed < LABEL_BASE_INDEX) {
+ $message = __("No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter.");
+ } else {
+ $message = __("No articles found to display.");
+ }
+ }
}
if (!$offset && $message) {
$reply['content'] = "<div class='whiteBox'>$message";
- $reply['content'] .= "<p><span class=\"insensitive\">";
+ $reply['content'] .= "<p><span class=\"text-muted\">";
$sth = $this->pdo->prepare("SELECT " . SUBSTRING_FOR_DATE . "(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds
WHERE owner_uid = ?");
@@ -428,7 +434,7 @@ class Feeds extends Handler_Protected {
if ($num_errors > 0) {
$reply['content'] .= "<br/>";
- $reply['content'] .= "<a class=\"insensitive\" href=\"#\" onclick=\"CommonDialogs.showFeedsWithErrors()\">" .
+ $reply['content'] .= "<a class=\"text-muted\" href=\"#\" onclick=\"CommonDialogs.showFeedsWithErrors()\">" .
__('Some feeds have update errors (click for details)') . "</a>";
}
$reply['content'] .= "</span></p></div>";
@@ -585,7 +591,7 @@ class Feeds extends Handler_Protected {
$reply['headlines']['content'] = "<div class='whiteBox'>".__('No feed selected.');
- $reply['headlines']['content'] .= "<p><span class=\"insensitive\">";
+ $reply['headlines']['content'] .= "<p><span class=\"text-muted\">";
$sth = $this->pdo->prepare("SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds
WHERE owner_uid = ?");
@@ -605,7 +611,7 @@ class Feeds extends Handler_Protected {
if ($num_errors > 0) {
$reply['headlines']['content'] .= "<br/>";
- $reply['headlines']['content'] .= "<a class=\"insensitive\" href=\"#\" onclick=\"CommonDialogs.showFeedsWithErrors()\">".
+ $reply['headlines']['content'] .= "<a class=\"text-muted\" href=\"#\" onclick=\"CommonDialogs.showFeedsWithErrors()\">".
__('Some feeds have update errors (click for details)')."</a>";
}
$reply['headlines']['content'] .= "</span></p>";
@@ -645,132 +651,72 @@ class Feeds extends Handler_Protected {
print_notice("Provided URL is a HTML page referencing multiple feeds, please select required feed from the dropdown menu below.");
print "<p></div>";
- //print "<div class=\"dlgSec\">".__("Feed or site URL")."</div>";
- print "<div class=\"dlgSecCont\">";
-
- print "<div style='float : right'>
- <img style='display : none'
- id='feed_add_spinner' src='images/indicator_white.gif'></div>";
+ print "<section>";
print "<fieldset>";
-
- print "<input style=\"font-size : 16px; width : 540px;\"
+ print "<div style='float : right'><img style='display : none' id='feed_add_spinner' src='images/indicator_white.gif'></div>";
+ print "<input style='font-size : 16px; width : 500px;'
placeHolder=\"".__("Feed or site URL")."\"
- dojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"feed\" id=\"feedDlg_feedUrl\">";
+ dojoType='dijit.form.ValidationTextBox' required='1' name='feed' id='feedDlg_feedUrl'>";
print "</fieldset>";
print "<fieldset>";
if (get_pref('ENABLE_FEED_CATS')) {
- print "<label>" . __('Place in category:') . "</label> ";
- print_feed_cat_select("cat", false, 'dojoType="dijit.form.Select"');
+ print "<label class='inline'>" . __('Place in category:') . "</label> ";
+ print_feed_cat_select("cat", false, 'dojoType="fox.form.Select"');
}
print "</fieldset>";
- print "</div>";
+ print "</section>";
print '<div id="feedDlg_feedsContainer" style="display : none">
-
- <div class="dlgSec">' . __('Available feeds') . '</div>
- <div class="dlgSecCont">
+ <header>' . __('Available feeds') . '</header>
+ <section>
<fieldset>
<select id="feedDlg_feedContainerSelect"
- dojoType="dijit.form.Select" size="3">
+ dojoType="fox.form.Select" size="3">
<script type="dojo/method" event="onChange" args="value">
dijit.byId("feedDlg_feedUrl").attr("value", value);
</script>
</select>
</fieldset>
- </div></div>';
+ </section>
+ </div>';
print "<div id='feedDlg_loginContainer' style='display : none'>
-
- <div class=\"dlgSec\">".__("Authentication")."</div>
- <div class=\"dlgSecCont\">
+ <section>
<fieldset>
<input dojoType=\"dijit.form.TextBox\" name='login'\"
placeHolder=\"".__("Login")."\"
autocomplete=\"new-password\"
style=\"width : 10em;\">
- </fieldset><fieldset>
<input
placeHolder=\"".__("Password")."\"
dojoType=\"dijit.form.TextBox\" type='password'
autocomplete=\"new-password\"
style=\"width : 10em;\" name='pass'\">
</fieldset>
- </div></div>";
-
+ </section>
+ </div>";
- print "<div style=\"clear : both\">
- <input type=\"checkbox\" name=\"need_auth\" dojoType=\"dijit.form.CheckBox\" id=\"feedDlg_loginCheck\"
+ print "<section>";
+ print "<label>
+ <label class='checkbox'><input type='checkbox' name='need_auth' dojoType='dijit.form.CheckBox' id='feedDlg_loginCheck'
onclick='displayIfChecked(this, \"feedDlg_loginContainer\")'>
- <label for=\"feedDlg_loginCheck\">".
- __('This feed requires authentication.')."</div>";
-
- print "<div class=\"dlgButtons\">
- <button dojoType=\"dijit.form.Button\" class=\"alt-primary\" type=\"submit\" onclick=\"return dijit.byId('feedAddDlg').execute()\">".__('Subscribe')."</button>";
+ ".__('This feed requires authentication.')."</label>";
+ print "</section>";
- if (!(defined('_DISABLE_FEED_BROWSER') && _DISABLE_FEED_BROWSER)) {
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return CommonDialogs.feedBrowser()\">".__('More feeds')."</button>";
- }
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button' class='alt-primary' type='submit'
+ onclick=\"return dijit.byId('feedAddDlg').execute()\">".__('Subscribe')."</button>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedAddDlg').hide()\">".__('Cancel')."</button>
- </div>";
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('feedAddDlg').hide()\">".__('Cancel')."</button>";
+ print "</footer>";
print "</form>";
-
- //return;
- }
-
- function feedBrowser() {
- if (defined('_DISABLE_FEED_BROWSER') && _DISABLE_FEED_BROWSER) return;
-
- $browser_search = $_REQUEST["search"];
-
- print_hidden("op", "rpc");
- print_hidden("method", "updateFeedBrowser");
-
- print "<div dojoType=\"dijit.Toolbar\">
- <div style='float : right'>
- <img style='display : none'
- id='feed_browser_spinner' src='images/indicator_white.gif'>
- <input name=\"search\" dojoType=\"dijit.form.TextBox\" size=\"20\" type=\"search\"
- onchange=\"dijit.byId('feedBrowserDlg').update()\" value=\"$browser_search\">
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedBrowserDlg').update()\">".__('Search')."</button>
- </div>";
-
- print " <select name=\"mode\" dojoType=\"dijit.form.Select\" onchange=\"dijit.byId('feedBrowserDlg').update()\">
- <option value='1'>" . __('Popular feeds') . "</option>
- <option value='2'>" . __('Feed archive') . "</option>
- </select> ";
-
- print __("limit:");
-
- print " <select dojoType=\"dijit.form.Select\" name=\"limit\" onchange=\"dijit.byId('feedBrowserDlg').update()\">";
-
- foreach (array(25, 50, 100, 200) as $l) {
- //$issel = ($l == $limit) ? "selected=\"1\"" : "";
- print "<option value=\"$l\">$l</option>";
- }
-
- print "</select> ";
-
- print "</div>";
-
- require_once "feedbrowser.php";
-
- print "<ul class='browseFeedList' id='browseFeedList'>";
- print make_feed_browser("", 25);
- print "</ul>";
-
- print "<div align='center'>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedBrowserDlg').execute()\">".__('Subscribe')."</button>
- <button dojoType=\"dijit.form.Button\" style='display : none' id='feed_archive_remove' onclick=\"dijit.byId('feedBrowserDlg').removeFromArchive()\">".__('Remove')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedBrowserDlg').hide()\" >".__('Cancel')."</button></div>";
-
}
function search() {
@@ -781,38 +727,36 @@ class Feeds extends Handler_Protected {
print "<form onsubmit='return false;'>";
- //print "<div class=\"dlgSec\">".__('Look for')."</div>";
-
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.ValidationTextBox\"
- style=\"font-size : 16px; width : 540px;\"
+ print "<input dojoType='dijit.form.ValidationTextBox' id='search_query'
+ style='font-size : 16px; width : 540px;'
placeHolder=\"".T_sprintf("Search %s...", $this->getFeedTitle($active_feed_id, $is_cat))."\"
- required=\"1\" name=\"query\" type=\"search\" value=''>";
+ name='query' type='search' value=''>";
print "</fieldset>";
-
if (DB_TYPE == "pgsql") {
print "<fieldset>";
- print "<label>" . __("Language:") . "</label>";
- print_select("search_language", "", Pref_Feeds::get_ts_languages(),
- "dojoType='dijit.form.Select' title=\"".__('Used for word stemming')."\"");
+ print "<label class='inline'>" . __("Language:") . "</label>";
+ print_select("search_language", get_pref('DEFAULT_SEARCH_LANGUAGE'), Pref_Feeds::get_ts_languages(),
+ "dojoType='fox.form.Select' title=\"".__('Used for word stemming')."\"");
print "</fieldset>";
}
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
if (count(PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH)) == 0) {
print "<button dojoType='dijit.form.Button' style='float : left' class='alt-info' onclick='window.open(\"https://tt-rss.org/wiki/SearchSyntax\")'>
<i class='material-icons'>help</i> ".__("Search syntax")."</button>";
}
- print "<button dojoType=\"dijit.form.Button\" type=\"submit\" class=\"alt-primary\" onclick=\"dijit.byId('searchDlg').execute()\">".__('Search')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('searchDlg').hide()\">".__('Cancel')."</button>
- </div>";
+ print "<button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"dijit.byId('searchDlg').execute()\">".__('Search')."</button>
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('searchDlg').hide()\">".__('Cancel')."</button>";
+
+ print "</footer>";
print "</form>";
}
@@ -839,6 +783,7 @@ class Feeds extends Handler_Protected {
$rehash_checked = isset($_REQUEST["force_rehash"]) ? "checked" : "";
?>
+ <!DOCTYPE html>
<html>
<head>
<?php echo stylesheet_tag("css/default.css") ?>
@@ -905,9 +850,23 @@ class Feeds extends Handler_Protected {
$pdo = Db::pdo();
- // Todo: all this interval stuff needs some generic generator function
+ if (is_array($search) && $search[0]) {
+ $search_qpart = "";
- $search_qpart = is_array($search) && $search[0] ? search_to_sql($search[0], $search[1])[0] : 'true';
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH) as $plugin) {
+ list($search_qpart, $search_words) = $plugin->hook_search($search[0]);
+ break;
+ }
+
+ // fall back in case of no plugins
+ if (!$search_qpart) {
+ list($search_qpart, $search_words) = search_to_sql($search[0], $search[1]);
+ }
+ } else {
+ $search_qpart = "true";
+ }
+
+ // TODO: all this interval stuff needs some generic generator function
switch ($mode) {
case "1day":
@@ -1172,6 +1131,7 @@ class Feeds extends Handler_Protected {
global $fetch_last_error;
global $fetch_last_error_content;
+ global $fetch_last_content_type;
$pdo = Db::pdo();
@@ -1193,7 +1153,7 @@ class Feeds extends Handler_Protected {
return array("code" => 5, "message" => $fetch_last_error);
}
- if (is_html($contents)) {
+ if (mb_strpos($fetch_last_content_type, "html") !== FALSE && is_html($contents)) {
$feedUrls = get_feeds_from_html($url, $contents);
if (count($feedUrls) == 0) {
@@ -1482,10 +1442,13 @@ class Feeds extends Handler_Protected {
$ext_tables_part = "";
$limit_query_part = "";
+ $query_error_override = "";
- $search_words = array();
+ $search_words = [];
if ($search) {
+ $search_query_part = "";
+
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH) as $plugin) {
list($search_query_part, $search_words) = $plugin->hook_search($search);
break;
@@ -1495,6 +1458,21 @@ class Feeds extends Handler_Protected {
if (!$search_query_part) {
list($search_query_part, $search_words) = search_to_sql($search, $search_language);
}
+
+ if (DB_TYPE == "pgsql") {
+ $test_sth = $pdo->prepare("select $search_query_part
+ FROM ttrss_entries, ttrss_user_entries WHERE id = ref_id limit 1");
+
+ try {
+ $test_sth->execute();
+ } catch (PDOException $e) {
+ // looks like tsquery syntax is invalid
+ $search_query_part = "false";
+
+ $query_error_override = T_sprintf("Incorrect search syntax: %s.", implode(" ", $search_words));
+ }
+ }
+
$search_query_part .= " AND ";
} else {
$search_query_part = "";
@@ -1786,7 +1764,7 @@ class Feeds extends Handler_Protected {
$first_id = (int)$row["id"];
if ($offset > 0 && $first_id && $check_first_id && $first_id != $check_first_id) {
- return array(-1, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words, $first_id, $vfeed_query_part != "");
+ return array(-1, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words, $first_id, $vfeed_query_part != "", $query_error_override);
}
}
}
@@ -1875,7 +1853,7 @@ class Feeds extends Handler_Protected {
$res = $pdo->query($query);
}
- return array($res, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words, $first_id, $vfeed_query_part != "");
+ return array($res, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words, $first_id, $vfeed_query_part != "", $query_error_override);
}
diff --git a/classes/handler/public.php b/classes/handler/public.php
index 37fe8612a..318cecd72 100755
--- a/classes/handler/public.php
+++ b/classes/handler/public.php
@@ -329,7 +329,7 @@ class Handler_Public extends Handler {
if (!$og_image) {
$tmpdoc = new DOMDocument();
- if (@$tmpdoc->loadHTML(mb_substr($content, 0, 131070))) {
+ if (@$tmpdoc->loadHTML('<?xml encoding="UTF-8">' . mb_substr($content, 0, 131070))) {
$tmpxpath = new DOMXPath($tmpdoc);
$imgs = $tmpxpath->query("//img");
@@ -388,23 +388,29 @@ class Handler_Public extends Handler {
$rv .= "<!DOCTYPE html>
<html><head>
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
<title>".$line["title"]."</title>".
stylesheet_tag("css/default.css")."
- <link rel=\"shortcut icon\" type=\"image/png\" href=\"images/favicon.png\">
- <link rel=\"icon\" type=\"image/png\" sizes=\"72x72\" href=\"images/favicon-72px.png\">";
-
- $rv .= "<meta property=\"og:title\" content=\"".htmlspecialchars($line["title"])."\"/>\n";
- $rv .= "<meta property=\"og:site_name\" content=\"".htmlspecialchars($line["feed_title"])."\"/>\n";
- $rv .= "<meta property=\"og:description\" content=\"".
- htmlspecialchars(truncate_string(strip_tags($line["content"]), 500, "..."))."\"/>\n";
+ <link rel='shortcut icon' type='image/png' href='images/favicon.png'>
+ <link rel='icon' type='image/png' sizes='72x72' href='images/favicon-72px.png'>";
+
+ $rv .= "<meta property='og:title' content=\"".htmlspecialchars(html_entity_decode($line["title"], ENT_NOQUOTES | ENT_HTML401))."\"/>\n";
+ $rv .= "<meta property='og:description' content=\"".
+ htmlspecialchars(
+ truncate_string(
+ preg_replace("/[\r\n\t]/", "",
+ preg_replace("/ {1,}/", " ",
+ strip_tags(html_entity_decode($line["content"], ENT_NOQUOTES | ENT_HTML401))
+ )
+ ), 500, "...")
+ )."\"/>\n";
$rv .= "</head>";
$og_image = $this->get_article_image($enclosures, $line['content'], $line["site_url"]);
if ($og_image) {
- $rv .= "<meta property=\"og:image\" content=\"" . htmlspecialchars($og_image) . "\"/>";
+ $rv .= "<meta property='og:image' content=\"" . htmlspecialchars($og_image) . "\"/>";
}
$rv .= "<body class='flat ttrss_utility ttrss_zoom'>";
@@ -439,7 +445,7 @@ class Handler_Public extends Handler {
/* content */
$lang = $line['lang'] ? $line['lang'] : "en";
- $rv .= "<div class=\"content\" lang=\"$lang\">";
+ $rv .= "<div class='content' lang='$lang'>";
/* content body */
@@ -525,6 +531,7 @@ class Handler_Public extends Handler {
header('Content-Type: text/html; charset=utf-8');
?>
+ <!DOCTYPE html>
<html>
<head>
<title><?php echo __("Share with Tiny Tiny RSS") ?> ?></title>
@@ -612,7 +619,7 @@ class Handler_Public extends Handler {
<fieldset>
<button dojoType='dijit.form.Button' class="alt-primary" type="submit"><?php echo __('Share') ?></button>
<button dojoType='dijit.form.Button' onclick="return window.close()"><?php echo __('Cancel') ?></button>
- <span class="insensitive small"><?php echo __("Shared article will appear in the Published feed.") ?></span>
+ <span class="text-muted small"><?php echo __("Shared article will appear in the Published feed.") ?></span>
</fieldset>
</form>
@@ -622,7 +629,7 @@ class Handler_Public extends Handler {
} else {
- $return = urlencode($_SERVER["REQUEST_URI"])
+ $return = urlencode(make_self_url());
?>
@@ -711,7 +718,9 @@ class Handler_Public extends Handler {
user_error("Failed login attempt for $login from {$_SERVER['REMOTE_ADDR']}", E_USER_WARNING);
}
- if (clean($_REQUEST['return'])) {
+ $return = clean($_REQUEST['return']);
+
+ if ($_REQUEST['return'] && mb_strpos($return, SELF_URL_PATH) === 0) {
header("Location: " . clean($_REQUEST['return']));
} else {
header("Location: " . get_self_url_prefix());
@@ -742,6 +751,7 @@ class Handler_Public extends Handler {
header('Content-Type: text/html; charset=utf-8');
?>
+ <!DOCTYPE html>
<html>
<head>
<title>Tiny Tiny RSS</title>
@@ -770,7 +780,21 @@ class Handler_Public extends Handler {
<?php
if (!$feed_url) {
- print_error("No feed to subscribe to.");
+ ?>
+ <form method="post">
+ <input type="hidden" name="op" value="subscribe">
+ <fieldset>
+ <label>Feed or site URL:</label>
+ <input style="width: 300px" dojoType="dijit.form.ValidationTextBox" required="1" name="feed_url">
+ </fieldset>
+
+ <button class="alt-primary" dojoType="dijit.form.Button" type="submit">
+ <?php echo __("Subscribe") ?>
+ </button>
+
+ <a href="index.php"><?php echo __("Return to Tiny Tiny RSS") ?></a>
+ </form>
+ <?php
} else {
$rc = Feeds::subscribe_to_feed($feed_url);
@@ -814,9 +838,11 @@ class Handler_Public extends Handler {
}
print "</select>";
- print "<button class='alt-primary' dojoType='dijit.form.Button' type='submit'>".__("Subscribe to selected feed")."</button>";
print "</fieldset>";
+ print "<button class='alt-primary' dojoType='dijit.form.Button' type='submit'>".__("Subscribe to selected feed")."</button>";
+ print "<a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>";
+
print "</form>";
}
@@ -832,20 +858,18 @@ class Handler_Public extends Handler {
} else {
$feed_id = 0;
}
- print "<p>";
if ($feed_id) {
- print "<form method='GET' style='float : left' action=\"$tp_uri\">
+ print "<form method='GET' action=\"$tp_uri\">
<input type='hidden' name='tab' value='feedConfig'>
<input type='hidden' name='method' value='editfeed'>
<input type='hidden' name='methodparam' value='$feed_id'>
<button dojoType='dijit.form.Button' class='alt-info' type='submit'>".__("Edit subscription options")."</button>
+ <a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>
</form>";
}
}
- print "<a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>";
-
print "</div></div></body></html>";
} else {
@@ -866,7 +890,7 @@ class Handler_Public extends Handler {
header('Content-Type: text/html; charset=utf-8');
?>
-
+ <!DOCTYPE html>
<html>
<head>
<title>Tiny Tiny RSS</title>
@@ -941,12 +965,12 @@ class Handler_Public extends Handler {
print "<form method='POST' action='public.php'>
<input type='hidden' name='method' value='do'>
<input type='hidden' name='op' value='forgotpass'>
-
+
<fieldset>
<label>".__("Login:")."</label>
<input dojoType='dijit.form.TextBox' type='text' name='login' value='' required>
</fieldset>
-
+
<fieldset>
<label>".__("Email:")."</label>
<input dojoType='dijit.form.TextBox' type='email' name='email' value='' required>
@@ -959,13 +983,13 @@ class Handler_Public extends Handler {
<label>".T_sprintf("How much is %d + %d:", $_SESSION["pwdreset:testvalue1"], $_SESSION["pwdreset:testvalue2"])."</label>
<input dojoType='dijit.form.TextBox' type='text' name='test' value='' required>
</fieldset>
-
+
<hr/>
<fieldset>
<button dojoType='dijit.form.Button' type='submit' class='alt-danger'>".__("Reset password")."</button>
<a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>
</fieldset>
-
+
</form>";
} else if ($method == 'do') {
@@ -1018,7 +1042,7 @@ class Handler_Public extends Handler {
$mailer = new Mailer();
- $rc = $mailer->mail(["to_name" => $login,
+ $rc = $mailer->mail(["to_name" => $login,
"to_address" => $email,
"subject" => __("[tt-rss] Password reset request"),
"message" => $message]);
@@ -1033,8 +1057,6 @@ class Handler_Public extends Handler {
$sth->execute([$resetpass_token_full, $login, $email]);
- //Pref_Users::resetUserPassword($id, false);
-
} else {
print_error("User ID not found.");
}
@@ -1071,6 +1093,7 @@ class Handler_Public extends Handler {
}
?>
+ <!DOCTYPE html>
<html>
<head>
<title>Database Updater</title>
@@ -1116,32 +1139,35 @@ class Handler_Public extends Handler {
if ($op == "performupdate") {
if ($updater->isUpdateRequired()) {
- print "<h2>" . __("Performing updates") . "</h2>";
-
- print "<h3>" . T_sprintf("Updating to schema version %d", SCHEMA_VERSION) . "</h3>";
-
- print "<ul>";
+ print "<h2>" . T_sprintf("Performing updates to version %d", SCHEMA_VERSION) . "</h2>";
for ($i = $updater->getSchemaVersion() + 1; $i <= SCHEMA_VERSION; $i++) {
- print "<li>" . T_sprintf("Performing update up to version %d...", $i);
+ print "<ul>";
+
+ print "<li class='text-info'>" . T_sprintf("Updating to version %d", $i) . "</li>";
+ print "<li>";
$result = $updater->performUpdateTo($i, true);
+ print "</li>";
if (!$result) {
- print "<span class='err'>".__("FAILED!")."</span></li></ul>";
+ print "</ul>";
- print_warning("One of the updates failed. Either retry the process or perform updates manually.");
+ print_error("One of the updates failed. Either retry the process or perform updates manually.");
- print "<a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>";
+ print "<form method='POST'>
+ <input type='hidden' name='subop' value='performupdate'>
+ <button type='submit' dojoType='dijit.form.Button' class='alt-danger' onclick='return confirmOP()'>".__("Try again")."</button>
+ <a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>
+ </form>";
return;
} else {
- print "<span class='ok'>".__("OK!")."</span></li>";
+ print "<li class='text-success'>" . __("Completed.") . "</li>";
+ print "</ul>";
}
}
- print "</ul>";
-
print_notice("Your Tiny Tiny RSS database is now updated to the latest version.");
print "<a href='index.php'>".__("Return to Tiny Tiny RSS")."</a>";
@@ -1154,14 +1180,15 @@ class Handler_Public extends Handler {
} else {
if ($updater->isUpdateRequired()) {
- print "<h2>" . __("Database update required") . "</h2>";
-
- print_notice("<h4>".
- sprintf("Your Tiny Tiny RSS database needs update to the latest version: %d to %d.",
- $updater->getSchemaVersion(), SCHEMA_VERSION).
- "</h4>");
+ print "<h2>".T_sprintf("Tiny Tiny RSS database needs update to the latest version (%d to %d).",
+ $updater->getSchemaVersion(), SCHEMA_VERSION)."</h2>";
- print_warning("Please backup your database before proceeding.");
+ if (DB_TYPE == "mysql") {
+ print_error("<strong>READ THIS:</strong> Due to MySQL limitations, your database is not completely protected while updating. ".
+ "Errors may put it in an inconsistent state requiring manual rollback. <strong>BACKUP YOUR DATABASE BEFORE CONTINUING.</strong>");
+ } else {
+ print_warning("Please backup your database before proceeding.");
+ }
print "<form method='POST'>
<input type='hidden' name='subop' value='performupdate'>
diff --git a/classes/logger/sql.php b/classes/logger/sql.php
index 73552c143..352d71324 100755
--- a/classes/logger/sql.php
+++ b/classes/logger/sql.php
@@ -12,6 +12,14 @@ class Logger_SQL {
$owner_uid = $_SESSION["uid"] ? $_SESSION["uid"] : null;
+ if (DB_TYPE == "mysql")
+ $context = substr($context, 0, 65534);
+
+ // passed error message may contain invalid unicode characters, failing to insert an error here
+ // would break the execution entirely by generating an actual fatal error instead of a E_WARNING etc
+ $errstr = UConverter::transcode($errstr, 'UTF-8', 'UTF-8');
+ $context = UConverter::transcode($context, 'UTF-8', 'UTF-8');
+
$sth = $this->pdo->prepare("INSERT INTO ttrss_error_log
(errno, errstr, filename, lineno, context, owner_uid, created_at) VALUES
(?, ?, ?, ?, ?, ?, NOW())");
diff --git a/classes/mailer.php b/classes/mailer.php
index fbdf111a7..2919eec79 100644
--- a/classes/mailer.php
+++ b/classes/mailer.php
@@ -19,7 +19,8 @@ class Mailer {
$from_combined = $from_name ? "$from_name <$from_address>" : $from_address;
$to_combined = $to_name ? "$to_name <$to_address>" : $to_address;
- Logger::get()->log("Sending mail from $from_combined to $to_combined <$to_address> [$subject]: $message");
+ if (defined('_LOG_SENT_MAIL') && _LOG_SENT_MAIL)
+ Logger::get()->log("Sending mail from $from_combined to $to_combined [$subject]: $message");
// HOOK_SEND_MAIL plugin instructions:
// 1. return 1 or true if mail is handled
diff --git a/classes/opml.php b/classes/opml.php
index fe43a096c..720798065 100644
--- a/classes/opml.php
+++ b/classes/opml.php
@@ -9,10 +9,10 @@ class Opml extends Handler_Protected {
function export() {
$output_name = "tt-rss_".date("Y-m-d").".opml";
- $show_settings = $_REQUEST["include_settings"];
+ $include_settings = $_REQUEST["include_settings"] == "1";
$owner_uid = $_SESSION["uid"];
- $rc = $this->opml_export($output_name, $owner_uid, false, ($show_settings == 1));
+ $rc = $this->opml_export($output_name, $owner_uid, false, $include_settings);
return $rc;
}
@@ -48,7 +48,7 @@ class Opml extends Handler_Protected {
// Export
- private function opml_export_category($owner_uid, $cat_id, $hide_private_feeds=false) {
+ private function opml_export_category($owner_uid, $cat_id, $hide_private_feeds = false, $include_settings = true) {
$cat_id = (int) $cat_id;
@@ -59,15 +59,25 @@ class Opml extends Handler_Protected {
$out = "";
+ $ttrss_specific_qpart = "";
+
if ($cat_id) {
- $sth = $this->pdo->prepare("SELECT title FROM ttrss_feed_categories WHERE id = ?
- AND owner_uid = ?");
+ $sth = $this->pdo->prepare("SELECT title,order_id
+ FROM ttrss_feed_categories WHERE id = ?
+ AND owner_uid = ?");
$sth->execute([$cat_id, $owner_uid]);
$row = $sth->fetch();
$cat_title = htmlspecialchars($row['title']);
+
+ if ($include_settings) {
+ $order_id = (int)$row["order_id"];
+ $ttrss_specific_qpart = "ttrssSortOrder=\"$order_id\"";
+ }
+ } else {
+ $cat_title = "";
}
- if ($cat_title) $out .= "<outline text=\"$cat_title\">\n";
+ if ($cat_title) $out .= "<outline text=\"$cat_title\" $ttrss_specific_qpart>\n";
$sth = $this->pdo->prepare("SELECT id,title
FROM ttrss_feed_categories WHERE
@@ -77,10 +87,10 @@ class Opml extends Handler_Protected {
$sth->execute([':cat' => $cat_id, ':uid' => $owner_uid]);
while ($line = $sth->fetch()) {
- $out .= $this->opml_export_category($owner_uid, $line["id"], $hide_private_feeds);
+ $out .= $this->opml_export_category($owner_uid, $line["id"], $hide_private_feeds, $include_settings);
}
- $fsth = $this->pdo->prepare("select title, feed_url, site_url
+ $fsth = $this->pdo->prepare("select title, feed_url, site_url, update_interval, order_id
FROM ttrss_feeds WHERE
(cat_id = :cat OR (:cat = 0 AND cat_id IS NULL)) AND owner_uid = :uid AND $hide_qpart
ORDER BY order_id, title");
@@ -92,13 +102,22 @@ class Opml extends Handler_Protected {
$url = htmlspecialchars($fline["feed_url"]);
$site_url = htmlspecialchars($fline["site_url"]);
+ if ($include_settings) {
+ $update_interval = (int)$fline["update_interval"];
+ $order_id = (int)$fline["order_id"];
+
+ $ttrss_specific_qpart = "ttrssSortOrder=\"$order_id\" ttrssUpdateInterval=\"$update_interval\"";
+ } else {
+ $ttrss_specific_qpart = "";
+ }
+
if ($site_url) {
$html_url_qpart = "htmlUrl=\"$site_url\"";
} else {
$html_url_qpart = "";
}
- $out .= "<outline type=\"rss\" text=\"$title\" xmlUrl=\"$url\" $html_url_qpart/>\n";
+ $out .= "<outline type=\"rss\" text=\"$title\" xmlUrl=\"$url\" $ttrss_specific_qpart $html_url_qpart/>\n";
}
if ($cat_title) $out .= "</outline>\n";
@@ -106,7 +125,7 @@ class Opml extends Handler_Protected {
return $out;
}
- function opml_export($name, $owner_uid, $hide_private_feeds=false, $include_settings=true) {
+ function opml_export($name, $owner_uid, $hide_private_feeds = false, $include_settings = true) {
if (!$owner_uid) return;
if (!isset($_REQUEST["debug"])) {
@@ -125,7 +144,7 @@ class Opml extends Handler_Protected {
</head>";
$out .= "<body>";
- $out .= $this->opml_export_category($owner_uid, 0, $hide_private_feeds);
+ $out .= $this->opml_export_category($owner_uid, 0, $hide_private_feeds, $include_settings);
# export tt-rss settings
@@ -176,7 +195,7 @@ class Opml extends Handler_Protected {
WHERE filter_id = ?");
$tmph->execute([$line['id']]);
- while ($tmp_line = $tmph->fetch()) {
+ while ($tmp_line = $tmph->fetch(PDO::FETCH_ASSOC)) {
unset($tmp_line["id"]);
unset($tmp_line["filter_id"]);
@@ -224,7 +243,7 @@ class Opml extends Handler_Protected {
WHERE filter_id = ?");
$tmph->execute([$line['id']]);
- while ($tmp_line = $tmph->fetch()) {
+ while ($tmp_line = $tmph->fetch(PDO::FETCH_ASSOC)) {
unset($tmp_line["id"]);
unset($tmp_line["filter_id"]);
@@ -298,11 +317,17 @@ class Opml extends Handler_Protected {
if (!$cat_id) $cat_id = null;
+ $update_interval = (int) $attrs->getNamedItem('ttrssUpdateInterval')->nodeValue;
+ if (!$update_interval) $update_interval = 0;
+
+ $order_id = (int) $attrs->getNamedItem('ttrssSortOrder')->nodeValue;
+ if (!$order_id) $order_id = 0;
+
$sth = $this->pdo->prepare("INSERT INTO ttrss_feeds
- (title, feed_url, owner_uid, cat_id, site_url, order_id) VALUES
- (?, ?, ?, ?, ?, 0)");
+ (title, feed_url, owner_uid, cat_id, site_url, order_id, update_interval) VALUES
+ (?, ?, ?, ?, ?, ?, ?)");
- $sth->execute([$feed_title, $feed_url, $owner_uid, $cat_id, $site_url]);
+ $sth->execute([$feed_title, $feed_url, $owner_uid, $cat_id, $site_url, $order_id, $update_interval]);
} else {
$this->opml_notice(T_sprintf("Duplicate feed: %s", $feed_title == '[Unknown]' ? $feed_url : $feed_title));
@@ -370,7 +395,7 @@ class Opml extends Handler_Protected {
$filter_id = $row['id'];
if ($filter_id) {
- $this->opml_notice(T_sprintf("Adding filter..."));
+ $this->opml_notice(T_sprintf("Adding filter %s...", $title));
foreach ($filter["rules"] as $rule) {
$feed_id = null;
@@ -387,8 +412,6 @@ class Opml extends Handler_Protected {
array_push($match_on, ($is_cat ? "CAT:" : "") . $name);
} else {
- $match_id = false;
-
if (!$is_cat) {
$tsth = $this->pdo->prepare("SELECT id FROM ttrss_feeds
WHERE title = ? AND owner_uid = ?");
@@ -397,6 +420,8 @@ class Opml extends Handler_Protected {
if ($row = $tsth->fetch()) {
$match_id = $row['id'];
+
+ array_push($match_on, $match_id);
}
} else {
$tsth = $this->pdo->prepare("SELECT id FROM ttrss_feed_categories
@@ -405,10 +430,10 @@ class Opml extends Handler_Protected {
if ($row = $tsth->fetch()) {
$match_id = $row['id'];
+
+ array_push($match_on, "CAT:$match_id");
}
}
-
- if ($match_id) array_push($match_on, $match_id);
}
}
@@ -487,7 +512,10 @@ class Opml extends Handler_Protected {
$cat_id = $this->get_feed_category($cat_title, $parent_id);
if ($cat_id === false) {
- add_feed_category($cat_title, $parent_id);
+ $order_id = (int) $root_node->attributes->getNamedItem('ttrssSortOrder')->nodeValue;
+ if (!$order_id) $order_id = 0;
+
+ add_feed_category($cat_title, $parent_id, $order_id);
$cat_id = $this->get_feed_category($cat_title, $parent_id);
}
diff --git a/classes/plugin.php b/classes/plugin.php
index b90c603b7..5ac4a6a9a 100644
--- a/classes/plugin.php
+++ b/classes/plugin.php
@@ -40,4 +40,21 @@ abstract class Plugin {
function api_version() {
return Plugin::API_VERSION_COMPAT;
}
-} \ No newline at end of file
+
+ /* gettext-related helpers */
+
+ function __($msgid) {
+ return _dgettext(PluginHost::object_to_domain($this), $msgid);
+ }
+
+ function _ngettext($singular, $plural, $number) {
+ return _dngettext(PluginHost::object_to_domain($this), $singular, $plural, $number);
+ }
+
+ function T_sprintf() {
+ $args = func_get_args();
+ $msgid = array_shift($args);
+
+ return vsprintf($this->__($msgid), $args);
+ }
+}
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
index 96b1ce499..a3c12ecae 100755
--- a/classes/pluginhost.php
+++ b/classes/pluginhost.php
@@ -58,11 +58,16 @@ class PluginHost {
const HOOK_UNSUBSCRIBE_FEED = 38;
const HOOK_SEND_MAIL = 39;
const HOOK_FILTER_TRIGGERED = 40;
+ const HOOK_GET_FULL_TEXT = 41;
const KIND_ALL = 1;
const KIND_SYSTEM = 2;
const KIND_USER = 3;
+ static function object_to_domain($plugin) {
+ return strtolower(get_class($plugin));
+ }
+
function __construct() {
$this->pdo = Db::pdo();
@@ -211,6 +216,11 @@ class PluginHost {
continue;
}
+ if (file_exists(dirname($file) . "/locale")) {
+ _bindtextdomain($class, dirname($file) . "/locale");
+ _bind_textdomain_codeset($class, "UTF-8");
+ }
+
$this->last_registered = $class;
switch ($kind) {
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index a033bf04f..6cbf15a58 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -66,9 +66,9 @@ class Pref_Feeds extends Handler_Protected {
$cat['items'] = array();
$cat['checkbox'] = false;
$cat['type'] = 'category';
- $cat['unread'] = 0;
- $cat['child_unread'] = 0;
- $cat['auxcounter'] = 0;
+ $cat['unread'] = -1;
+ $cat['child_unread'] = -1;
+ $cat['auxcounter'] = -1;
$cat['parent_id'] = $cat_id;
$cat['items'] = $this->get_category_items($line['id']);
@@ -95,10 +95,10 @@ class Pref_Feeds extends Handler_Protected {
$feed = array();
$feed['id'] = 'FEED:' . $feed_line['id'];
$feed['bare_id'] = (int)$feed_line['id'];
- $feed['auxcounter'] = 0;
+ $feed['auxcounter'] = -1;
$feed['name'] = $feed_line['title'];
$feed['checkbox'] = false;
- $feed['unread'] = 0;
+ $feed['unread'] = -1;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = Feeds::getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime(
@@ -153,14 +153,14 @@ class Pref_Feeds extends Handler_Protected {
$item = array();
$item['id'] = 'FEED:' . $feed_id;
$item['bare_id'] = (int)$feed_id;
- $item['auxcounter'] = 0;
+ $item['auxcounter'] = -1;
$item['name'] = $feed['title'];
$item['checkbox'] = false;
$item['error'] = '';
$item['icon'] = $feed['icon'];
$item['param'] = '';
- $item['unread'] = 0; //$feed['sender']->get_unread($feed['id']);
+ $item['unread'] = -1;
$item['type'] = 'feed';
array_push($cat['items'], $item);
@@ -218,13 +218,13 @@ class Pref_Feeds extends Handler_Protected {
$cat = array();
$cat['id'] = 'CAT:' . $line['id'];
$cat['bare_id'] = (int)$line['id'];
- $cat['auxcounter'] = 0;
+ $cat['auxcounter'] = -1;
$cat['name'] = $line['title'];
$cat['items'] = array();
$cat['checkbox'] = false;
$cat['type'] = 'category';
- $cat['unread'] = 0;
- $cat['child_unread'] = 0;
+ $cat['unread'] = -1;
+ $cat['child_unread'] = -1;
$cat['items'] = $this->get_category_items($line['id']);
@@ -242,13 +242,13 @@ class Pref_Feeds extends Handler_Protected {
$cat = array();
$cat['id'] = 'CAT:0';
$cat['bare_id'] = 0;
- $cat['auxcounter'] = 0;
+ $cat['auxcounter'] = -1;
$cat['name'] = __("Uncategorized");
$cat['items'] = array();
$cat['type'] = 'category';
$cat['checkbox'] = false;
- $cat['unread'] = 0;
- $cat['child_unread'] = 0;
+ $cat['unread'] = -1;
+ $cat['child_unread'] = -1;
$fsth = $this->pdo->prepare("SELECT id, title,last_error,
".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated, update_interval
@@ -263,14 +263,14 @@ class Pref_Feeds extends Handler_Protected {
$feed = array();
$feed['id'] = 'FEED:' . $feed_line['id'];
$feed['bare_id'] = (int)$feed_line['id'];
- $feed['auxcounter'] = 0;
+ $feed['auxcounter'] = -1;
$feed['name'] = $feed_line['title'];
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = Feeds::getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime(
$feed_line['last_updated'], true);
- $feed['unread'] = 0;
+ $feed['unread'] = -1;
$feed['type'] = 'feed';
$feed['updates_disabled'] = (int)($feed_line['update_interval'] < 0);
@@ -298,14 +298,14 @@ class Pref_Feeds extends Handler_Protected {
$feed = array();
$feed['id'] = 'FEED:' . $feed_line['id'];
$feed['bare_id'] = (int)$feed_line['id'];
- $feed['auxcounter'] = 0;
+ $feed['auxcounter'] = -1;
$feed['name'] = $feed_line['title'];
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = Feeds::getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime(
$feed_line['last_updated'], true);
- $feed['unread'] = 0;
+ $feed['unread'] = -1;
$feed['type'] = 'feed';
$feed['updates_disabled'] = (int)($feed_line['update_interval'] < 0);
@@ -473,6 +473,7 @@ class Pref_Feeds extends Handler_Protected {
$icon_file = $tmp_file;
$feed_id = clean($_REQUEST["feed_id"]);
+ $rc = 2; // failed
if (is_file($icon_file) && $feed_id) {
if (filesize($icon_file) < 65535) {
@@ -492,21 +493,15 @@ class Pref_Feeds extends Handler_Protected {
$rc = 0;
}
- } else {
- $rc = 2;
}
} else {
$rc = 1;
}
- } else {
- $rc = 2;
}
- @unlink($icon_file);
+ if (is_file($icon_file)) @unlink($icon_file);
- print "<script type=\"text/javascript\">";
- print "parent.CommonDialogs.uploadIconHandler($rc);";
- print "</script>";
+ print $rc;
return;
}
@@ -531,16 +526,16 @@ class Pref_Feeds extends Handler_Protected {
print_hidden("op", "pref-feeds");
print_hidden("method", "editSave");
- print "<div class=\"dlgSec\">".__("Feed")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Feed")."</header>";
+ print "<section>";
/* Title */
print "<fieldset>";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+ print "<input dojoType='dijit.form.ValidationTextBox' required='1'
placeHolder=\"".__("Feed Title")."\"
- style=\"font-size : 16px; width: 500px\" name=\"title\" value=\"$title\">";
+ style='font-size : 16px; width: 500px' name='title' value=\"$title\">";
print "</fieldset>";
@@ -551,10 +546,10 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset>";
print "<label>" . __('URL:') . "</label> ";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+ print "<input dojoType='dijit.form.ValidationTextBox' required='1'
placeHolder=\"".__("Feed URL")."\"
- regExp='^(http|https)://.*' style=\"width : 300px\"
- name=\"feed_url\" value=\"$feed_url\">";
+ regExp='^(http|https)://.*' style='width : 300px'
+ name='feed_url' value=\"$feed_url\">";
$last_error = $row["last_error"];
@@ -576,7 +571,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Place in category:') . "</label> ";
print_feed_cat_select("cat_id", $cat_id,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "</fieldset>";
}
@@ -588,10 +583,10 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset>";
print "<label>" . __('Site URL:') . "</label> ";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+ print "<input dojoType='dijit.form.ValidationTextBox' required='1'
placeHolder=\"".__("Site URL")."\"
- regExp='^(http|https)://.*' style=\"width : 300px\"
- name=\"site_url\" value=\"$site_url\">";
+ regExp='^(http|https)://.*' style='width : 300px'
+ name='site_url' value=\"$site_url\">";
print "</fieldset>";
@@ -600,19 +595,22 @@ class Pref_Feeds extends Handler_Protected {
if (DB_TYPE == "pgsql") {
$feed_language = $row["feed_language"];
+ if (!$feed_language)
+ $feed_language = get_pref('DEFAULT_SEARCH_LANGUAGE');
+
print "<fieldset>";
print "<label>" . __('Language:') . "</label> ";
print_select("feed_language", $feed_language, $this::get_ts_languages(),
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "</fieldset>";
}
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Update")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Update")."</header>";
+ print "<section>";
/* Update Interval */
@@ -623,7 +621,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>".__("Interval:")."</label> ";
print_select_hash("update_interval", $update_interval, $update_intervals,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "</fieldset>";
@@ -636,12 +634,12 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Article purging:') . "</label> ";
print_select_hash("purge_interval", $purge_interval, $purge_intervals,
- 'dojoType="dijit.form.Select" ' .
+ 'dojoType="fox.form.Select" ' .
((FORCE_ARTICLE_PURGE == 0) ? "" : 'disabled="1"'));
print "</fieldset>";
- print "</div>";
+ print "</section>";
$auth_login = htmlspecialchars($row["auth_login"]);
$auth_pass = htmlspecialchars($row["auth_pass"]);
@@ -650,58 +648,40 @@ class Pref_Feeds extends Handler_Protected {
$auth_style = $auth_enabled ? '' : 'display: none';
print "<div id='feedEditDlg_loginContainer' style='$auth_style'>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Authentication")."</header>";
+ print "<section>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\" id=\"feedEditDlg_login\"
- placeHolder=\"".__("Login")."\"
- autocomplete=\"new-password\"
- name=\"auth_login\" value=\"$auth_login\">";
+ print "<input dojoType='dijit.form.TextBox' id='feedEditDlg_login'
+ placeHolder='".__("Login")."'
+ autocomplete='new-password'
+ name='auth_login' value=\"$auth_login\">";
- print "</fieldset>";
- print "<fieldset>";
+ print "</fieldset><fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\"
- autocomplete=\"new-password\"
- placeHolder=\"".__("Password")."\"
+ print "<input dojoType='dijit.form.TextBox' type='password' name='auth_pass'
+ autocomplete='new-password'
+ placeHolder='".__("Password")."'
value=\"$auth_pass\">";
- print "<div dojoType=\"dijit.Tooltip\" connectId=\"feedEditDlg_login\" position=\"below\">
+ print "<div dojoType='dijit.Tooltip' connectId='feedEditDlg_login' position='below'>
".__('<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds.')."
</div>";
print "</fieldset>";
- print "</div></div>";
+ print "</section></div>";
$auth_checked = $auth_enabled ? 'checked' : '';
- print "<div style=\"clear : both\">
- <input type=\"checkbox\" $auth_checked name=\"need_auth\" dojoType=\"dijit.form.CheckBox\" id=\"feedEditDlg_loginCheck\"
+ print "<label class='checkbox'>
+ <input type='checkbox' $auth_checked name='need_auth' dojoType='dijit.form.CheckBox' id='feedEditDlg_loginCheck'
onclick='displayIfChecked(this, \"feedEditDlg_loginContainer\")'>
- <label for=\"feedEditDlg_loginCheck\">".
- __('This feed requires authentication.')."</div>";
+ ".__('This feed requires authentication.')."</label>";
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Options').'">';
- //print "<div class=\"dlgSec\">".__("Options")."</div>";
- print "<div class=\"dlgSecSimple\">";
-
- $private = $row["private"];
-
- if ($private) {
- $checked = "checked=\"1\"";
- } else {
- $checked = "";
- }
-
- print "<fieldset class='narrow'>";
-
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"private\" id=\"private\"
- $checked> ".__('Hide from Popular feeds')."</label>";
-
- print "</fieldset>";
+ print "<section class='narrow'>";
$include_in_digest = $row["include_in_digest"];
@@ -745,9 +725,8 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"hide_images\"
- name=\"hide_images\"
- $checked> ".__('Do not embed media')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='hide_images'
+ name='hide_images' $checked> ".__('Do not embed media')."</label>";
print "</fieldset>";
@@ -761,9 +740,8 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"cache_images\"
- name=\"cache_images\"
- $checked> ". __('Cache media')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='cache_images'
+ name='cache_images' $checked> ". __('Cache media')."</label>";
print "</fieldset>";
@@ -777,41 +755,32 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"mark_unread_on_update\"
- name=\"mark_unread_on_update\"
- $checked> ".__('Mark updated articles as unread')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='mark_unread_on_update'
+ name='mark_unread_on_update' $checked> ".__('Mark updated articles as unread')."</label>";
print "</fieldset>";
- print "</div>";
-
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Icon').'">';
/* Icon */
- print "<div class=\"dlgSecSimple\">";
-
- print "<img class=\"feedIcon\" src=\"".Feeds::getFeedIcon($feed_id)."\">";
+ print "<img class='feedIcon feed-editor-icon' src=\"".Feeds::getFeedIcon($feed_id)."\">";
- print "<iframe name=\"icon_upload_iframe\"
- style=\"width: 400px; height: 100px; display: none;\"></iframe>";
-
- print "<form style='display : block' target=\"icon_upload_iframe\"
- enctype=\"multipart/form-data\" method=\"POST\"
- action=\"backend.php\">
- <label class=\"dijitButton\">".__("Choose file...")."
- <input style=\"display: none\" id=\"icon_file\" size=\"10\" name=\"icon_file\" type=\"file\">
+ print "<form onsubmit='return false;' id='feed_icon_upload_form'
+ enctype='multipart/form-data' method='POST'>
+ <label class='dijitButton'>".__("Choose file...")."
+ <input style='display: none' id='icon_file' size='10' name='icon_file' type='file'>
</label>
- <input type=\"hidden\" name=\"op\" value=\"pref-feeds\">
- <input type=\"hidden\" name=\"feed_id\" value=\"$feed_id\">
- <input type=\"hidden\" name=\"method\" value=\"uploadicon\">
- <button class=\"\" dojoType=\"dijit.form.Button\" onclick=\"return CommonDialogs.uploadFeedIcon();\"
- type=\"submit\">".__('Replace')."</button>
- <button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"return CommonDialogs.removeFeedIcon($feed_id);\"
- type=\"submit\">".__('Remove')."</button>
+ <input type='hidden' name='op' value='pref-feeds'>
+ <input type='hidden' name='feed_id' value='$feed_id'>
+ <input type='hidden' name='method' value='uploadicon'>
+ <button dojoType='dijit.form.Button' onclick=\"return CommonDialogs.uploadFeedIcon();\"
+ type='submit'>".__('Replace')."</button>
+ <button class='alt-danger' dojoType='dijit.form.Button' onclick=\"return CommonDialogs.removeFeedIcon($feed_id);\"
+ type='submit'>".__('Remove')."</button>
</form>";
- print "</div>";
+ print "</section>";
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Plugins').'">';
@@ -822,16 +791,12 @@ class Pref_Feeds extends Handler_Protected {
$title = htmlspecialchars($title, ENT_QUOTES);
- print "<div class='dlgButtons'>
- <div style=\"float : left\">
- <button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick='return CommonDialogs.unsubscribeFeed($feed_id, \"$title\")'>".
- __('Unsubscribe')."</button>";
-
- print "</div>";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').execute()\">".__('Save')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').hide()\">".__('Cancel')."</button>
- </div>";
+ print "<footer>
+ <button style='float : left' class='alt-danger' dojoType='dijit.form.Button' onclick='return CommonDialogs.unsubscribeFeed($feed_id, \"$title\")'>".
+ __('Unsubscribe')."</button>
+ <button dojoType='dijit.form.Button' class='alt-primary' onclick=\"return dijit.byId('feedEditDlg').execute()\">".__('Save')."</button>
+ <button dojoType='dijit.form.Button' onclick=\"return dijit.byId('feedEditDlg').hide()\">".__('Cancel')."</button>
+ </footer>";
}
}
@@ -849,8 +814,8 @@ class Pref_Feeds extends Handler_Protected {
print_hidden("op", "pref-feeds");
print_hidden("method", "batchEditSave");
- print "<div class=\"dlgSec\">".__("Feed")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Feed")."</header>";
+ print "<section>";
/* Category */
@@ -861,7 +826,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Place in category:') . "</label> ";
print_feed_cat_select("cat_id", false,
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("cat_id");
@@ -875,17 +840,17 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Language:') . "</label> ";
print_select("feed_language", "", $this::get_ts_languages(),
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("feed_language");
print "</fieldset>";
}
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Update")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Update")."</header>";
+ print "<section>";
/* Update Interval */
@@ -894,7 +859,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>".__("Interval:")."</label> ";
print_select_hash("update_interval", "", $update_intervals,
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("update_interval");
@@ -909,100 +874,85 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Article purging:') . "</label> ";
print_select_hash("purge_interval", "", $purge_intervals,
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("purge_interval");
print "</fieldset>";
}
- print "</div>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "</section>";
+ print "<header>".__("Authentication")."</header>";
+ print "<section>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\"
- placeHolder=\"".__("Login")."\" disabled=\"1\"
- autocomplete=\"new-password\"
- name=\"auth_login\" value=\"\">";
+ print "<input dojoType='dijit.form.TextBox'
+ placeHolder=\"".__("Login")."\" disabled='1'
+ autocomplete='new-password'
+ name='auth_login' value=''>";
$this->batch_edit_cbox("auth_login");
- print "</fieldset>";
- print "<fieldset>";
-
- print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\"
- autocomplete=\"new-password\"
- placeHolder=\"".__("Password")."\" disabled=\"1\"
- value=\"\">";
+ print "<input dojoType='dijit.form.TextBox' type='password' name='auth_pass'
+ autocomplete='new-password'
+ placeHolder=\"".__("Password")."\" disabled='1'
+ value=''>";
$this->batch_edit_cbox("auth_pass");
print "</fieldset>";
- print "</div>";
- print "<div class=\"dlgSec\">".__("Options")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "</section>";
+ print "<header>".__("Options")."</header>";
+ print "<section>";
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" name=\"private\" id=\"private\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Hide from Popular feeds')."</label>";
-
- print "&nbsp;"; $this->batch_edit_cbox("private", "private_l");
-
- print "</fieldset><fieldset class='narrow'>";
-
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"include_in_digest\"
- name=\"include_in_digest\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Include in e-mail digest')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='include_in_digest'
+ name='include_in_digest' dojoType='dijit.form.CheckBox'>&nbsp;".__('Include in e-mail digest')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("include_in_digest", "include_in_digest_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"always_display_enclosures\"
- name=\"always_display_enclosures\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Always display image attachments')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='always_display_enclosures'
+ name='always_display_enclosures' dojoType='dijit.form.CheckBox'>&nbsp;".__('Always display image attachments')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("always_display_enclosures", "always_display_enclosures_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"hide_images\"
- name=\"hide_images\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;". __('Do not embed media')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='hide_images'
+ name='hide_images' dojoType='dijit.form.CheckBox'>&nbsp;". __('Do not embed media')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("hide_images", "hide_images_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"cache_images\"
- name=\"cache_images\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Cache media')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='cache_images'
+ name='cache_images' dojoType='dijit.form.CheckBox'>&nbsp;".__('Cache media')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("cache_images", "cache_images_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"mark_unread_on_update\"
- name=\"mark_unread_on_update\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Mark updated articles as unread')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='mark_unread_on_update'
+ name='mark_unread_on_update' dojoType='dijit.form.CheckBox'>&nbsp;".__('Mark updated articles as unread')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("mark_unread_on_update", "mark_unread_on_update_l");
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgButtons'>
- <button dojoType=\"dijit.form.Button\" type='submit' class='alt-primary'
+ print "<footer>
+ <button dojoType='dijit.form.Button' type='submit' class='alt-primary'
onclick=\"return dijit.byId('feedEditDlg').execute()\">".
__('Save')."</button>
- <button dojoType=\"dijit.form.Button\"
+ <button dojoType='dijit.form.Button'
onclick=\"return dijit.byId('feedEditDlg').hide()\">".
__('Cancel')."</button>
- </div>";
+ </footer>";
return;
}
@@ -1258,7 +1208,7 @@ class Pref_Feeds extends Handler_Protected {
print '<div dojoType="dijit.layout.BorderContainer" gutters="false">';
- print "<div region='top' dojoType=\"dijit.Toolbar\">"; #toolbar
+ print "<div region='top' dojoType=\"fox.Toolbar\">"; #toolbar
print "<div style='float : right; padding-right : 4px;'>
<input dojoType=\"dijit.form.TextBox\" id=\"feed_search\" size=\"20\" type=\"search\"
@@ -1267,7 +1217,7 @@ class Pref_Feeds extends Handler_Protected {
__('Search')."</button>
</div>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('feedTree').model.setAllChecked(true)\"
@@ -1276,7 +1226,7 @@ class Pref_Feeds extends Handler_Protected {
dojoType=\"dijit.MenuItem\">".__('None')."</div>";
print "</div></div>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Feeds')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"CommonDialogs.quickAddFeed()\"
@@ -1292,7 +1242,7 @@ class Pref_Feeds extends Handler_Protected {
print "</div></div>";
if (get_pref('ENABLE_FEED_CATS')) {
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Categories')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('feedTree').createCategory()\"
@@ -1499,16 +1449,14 @@ class Pref_Feeds extends Handler_Protected {
ORDER BY last_article");
$sth->execute([$_SESSION['uid']]);
- print "<p" .__("These feeds have not been updated with new content for 3 months (oldest first):") . "</p>";
-
- print "<div dojoType=\"dijit.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.Toolbar'>";
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"Tables.select('inactive-feeds-list', true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"Tables.select('inactive-feeds-list', false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
print "</div>"; #toolbar
@@ -1524,16 +1472,16 @@ class Pref_Feeds extends Handler_Protected {
print "<tr data-row-id='$feed_id'>";
print "<td width='5%' align='center'><input
- onclick='Tables.onRowChecked(this);' dojoType=\"dijit.form.CheckBox\"
- type=\"checkbox\"></td>";
+ onclick='Tables.onRowChecked(this);' dojoType='dijit.form.CheckBox'
+ type='checkbox'></td>";
print "<td>";
- print "<a class=\"visibleLink\" href=\"#\" ".
+ print "<a href='#' ".
"title=\"".__("Click to edit feed")."\" ".
"onclick=\"CommonDialogs.editFeed(".$line["id"].")\">".
htmlspecialchars($line["title"])."</a>";
- print "</td><td class=\"insensitive\" align='right'>";
+ print "</td><td class='text-muted' align='right'>";
print make_local_datetime($line['last_article'], false);
print "</td>";
print "</tr>";
@@ -1544,16 +1492,12 @@ class Pref_Feeds extends Handler_Protected {
print "</table>";
print "</div>";
- print "<div class='dlgButtons'>";
- print "<div style='float : left'>";
- print "<button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('inactiveFeedsDlg').removeSelected()\">"
- .__('Unsubscribe from selected feeds')."</button> ";
- print "</div>";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('inactiveFeedsDlg').hide()\">".
- __('Close this window')."</button>";
-
- print "</div>";
+ print "<footer>
+ <button style='float : left' class=\"alt-danger\" dojoType='dijit.form.Button' onclick=\"dijit.byId('inactiveFeedsDlg').removeSelected()\">"
+ .__('Unsubscribe from selected feeds')."</button>
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('inactiveFeedsDlg').hide()\">"
+ .__('Close this window')."</button>
+ </footer>";
}
@@ -1562,8 +1506,8 @@ class Pref_Feeds extends Handler_Protected {
FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ?");
$sth->execute([$_SESSION['uid']]);
- print "<div dojoType=\"dijit.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.Toolbar\">";
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"Tables.select('error-feeds-list', true)\"
@@ -1594,7 +1538,7 @@ class Pref_Feeds extends Handler_Protected {
"onclick=\"CommonDialogs.editFeed(".$line["id"].")\">".
htmlspecialchars($line["title"])."</a>: ";
- print "<span class=\"insensitive\">";
+ print "<span class=\"text-muted\">";
print htmlspecialchars($line["last_error"]);
print "</span>";
@@ -1607,16 +1551,14 @@ class Pref_Feeds extends Handler_Protected {
print "</table>";
print "</div>";
- print "<div class='dlgButtons'>";
- print "<div style='float : left'>";
- print "<button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('errorFeedsDlg').removeSelected()\">"
+ print "<footer>";
+ print "<button style='float : left' class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('errorFeedsDlg').removeSelected()\">"
.__('Unsubscribe from selected feeds')."</button> ";
- print "</div>";
print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('errorFeedsDlg').hide()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
}
private function remove_feed_category($id, $owner_uid) {
@@ -1665,8 +1607,8 @@ class Pref_Feeds extends Handler_Protected {
$new_feed_id = (int)$row['id'] + 1;
$sth = $pdo->prepare("INSERT INTO ttrss_archived_feeds
- (id, owner_uid, title, feed_url, site_url)
- SELECT ?, owner_uid, title, feed_url, site_url from ttrss_feeds
+ (id, owner_uid, title, feed_url, site_url, created)
+ SELECT ?, owner_uid, title, feed_url, site_url, NOW() from ttrss_feeds
WHERE id = ?");
$sth->execute([$new_feed_id, $id]);
@@ -1710,9 +1652,8 @@ class Pref_Feeds extends Handler_Protected {
print_hidden("op", "pref-feeds");
print_hidden("method", "batchaddfeeds");
- print "<div class='dlgSecHoriz'>".__("One valid feed per line (no detection is done)")."</div>";
-
- print "<div class='dlgSecCont'>";
+ print "<header class='horizontal'>".__("One valid feed per line (no detection is done)")."</header>";
+ print "<section>";
print "<textarea
style='font-size : 12px; width : 98%; height: 200px;'
@@ -1721,20 +1662,22 @@ class Pref_Feeds extends Handler_Protected {
if (get_pref('ENABLE_FEED_CATS')) {
print "<fieldset>";
print "<label>" . __('Place in category:') . "</label> ";
- print_feed_cat_select("cat", false, 'dojoType="dijit.form.Select"');
+ print_feed_cat_select("cat", false, 'dojoType="fox.form.Select"');
print "</fieldset>";
}
+ print "</section>";
+
print "<div id='feedDlg_loginContainer' style='display : none'>";
- print "<div class='dlgSec'>" . __("Authentication") . "</div>";
- print "<div class='dlgSecCont'>";
+ print "<header>" . __("Authentication") . "</header>";
+ print "<section>";
print "<input dojoType='dijit.form.TextBox' name='login' placeHolder=\"".__("Login")."\">
<input placeHolder=\"".__("Password")."\" dojoType=\"dijit.form.TextBox\" type='password'
autocomplete='new-password' name='pass''></div>";
- print "</div>";
+ print "</section>";
print "</div>";
print "<fieldset class='narrow'>
@@ -1743,10 +1686,10 @@ class Pref_Feeds extends Handler_Protected {
__('Feeds require authentication.')."</label></div>";
print "</fieldset>";
- print "<div class='dlgButtons'>
- <button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"return dijit.byId('batchSubDlg').execute()\">".__('Subscribe')."</button>
+ print "<footer>
+ <button dojoType='dijit.form.Button' type='submit' class='alt-primary'>".__('Subscribe')."</button>
<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('batchSubDlg').hide()\">".__('Cancel')."</button>
- </div>";
+ </footer>";
}
function batchAddFeeds() {
@@ -1755,6 +1698,13 @@ class Pref_Feeds extends Handler_Protected {
$login = clean($_REQUEST['login']);
$pass = trim(clean($_REQUEST['pass']));
+ $csth = $this->pdo->prepare("SELECT id FROM ttrss_feeds
+ WHERE feed_url = ? AND owner_uid = ?");
+
+ $isth = $this->pdo->prepare("INSERT INTO ttrss_feeds
+ (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method,auth_pass_encrypted)
+ VALUES (?, ?, '[Unknown]', ?, ?, ?, 0, false)");
+
foreach ($feeds as $feed) {
$feed = trim($feed);
@@ -1762,16 +1712,10 @@ class Pref_Feeds extends Handler_Protected {
$this->pdo->beginTransaction();
- $sth = $this->pdo->prepare("SELECT id FROM ttrss_feeds
- WHERE feed_url = ? AND owner_uid = ?");
- $sth->execute([$feed, $_SESSION['uid']]);
-
- if (!$sth->fetch()) {
- $sth = $this->pdo->prepare("INSERT INTO ttrss_feeds
- (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method,auth_pass_encrypted)
- VALUES (?, ?, '[Unknown]', ?, ?, ?, 0, false)");
+ $csth->execute([$feed, $_SESSION['uid']]);
- $sth->execute([$_SESSION['uid'], $feed, $cat_id ? $cat_id : null, $login, $pass]);
+ if (!$csth->fetch()) {
+ $isth->execute([$_SESSION['uid'], $feed, $cat_id ? $cat_id : null, $login, $pass]);
}
$this->pdo->commit();
diff --git a/classes/pref/filters.php b/classes/pref/filters.php
index 99bb885cf..041951b35 100755
--- a/classes/pref/filters.php
+++ b/classes/pref/filters.php
@@ -148,7 +148,7 @@ class Pref_Filters extends Handler_Protected {
$tmp = "<li><span class='title'>" . $line["title"] . "</span><br/>" .
"<span class='feed'>" . $line['feed_title'] . "</span>, <span class='date'>" . mb_substr($line["date_entered"], 0, 16) . "</span>" .
- "<div class='preview insensitive'>" . $content_preview . "</div>" .
+ "<div class='preview text-muted'>" . $content_preview . "</div>" .
"</li>";
array_push($rv, $tmp);
@@ -170,10 +170,10 @@ class Pref_Filters extends Handler_Protected {
print "<ul class='panel panel-scrollable list list-unstyled' id='prefFilterTestResultList'>";
print "</ul>";
- print "<div style='text-align : center'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('filterTestDlg').hide()\">".
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('filterTestDlg').hide()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -346,19 +346,17 @@ class Pref_Filters extends Handler_Protected {
print_hidden("method", "editSave");
print_hidden("csrf_token", $_SESSION['csrf_token']);
- print "<div class='dlgSec'>".__("Caption")."</div>";
- print "<div class='dlgSecCont'>";
-
+ print "<header>".__("Caption")."</header>";
+ print "<section>";
print "<input required=\"true\" dojoType=\"dijit.form.ValidationTextBox\" style=\"width : 20em;\" name=\"title\" value=\"$title\">";
+ print "</section>";
- print "</div>";
-
- print "<div class='dlgSecHoriz'>".__("Match")."</div>";
- print "<div class='dlgSecCont'>";
+ print "<header class='horizontal'>".__("Match")."</header>";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType=\"fox.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(true)\"
@@ -410,15 +408,15 @@ class Pref_Filters extends Handler_Protected {
print "</ul>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgSecHoriz'>".__("Apply actions")."</div>";
+ print "<header class='horizontal'>".__("Apply actions")."</header>";
- print "<div class='dlgSecCont'>";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType=\"fox.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(true)\"
@@ -456,10 +454,10 @@ class Pref_Filters extends Handler_Protected {
print "</ul>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgSec'>".__("Options")."</div>";
- print "<div class='dlgSecCont'>";
+ print "<header>".__("Options")."</header>";
+ print "<section>";
if ($enabled) {
$checked = "checked=\"1\"";
@@ -495,9 +493,9 @@ class Pref_Filters extends Handler_Protected {
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
print "<div style=\"float : left\">";
print "<button dojoType=\"dijit.form.Button\" class=\"alt-danger\" onclick=\"return dijit.byId('filterEditDlg').removeFilter()\">".
@@ -513,7 +511,7 @@ class Pref_Filters extends Handler_Protected {
print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -759,7 +757,7 @@ class Pref_Filters extends Handler_Protected {
print "<div dojoType='dijit.layout.BorderContainer' gutters='false'>";
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
- print "<div dojoType='dijit.Toolbar'>";
+ print "<div dojoType='fox.Toolbar'>";
if (array_key_exists("search", $_REQUEST)) {
$_SESSION["prefs_filter_search"] = $filter_search;
@@ -774,7 +772,7 @@ class Pref_Filters extends Handler_Protected {
__('Search')."</button>
</div>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('filterTree').model.setAllChecked(true)\"
@@ -849,31 +847,30 @@ class Pref_Filters extends Handler_Protected {
print_hidden("method", "add");
print_hidden("csrf_token", $_SESSION['csrf_token']);
- print "<div class='dlgSec'>".__("Caption")."</div>";
+ print "<header>".__("Caption")."</header>";
- print "<div class='dlgSecCont'>";
- print "<input required=\"true\" dojoType=\"dijit.form.ValidationTextBox\" style=\"width : 20em;\" name=\"title\" value=\"\">";
- print "</div>";
-
- print "<div class='dlgSecHoriz'>".__("Match")."</div>";
+ print "<section>";
+ print "<input required='true' dojoType='dijit.form.ValidationTextBox' style='width : 20em;' name='title' value=''>";
+ print "</section>";
- print "<div class='dlgSecCont'>";
+ print "<header class='horizontal'>".__("Match")."</header >";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').addRule()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').addRule()\">".
__('Add')."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').deleteRule()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').deleteRule()\">".
__('Delete')."</button> ";
print "</div>";
@@ -882,74 +879,69 @@ class Pref_Filters extends Handler_Protected {
# print "<li>No rules</li>";
print "</ul>";
- print "</div>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgSecHoriz'>".__("Apply actions")."</div>";
+ print "<header class='horizontal'>".__("Apply actions")."</header>";
- print "<div class='dlgSecCont'>";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').addAction()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').addAction()\">".
__('Add')."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').deleteAction()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').deleteAction()\">".
__('Delete')."</button> ";
print "</div>";
-
print "<ul id='filterDlg_Actions'>";
# print "<li>No actions</li>";
print "</ul>";
- print "</div>";
- print "<div class='dlgSec'>".__("Options")."</div>";
+ print "</section>";
- print "<div class='dlgSecCont'>";
+ print "<header>".__("Options")."</header>";
+
+ print "<section>";
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"enabled\" id=\"enabled\" checked=\"1\">
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='enabled' id='enabled' checked='1'>
".__('Enabled')."</label>";
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"match_any_rule\" id=\"match_any_rule\">
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='match_any_rule' id='match_any_rule'>
".__('Match any rule')."</label>";
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\">
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='inverse' id='inverse'>
".__('Inverse matching')."</label>";
print "</fieldset>";
- print "</div>";
-
-// print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
- print "<button dojoType=\"dijit.form.Button\" class=\"alt-info\" onclick=\"return dijit.byId('filterEditDlg').test()\">".
+ print "<button dojoType='dijit.form.Button' class='alt-info' onclick=\"return dijit.byId('filterEditDlg').test()\">".
__('Test')."</button> ";
-
- print "<button dojoType=\"dijit.form.Button\" type=\"submit\" class=\"alt-primary\" onclick=\"return dijit.byId('filterEditDlg').execute()\">".
+ print "<button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"return dijit.byId('filterEditDlg').execute()\">".
__('Create')."</button> ";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -979,9 +971,9 @@ class Pref_Filters extends Handler_Protected {
$filter_types[$line["id"]] = __($line["description"]);
}
- print "<div class=\"dlgSec\">".__("Match")."</div>";
+ print "<header>".__("Match")."</header>";
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
print "<input dojoType=\"dijit.form.ValidationTextBox\"
required=\"true\" id=\"filterDlg_regExp\"
@@ -1001,7 +993,7 @@ class Pref_Filters extends Handler_Protected {
print "<fieldset>";
print "<label style='display : inline'>". __("on field") . "</label> ";
print_select_hash("filter_type", $filter_type, $filter_types,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "<label style='padding-left : 10px; display : inline'>" . __("in") . "</label> ";
print "</fieldset>";
@@ -1015,9 +1007,9 @@ class Pref_Filters extends Handler_Protected {
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgButtons'>";
+ print "<footer>";
print "<button dojoType='dijit.form.Button' style='float : left' class='alt-info' onclick='window.open(\"https://tt-rss.org/wiki/ContentFilters\")'>
<i class='material-icons'>help</i> ".__("More info...")."</button>";
@@ -1028,7 +1020,7 @@ class Pref_Filters extends Handler_Protected {
print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterNewRuleDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -1046,12 +1038,12 @@ class Pref_Filters extends Handler_Protected {
print "<form name='filter_new_action_form' id='filter_new_action_form' onsubmit='return false;'>";
- print "<div class=\"dlgSec\">".__("Perform Action")."</div>";
+ print "<header>".__("Perform Action")."</header>";
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
- print "<select name=\"action_id\" dojoType=\"dijit.form.Select\"
- onchange=\"Filters.filterDlgCheckAction(this)\">";
+ print "<select name='action_id' dojoType='fox.form.Select'
+ onchange='Filters.filterDlgCheckAction(this)'>";
$res = $this->pdo->query("SELECT id,description FROM ttrss_filter_actions
ORDER BY name");
@@ -1072,16 +1064,16 @@ class Pref_Filters extends Handler_Protected {
$label_param_hidden = ($action_id == 7) ? "" : "display : none";
$plugin_param_hidden = ($action_id == 9) ? "" : "display : none";
- print "<span id=\"filterDlg_paramBox\" style=\"$param_box_hidden\">";
+ print "<span id='filterDlg_paramBox' style=\"$param_box_hidden\">";
print " ";
//print " " . __("with parameters:") . " ";
- print "<input dojoType=\"dijit.form.TextBox\"
- id=\"filterDlg_actionParam\" style=\"$param_hidden\"
- name=\"action_param\" value=\"$action_param\">";
+ print "<input dojoType='dijit.form.TextBox'
+ id='filterDlg_actionParam' style=\"$param_hidden\"
+ name='action_param' value=\"$action_param\">";
print_label_select("action_param_label", $action_param,
- "id=\"filterDlg_actionParamLabel\" style=\"$label_param_hidden\"
- dojoType=\"dijit.form.Select\"");
+ "id='filterDlg_actionParamLabel' style=\"$label_param_hidden\"
+ dojoType='fox.form.Select'");
$filter_actions = PluginHost::getInstance()->get_filter_actions();
$filter_action_hash = array();
@@ -1104,24 +1096,24 @@ class Pref_Filters extends Handler_Protected {
}
print_select_hash("filterDlg_actionParamPlugin", $action_param, $filter_action_hash,
- "style=\"$plugin_param_hidden\" dojoType=\"dijit.form.Select\" $filter_plugin_disabled",
+ "style=\"$plugin_param_hidden\" dojoType='fox.form.Select' $filter_plugin_disabled",
"action_param_plugin");
print "</span>";
print "&nbsp;"; // tiny layout hack
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
- print "<button dojoType=\"dijit.form.Button\" class=\"alt-primary\" type=\"submit\" onclick=\"return dijit.byId('filterNewActionDlg').execute()\">".
+ print "<button dojoType='dijit.form.Button' class='alt-primary' type='submit' onclick=\"return dijit.byId('filterNewActionDlg').execute()\">".
($action ? __("Save action") : __('Add action'))."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterNewActionDlg').hide()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterNewActionDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -1129,11 +1121,11 @@ class Pref_Filters extends Handler_Protected {
private function getFilterName($id) {
$sth = $this->pdo->prepare(
- "SELECT title,match_any_rule,COUNT(DISTINCT r.id) AS num_rules,COUNT(DISTINCT a.id) AS num_actions
+ "SELECT title,match_any_rule,f.inverse AS inverse,COUNT(DISTINCT r.id) AS num_rules,COUNT(DISTINCT a.id) AS num_actions
FROM ttrss_filters2 AS f LEFT JOIN ttrss_filters2_rules AS r
ON (r.filter_id = f.id)
LEFT JOIN ttrss_filters2_actions AS a
- ON (a.filter_id = f.id) WHERE f.id = ? GROUP BY f.title, f.match_any_rule");
+ ON (a.filter_id = f.id) WHERE f.id = ? GROUP BY f.title, f.match_any_rule, f.inverse");
$sth->execute([$id]);
if ($row = $sth->fetch()) {
@@ -1142,6 +1134,7 @@ class Pref_Filters extends Handler_Protected {
$num_rules = $row["num_rules"];
$num_actions = $row["num_actions"];
$match_any_rule = $row["match_any_rule"];
+ $inverse = $row["inverse"];
if (!$title) $title = __("[No caption]");
@@ -1160,6 +1153,7 @@ class Pref_Filters extends Handler_Protected {
}
if ($match_any_rule) $title .= " (" . __("matches any rule") . ")";
+ if ($inverse) $title .= " (" . __("inverse") . ")";
if ($num_actions > 0)
$actions = sprintf(_ngettext("%s (+%d action)", "%s (+%d actions)", (int) $num_actions), $actions, $num_actions);
diff --git a/classes/pref/labels.php b/classes/pref/labels.php
index 28befe42b..ec9667441 100644
--- a/classes/pref/labels.php
+++ b/classes/pref/labels.php
@@ -22,9 +22,9 @@ class Pref_Labels extends Handler_Protected {
print "<form onsubmit='return false;'>";
- print "<div class=\"dlgSec\">".__("Caption")."</div>";
+ print "<header>".__("Caption")."</header>";
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
$fg_color = $line['fg_color'];
$bg_color = $line['bg_color'] ? $line['bg_color'] : '#fff7d5';
@@ -33,53 +33,47 @@ class Pref_Labels extends Handler_Protected {
id='labelEdit_caption' name='caption' dojoType='dijit.form.ValidationTextBox'
required='true' value=\"".htmlspecialchars($line['caption'])."\">";
- print "</div>";
- print "<div class=\"dlgSec\">" . __("Colors") . "</div>";
- print "<div class=\"dlgSecCont\">";
+ print "</section>";
- print "<table cellspacing=\"0\">";
-
- print "<tr><th style='text-align : left'>".__("Foreground:")."</th><th style='text-align : left'>".__("Background:").
- "</td></tr>";
+ print "<header>" . __("Colors") . "</header>";
+ print "<section>";
+ print "<table>";
+ print "<tr><th style='text-align : left'>".__("Foreground:")."</th><th style='text-align : left'>".__("Background:")."</th></tr>";
print "<tr><td style='padding-right : 10px'>";
- print "<input dojoType=\"dijit.form.TextBox\"
- style=\"display : none\" id=\"labelEdit_fgColor\"
- name=\"fg_color\" value=\"$fg_color\">";
- print "<input dojoType=\"dijit.form.TextBox\"
- style=\"display : none\" id=\"labelEdit_bgColor\"
- name=\"bg_color\" value=\"$bg_color\">";
+ print "<input dojoType='dijit.form.TextBox'
+ style='display : none' id='labelEdit_fgColor'
+ name='fg_color' value='$fg_color'>";
+ print "<input dojoType='dijit.form.TextBox'
+ style='display : none' id='labelEdit_bgColor'
+ name='bg_color' value='$bg_color'>";
- print "<div dojoType=\"dijit.ColorPalette\">
- <script type=\"dojo/method\" event=\"onChange\" args=\"fg_color\">
+ print "<div dojoType='dijit.ColorPalette'>
+ <script type='dojo/method' event='onChange' args='fg_color'>
dijit.byId('labelEdit_fgColor').attr('value', fg_color);
dijit.byId('labelEdit_caption').domNode.setStyle({color: fg_color});
</script>
</div>";
- print "</div>";
print "</td><td>";
- print "<div dojoType=\"dijit.ColorPalette\">
- <script type=\"dojo/method\" event=\"onChange\" args=\"bg_color\">
+ print "<div dojoType='dijit.ColorPalette'>
+ <script type='dojo/method' event='onChange' args='bg_color'>
dijit.byId('labelEdit_bgColor').attr('value', bg_color);
dijit.byId('labelEdit_caption').domNode.setStyle({backgroundColor: bg_color});
</script>
</div>";
- print "</div>";
print "</td></tr></table>";
- print "</div>";
-
-# print "</form>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
- print "<button dojoType=\"dijit.form.Button\" type=\"submit\" class=\"alt-primary\" onclick=\"dijit.byId('labelEditDlg').execute()\">".
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"dijit.byId('labelEditDlg').execute()\">".
__('Save')."</button>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('labelEditDlg').hide()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('labelEditDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -257,9 +251,9 @@ class Pref_Labels extends Handler_Protected {
print "<div dojoType='dijit.layout.BorderContainer' gutters='false'>";
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
- print "<div dojoType='dijit.Toolbar'>";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType='dijit.form.DropDownButton'>".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('labelTree').model.setAllChecked(true)\"
diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index fb1c1db06..cb19998ce 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -28,6 +28,7 @@ class Pref_Prefs extends Handler_Protected {
__('Feeds') => [
'DEFAULT_UPDATE_INTERVAL',
'FRESH_ARTICLE_MAX_AGE',
+ 'DEFAULT_SEARCH_LANGUAGE',
'BLOCK_SEPARATOR',
'ENABLE_FEED_CATS',
'BLOCK_SEPARATOR',
@@ -68,6 +69,7 @@ class Pref_Prefs extends Handler_Protected {
$this->pref_help = [
"ALLOW_DUPLICATE_POSTS" => array(__("Allow duplicate articles"), ""),
"BLACKLISTED_TAGS" => array(__("Blacklisted tags"), __("Never apply these tags automatically (comma-separated list).")),
+ "DEFAULT_SEARCH_LANGUAGE" => array(__("Default language"), __("Used for full-text search")),
"CDM_AUTO_CATCHUP" => array(__("Mark read on scroll"), __("Mark articles as read as you scroll past them")),
"CDM_EXPANDED" => array(__("Always expand articles")),
"COMBINED_DISPLAY_MODE" => array(__("Combined mode"), __("Show flat list of articles instead of separate panels")),
@@ -560,11 +562,15 @@ class Pref_Prefs extends Handler_Protected {
continue;
}
+ if ($pref_name == "DEFAULT_SEARCH_LANGUAGE" && DB_TYPE != "pgsql") {
+ continue;
+ }
+
if ($item = $prefs_available[$pref_name]) {
- print "<fieldset class='prefs-set'>";
+ print "<fieldset class='prefs'>";
- print "<label for='CB_$pref_name' style='width : 300px'>";
+ print "<label for='CB_$pref_name'>";
print $item['short_desc'] . ":";
print "</label>";
@@ -573,7 +579,7 @@ class Pref_Prefs extends Handler_Protected {
if ($pref_name == "USER_LANGUAGE") {
print_select_hash($pref_name, $value, get_translations(),
- "style='width : 220px; margin : 0px' dojoType='dijit.form.Select'");
+ "style='width : 220px; margin : 0px' dojoType='fox.form.Select'");
} else if ($pref_name == "USER_TIMEZONE") {
@@ -589,7 +595,7 @@ class Pref_Prefs extends Handler_Protected {
if (!theme_exists($value)) $value = "default.php";
- print "<select name='$pref_name' id='$pref_name' dojoType='dijit.form.Select'>";
+ print "<select name='$pref_name' id='$pref_name' dojoType='fox.form.Select'>";
$issel = $value == "default.php" ? "selected='selected'" : "";
print "<option $issel value='default.php'>".__("default")."</option>";
@@ -612,7 +618,11 @@ class Pref_Prefs extends Handler_Protected {
global $update_intervals_nodefault;
print_select_hash($pref_name, $value, $update_intervals_nodefault,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
+ } else if ($pref_name == "DEFAULT_SEARCH_LANGUAGE") {
+
+ print_select($pref_name, $value, Pref_Feeds::get_ts_languages(),
+ 'dojoType="fox.form.Select"');
} else if ($type_name == "bool") {
@@ -685,7 +695,7 @@ class Pref_Prefs extends Handler_Protected {
}
if ($item['help_text'])
- print "<div class='help-text insensitive'><label for='CB_$pref_name'>".$item['help_text']."</label></div>";
+ print "<div class='help-text text-muted'><label for='CB_$pref_name'>".$item['help_text']."</label></div>";
print "</fieldset>";
}
@@ -705,7 +715,7 @@ class Pref_Prefs extends Handler_Protected {
print_hidden("op", "pref-prefs");
print_hidden("method", "saveconfig");
- print "<div dojoType=\"dijit.form.ComboButton\" type=\"submit\" class=\"alt-primary\">
+ print "<div dojoType=\"fox.form.ComboButton\" type=\"submit\" class=\"alt-primary\">
<span>".__('Save configuration')."</span>
<div dojoType=\"dijit.DropDownMenu\">
<div dojoType=\"dijit.MenuItem\"
@@ -763,18 +773,8 @@ class Pref_Prefs extends Handler_Protected {
print_warning("Your PHP configuration has open_basedir restrictions enabled. Some plugins relying on CURL for functionality may not work correctly.");
}
- print "<table width='100%' class='prefPluginsList'>";
-
- print "<tr><td colspan='5'><h2>".__("System plugins")."</h2>".
- format_notice(__("System plugins are enabled in <strong>config.php</strong> for all users.")).
- "</td></tr>";
-
- print "<tr>
- <th width=\"5%\">&nbsp;</th>
- <th width='10%'>".__('Plugin')."</th>
- <th width=''>".__('Description')."</th>
- <th width='5%'>".__('Version')."</th>
- <th width='10%'>".__('Author')."</th></tr>";
+ print "<h2>".__("System plugins")."</h2>";
+ print_notice("System plugins are enabled in <strong>config.php</strong> for all users.");
$system_enabled = array_map("trim", explode(",", PLUGINS));
$user_enabled = array_map("trim", explode(",", get_pref("_ENABLED_PLUGINS")));
@@ -793,102 +793,73 @@ class Pref_Prefs extends Handler_Protected {
$checked = "";
}
- print "<tr>";
-
- print "<td align='center'><input disabled='1'
- dojoType=\"dijit.form.CheckBox\" $checked
- type=\"checkbox\"></td>";
-
- $icon_class = $checked ? "plugin-enabled" : "plugin-disabled";
+ print "<fieldset class='prefs plugin'>
+ <label>$name:</label>
+ <label class='checkbox description text-muted' id='PLABEL-$name'>
+ <input disabled='1'
+ dojoType='dijit.form.CheckBox' $checked type='checkbox'>
+ ".htmlspecialchars($about[1]). "</label>";
- print "<td><label><i class='material-icons $icon_class'>extension</i> $name</label></td>";
- print "<td>" . htmlspecialchars($about[1]);
- if (@$about[4]) {
- print " &mdash; <a target=\"_blank\" rel=\"noopener noreferrer\" class=\"visibleLink\"
- href=\"".htmlspecialchars($about[4])."\">".__("more info")."</a>";
- }
- print "</td>";
- print "<td>" . htmlspecialchars(sprintf("%.2f", $about[0])) . "</td>";
- print "<td>" . htmlspecialchars($about[2]) . "</td>";
-
- if (count($tmppluginhost->get_all($plugin)) > 0) {
- if (in_array($name, $system_enabled)) {
- print "<td><a href='#' onclick=\"Helpers.clearPluginData('$name')\"
- class='visibleLink'>".__("Clear data")."</a></td>";
+ if (@$about[4]) {
+ print "<button dojoType='dijit.form.Button' class='alt-info'
+ onclick='window.open(\"".htmlspecialchars($about[4])."\")'>
+ <i class='material-icons'>open_in_new</i> ".__("More info...")."</button>";
}
- }
- print "</tr>";
+ print "<div dojoType='dijit.Tooltip' connectId='PLABEL-$name' position='after'>".
+ htmlspecialchars(T_sprintf("v%.2f, by %s", $about[0], $about[2])).
+ "</div>";
+
+ print "</fieldset>";
}
}
- print "<tr><td colspan='4'><br/><h2>".__("User plugins")."</h2></td></tr>";
-
- print "<tr>
- <th width=\"5%\">&nbsp;</th>
- <th width='10%'>".__('Plugin')."</th>
- <th width=''>".__('Description')."</th>
- <th width='5%'>".__('Version')."</th>
- <th width='10%'>".__('Author')."</th></tr>";
-
+ print "<h2>".__("User plugins")."</h2>";
foreach ($tmppluginhost->get_plugins() as $name => $plugin) {
$about = $plugin->about();
if (!$about[3]) {
+ $checked = "";
+ $disabled = "";
+
if (in_array($name, $system_enabled)) {
$checked = "checked='1'";
$disabled = "disabled='1'";
- $rowclass = '';
} else if (in_array($name, $user_enabled)) {
$checked = "checked='1'";
- $disabled = "";
- $rowclass = "Selected";
- } else {
- $checked = "";
- $disabled = "";
- $rowclass = '';
- }
-
- print "<tr class='$rowclass'>";
-
- $icon_class = $checked ? "plugin-enabled" : "plugin-disabled";
-
- print "<td align='center'><input id='FPCHK-$name' name='plugins[]' value='$name' onclick='Tables.onRowChecked(this);'
- dojoType=\"dijit.form.CheckBox\" $checked $disabled
- type=\"checkbox\"></td>";
-
- print "<td><label for='FPCHK-$name'><i class='material-icons $icon_class'>extension</i> $name</label></td>";
- print "<td><label for='FPCHK-$name'>" . htmlspecialchars($about[1]) . "</label>";
- if (@$about[4]) {
- print " &mdash; <a target=\"_blank\" rel=\"noopener noreferrer\" class=\"visibleLink\"
- href=\"".htmlspecialchars($about[4])."\">".__("more info")."</a>";
}
- print "</td>";
- print "<td>" . htmlspecialchars(sprintf("%.2f", $about[0])) . "</td>";
- print "<td>" . htmlspecialchars($about[2]) . "</td>";
+ print "<fieldset class='prefs plugin'>
+ <label>$name:</label>
+ <label class='checkbox description text-muted' id='PLABEL-$name'>
+ <input name='plugins[]' value='$name' dojoType='dijit.form.CheckBox' $checked $disabled type='checkbox'>
+ ".htmlspecialchars($about[1])."</label>";
if (count($tmppluginhost->get_all($plugin)) > 0) {
if (in_array($name, $system_enabled) || in_array($name, $user_enabled)) {
- print "<td><a href='#' onclick=\"Helpers.clearPluginData('$name')\" class='visibleLink'>".__("Clear data")."</a></td>";
+ print " <button dojoType='dijit.form.Button'
+ onclick=\"Helpers.clearPluginData('$name')\">
+ <i class='material-icons'>clear</i> ".__("Clear data")."</button>";
}
}
- print "</tr>";
-
+ if (@$about[4]) {
+ print " <button dojoType='dijit.form.Button' class='alt-info'
+ onclick='window.open(\"".htmlspecialchars($about[4])."\")'>
+ <i class='material-icons'>open_in_new</i> ".__("More info...")."</button>";
+ }
+ print "<div dojoType='dijit.Tooltip' connectId='PLABEL-$name' position='after'>".
+ htmlspecialchars(T_sprintf("v%.2f, by %s", $about[0], $about[2])).
+ "</div>";
+ print "</fieldset>";
}
-
}
- print "</table>";
-
- //print "<p>" . __("You will need to reload Tiny Tiny RSS for plugin changes to take effect.") . "</p>";
-
print "</div>"; #content-pane
print '<div dojoType="dijit.layout.ContentPane" region="bottom">';
@@ -904,7 +875,6 @@ class Pref_Prefs extends Handler_Protected {
print "</form>";
-
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
"hook_prefs_tab", "prefPrefs");
@@ -1039,35 +1009,34 @@ class Pref_Prefs extends Handler_Protected {
print_hidden("key", "USER_STYLESHEET");
print "<textarea class='panel user-css-editor' dojoType='dijit.form.SimpleTextarea'
- style='font-size : 12px;'
- name='value'>$value</textarea>";
+ style='font-size : 12px;' name='value'>$value</textarea>";
- print "<div class='dlgButtons'>";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('cssEditDlg').execute()\">".__('Save')."</button> ";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('cssEditDlg').hide()\">".__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
}
function editPrefProfiles() {
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"Tables.select('pref-profiles-list', true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"Tables.select('pref-profiles-list', false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<div style=\"float : right\">";
+ print "<div style='float : right'>";
- print "<input name=\"newprofile\" dojoType=\"dijit.form.ValidationTextBox\"
- required=\"1\">
- <button dojoType=\"dijit.form.Button\"
+ print "<input name='newprofile' dojoType='dijit.form.ValidationTextBox'
+ required='1'>
+ <button dojoType='dijit.form.Button'
onclick=\"dijit.byId('profileEditDlg').addProfile()\">".
__('Create profile')."</button></div>";
@@ -1113,10 +1082,10 @@ class Pref_Prefs extends Handler_Protected {
$is_active = "";
}
- print "<td><span dojoType=\"dijit.InlineEditBox\"
- width=\"300px\" autoSave=\"false\"
- profile-id=\"$profile_id\">" . $edit_title .
- "<script type=\"dojo/method\" event=\"onChange\" args=\"item\">
+ print "<td><span dojoType='dijit.InlineEditBox'
+ width='300px' autoSave='false'
+ profile-id='$profile_id'>" . $edit_title .
+ "<script type='dojo/method' event='onChange' args='item'>
var elem = this;
dojo.xhrPost({
url: 'backend.php',
@@ -1137,17 +1106,14 @@ class Pref_Prefs extends Handler_Protected {
print "</form>";
print "</div>";
- print "<div class='dlgButtons'>
- <div style='float : left'>
- <button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').removeSelected()\">".
+ print "<footer>
+ <button style='float : left' class='alt-danger' dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').removeSelected()\">".
__('Remove selected profiles')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').activateProfile()\">".
+ <button dojoType='dijit.form.Button' class='alt-primary' type='submit' onclick=\"dijit.byId('profileEditDlg').activateProfile()\">".
__('Activate profile')."</button>
- </div>";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').hide()\">".
- __('Close this window')."</button>";
- print "</div>";
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('profileEditDlg').hide()\">".
+ __('Cancel')."</button>";
+ print "</footer>";
}
diff --git a/classes/pref/users.php b/classes/pref/users.php
index 86dd8aac1..680290b74 100644
--- a/classes/pref/users.php
+++ b/classes/pref/users.php
@@ -20,7 +20,7 @@ class Pref_Users extends Handler_Protected {
function edit() {
global $access_level_names;
- print "<form id=\"user_edit_form\" onsubmit='return false' dojoType=\"dijit.form.Form\">";
+ print "<form id='user_edit_form' onsubmit='return false' dojoType='dijit.form.Form'>";
print '<div dojoType="dijit.layout.TabContainer" style="height : 400px">
<div dojoType="dijit.layout.ContentPane" title="'.__('Edit user').'">';
@@ -44,53 +44,59 @@ class Pref_Users extends Handler_Protected {
$sel_disabled = ($id == $_SESSION["uid"] || $login == "admin") ? "disabled" : "";
- print "<div class=\"dlgSec\">".__("User")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("User")."</header>";
+ print "<section>";
if ($sel_disabled) {
print_hidden("login", "$login");
}
- print "<input size=\"30\" style=\"font-size : 16px\"
- dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
- $sel_disabled
- name=\"login\" value=\"$login\">";
+ print "<fieldset>";
+ print "<label>" . __("Login:") . "</label>";
+ print "<input style='font-size : 16px'
+ dojoType='dijit.form.ValidationTextBox' required='1'
+ $sel_disabled name='login' value=\"$login\">";
+ print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Authentication")."</header>";
+ print "<section>";
print "<fieldset>";
- print __('Access level: ') . " ";
+ print "<label>" . __('Access level: ') . "</label> ";
if (!$sel_disabled) {
print_select_hash("access_level", $access_level, $access_level_names,
- "dojoType=\"dijit.form.Select\" $sel_disabled");
+ "dojoType=\"fox.form.Select\" $sel_disabled");
} else {
print_select_hash("", $access_level, $access_level_names,
- "dojoType=\"dijit.form.Select\" $sel_disabled");
+ "dojoType=\"fox.form.Select\" $sel_disabled");
print_hidden("access_level", "$access_level");
}
print "</fieldset>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" size=\"20\" placeholder=\"Change password\"
- name=\"password\">";
+ print "<label>" . __("New password:") . "</label> ";
+ print "<input dojoType='dijit.form.TextBox' type='password' size='20' placeholder='Change password'
+ name='password'>";
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Options")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Options")."</header>";
+ print "<section>";
- print "<input dojoType=\"dijit.form.TextBox\" size=\"30\" name=\"email\" placeholder=\"E-mail\"
- value=\"$email\">";
+ print "<fieldset>";
+ print "<label>" . __("E-mail:") . "</label> ";
+ print "<input dojoType='dijit.form.TextBox' size='30' name='email'
+ value=\"$email\">";
+ print "</fieldset>";
- print "</div>";
+ print "</section>";
print "</table>";
@@ -103,11 +109,12 @@ class Pref_Users extends Handler_Protected {
print '</div>';
print '</div>';
- print "<div class=\"dlgButtons\">
- <button dojoType=\"dijit.form.Button\" class=\"alt-primary\" type=\"submit\" onclick=\"dijit.byId('userEditDlg').execute()\">".
+ print "<footer>
+ <button dojoType='dijit.form.Button' class='alt-primary' type='submit' onclick=\"dijit.byId('userEditDlg').execute()\">".
__('Save')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('userEditDlg').hide()\">".
- __('Cancel')."</button></div>";
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('userEditDlg').hide()\">".
+ __('Cancel')."</button>
+ </footer>";
print "</form>";
@@ -224,7 +231,7 @@ class Pref_Users extends Handler_Protected {
function add() {
$login = trim(clean($_REQUEST["login"]));
- $tmp_user_pwd = make_password(8);
+ $tmp_user_pwd = make_password();
$salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
$pwd_hash = encrypt_password($tmp_user_pwd, $salt, true);
@@ -264,21 +271,19 @@ class Pref_Users extends Handler_Protected {
}
}
- static function resetUserPassword($uid, $show_password) {
+ static function resetUserPassword($uid, $format_output = false) {
$pdo = Db::pdo();
- $sth = $pdo->prepare("SELECT login, email
- FROM ttrss_users WHERE id = ?");
+ $sth = $pdo->prepare("SELECT login FROM ttrss_users WHERE id = ?");
$sth->execute([$uid]);
if ($row = $sth->fetch()) {
$login = $row["login"];
- $email = $row["email"];
$new_salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
- $tmp_user_pwd = make_password(8);
+ $tmp_user_pwd = make_password();
$pwd_hash = encrypt_password($tmp_user_pwd, $new_salt, true);
@@ -287,44 +292,19 @@ class Pref_Users extends Handler_Protected {
WHERE id = ?");
$sth->execute([$pwd_hash, $new_salt, $uid]);
- if ($show_password) {
- print_notice(T_sprintf("Changed password of user %s to %s", $login, $tmp_user_pwd));
- } else {
- print_notice(T_sprintf("Sending new password of user %s to %s", $login, $email));
-
- if ($email) {
- require_once "lib/MiniTemplator.class.php";
-
- $tpl = new MiniTemplator;
-
- $tpl->readTemplateFromFile("templates/resetpass_template.txt");
+ $message = T_sprintf("Changed password of user %s to %s", "<strong>$login</strong>", "<strong>$tmp_user_pwd</strong>");
- $tpl->setVariable('LOGIN', $login);
- $tpl->setVariable('NEWPASS', $tmp_user_pwd);
-
- $tpl->addBlock('message');
-
- $message = "";
-
- $tpl->generateOutputToString($message);
-
- $mailer = new Mailer();
-
- $rc = $mailer->mail(["to_name" => $login,
- "to_address" => $email,
- "subject" => __("[tt-rss] Password change notification"),
- "message" => $message]);
-
- if (!$rc) print_error($mailer->error());
- }
- }
+ if ($format_output)
+ print_notice($message);
+ else
+ print $message;
}
}
function resetPass() {
$uid = clean($_REQUEST["id"]);
- Pref_Users::resetUserPassword($uid, true);
+ Pref_Users::resetUserPassword($uid);
}
function index() {
@@ -333,7 +313,7 @@ class Pref_Users extends Handler_Protected {
print "<div dojoType='dijit.layout.BorderContainer' gutters='false'>";
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
- print "<div dojoType='dijit.Toolbar'>";
+ print "<div dojoType='fox.Toolbar'>";
$user_search = trim(clean($_REQUEST["search"]));
@@ -344,9 +324,9 @@ class Pref_Users extends Handler_Protected {
}
print "<div style='float : right; padding-right : 4px;'>
- <input dojoType=\"dijit.form.TextBox\" id=\"user_search\" size=\"20\" type=\"search\"
+ <input dojoType='dijit.form.TextBox' id='user_search' size='20' type='search'
value=\"$user_search\">
- <button dojoType=\"dijit.form.Button\" oncl1ick=\"Users.reload()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.reload()'>".
__('Search')."</button>
</div>";
@@ -356,23 +336,23 @@ class Pref_Users extends Handler_Protected {
$sort = "login";
}
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"Tables.select('prefUserList', true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"Tables.select('prefUserList', false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"Users.add()\">".__('Create user')."</button>";
+ print "<button dojoType='dijit.form.Button' onclick='Users.add()'>".__('Create user')."</button>";
print "
- <button dojoType=\"dijit.form.Button\" onclick=\"Users.editSelected()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.editSelected()'>".
__('Edit')."</button dojoType=\"dijit.form.Button\">
- <button dojoType=\"dijit.form.Button\" onclick=\"Users.removeSelected()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.removeSelected()'>".
__('Remove')."</button dojoType=\"dijit.form.Button\">
- <button dojoType=\"dijit.form.Button\" onclick=\"Users.resetSelected()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.resetSelected()'>".
__('Reset password')."</button dojoType=\"dijit.form.Button\">";
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
@@ -400,16 +380,15 @@ class Pref_Users extends Handler_Protected {
ORDER BY $sort");
$sth->execute([":search" => $user_search ? "%$user_search%" : ""]);
- print "<p><table width=\"100%\" cellspacing=\"0\"
- class=\"prefUserList\" id=\"prefUserList\">";
+ print "<p><table width='100%' cellspacing='0' class='prefUserList' id='prefUserList'>";
- print "<tr class=\"title\">
- <td align='center' width=\"5%\">&nbsp;</td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('login')\">".__('Login')."</a></td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('access_level')\">".__('Access Level')."</a></td>
- <td width='10%'><a href=\"#\" onclick=\"Users.reload('num_feeds')\">".__('Subscribed feeds')."</a></td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('created')\">".__('Registered')."</a></td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('last_login')\">".__('Last login')."</a></td></tr>";
+ print "<tr class='title'>
+ <td align='center' width='5%'>&nbsp;</td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('login')\">".__('Login')."</a></td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('access_level')\">".__('Access Level')."</a></td>
+ <td width='10%'><a href='#' onclick=\"Users.reload('num_feeds')\">".__('Subscribed feeds')."</a></td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('created')\">".__('Registered')."</a></td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('last_login')\">".__('Last login')."</a></td></tr>";
$lnum = 0;
@@ -417,14 +396,14 @@ class Pref_Users extends Handler_Protected {
$uid = $line["id"];
- print "<tr data-row-id=\"$uid\" onclick='Users.edit($uid)'>";
+ print "<tr data-row-id='$uid' onclick='Users.edit($uid)'>";
$line["login"] = htmlspecialchars($line["login"]);
$line["created"] = make_local_datetime($line["created"], false);
$line["last_login"] = make_local_datetime($line["last_login"], false);
print "<td align='center'><input onclick='Tables.onRowChecked(this); event.stopPropagation();'
- dojoType=\"dijit.form.CheckBox\" type=\"checkbox\"></td>";
+ dojoType='dijit.form.CheckBox' type='checkbox'></td>";
print "<td title='".__('Click to edit')."'><i class='material-icons'>person</i> " . $line["login"] . "</td>";
diff --git a/classes/rpc.php b/classes/rpc.php
index 7220e10ea..725ca9622 100755
--- a/classes/rpc.php
+++ b/classes/rpc.php
@@ -240,8 +240,8 @@ class RPC extends Handler_Protected {
$new_feed_id = (int)$row['id'] + 1;
$sth = $this->pdo->prepare("INSERT INTO ttrss_archived_feeds
- (id, owner_uid, title, feed_url, site_url)
- SELECT ?, owner_uid, title, feed_url, site_url from ttrss_feeds
+ (id, owner_uid, title, feed_url, site_url, created)
+ SELECT ?, owner_uid, title, feed_url, site_url, NOW() from ttrss_feeds
WHERE id = ?");
$sth->execute([$new_feed_id, $feed_id]);
@@ -287,7 +287,7 @@ class RPC extends Handler_Protected {
/* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */
function catchupSelected() {
$ids = explode(",", clean($_REQUEST["ids"]));
- $cmode = sprintf("%d", clean($_REQUEST["cmode"]));
+ $cmode = (int)clean($_REQUEST["cmode"]);
Article::catchupArticlesById($ids, $cmode);
@@ -347,20 +347,6 @@ class RPC extends Handler_Protected {
print "</ul>";
}
- function updateFeedBrowser() {
- if (defined('_DISABLE_FEED_BROWSER') && _DISABLE_FEED_BROWSER) return;
-
- $search = clean($_REQUEST["search"]);
- $limit = clean($_REQUEST["limit"]);
- $mode = (int) clean($_REQUEST["mode"]);
-
- require_once "feedbrowser.php";
-
- print json_encode(array("content" =>
- make_feed_browser($search, $limit, $mode),
- "mode" => $mode));
- }
-
// Silent
function massSubscribe() {
diff --git a/classes/rssutils.php b/classes/rssutils.php
index 6048c8310..68e0255ed 100755
--- a/classes/rssutils.php
+++ b/classes/rssutils.php
@@ -19,51 +19,9 @@ class RSSUtils {
return preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $str);
}
- static function update_feedbrowser_cache() {
-
+ static function cleanup_feed_browser() {
$pdo = Db::pdo();
-
- $sth = $pdo->query("SELECT feed_url, site_url, title, COUNT(id) AS subscribers
- FROM ttrss_feeds WHERE feed_url NOT IN (SELECT feed_url FROM ttrss_feeds
- WHERE private IS true OR auth_login != '' OR auth_pass != '' OR feed_url LIKE '%:%@%/%')
- GROUP BY feed_url, site_url, title ORDER BY subscribers DESC LIMIT 1000");
-
- $pdo->beginTransaction();
-
$pdo->query("DELETE FROM ttrss_feedbrowser_cache");
-
- $count = 0;
-
- while ($line = $sth->fetch()) {
-
- $subscribers = $line["subscribers"];
- $feed_url = $line["feed_url"];
- $title = $line["title"];
- $site_url = $line["site_url"];
-
- $tmph = $pdo->prepare("SELECT subscribers FROM
- ttrss_feedbrowser_cache WHERE feed_url = ?");
- $tmph->execute([$feed_url]);
-
- if (!$tmph->fetch()) {
-
- $tmph = $pdo->prepare("INSERT INTO ttrss_feedbrowser_cache
- (feed_url, site_url, title, subscribers)
- VALUES
- (?, ?, ?, ?)");
-
- $tmph->execute([$feed_url, $site_url, $title, $subscribers]);
-
- ++$count;
-
- }
-
- }
-
- $pdo->commit();
-
- return $count;
-
}
static function update_daemon_common($limit = DAEMON_FEED_LIMIT) {
@@ -305,7 +263,7 @@ class RSSUtils {
$pdo = Db::pdo();
- $sth = $pdo->prepare("SELECT title FROM ttrss_feeds WHERE id = ?");
+ $sth = $pdo->prepare("SELECT title, site_url FROM ttrss_feeds WHERE id = ?");
$sth->execute([$feed]);
if (!$row = $sth->fetch()) {
@@ -315,11 +273,12 @@ class RSSUtils {
}
$title = $row["title"];
+ $site_url = $row["site_url"];
// feed was batch-subscribed or something, we need to get basic info
// this is not optimal currently as it fetches stuff separately TODO: optimize
- if ($title == "[Unknown]") {
- Debug::log("setting basic feed info for $feed...");
+ if ($title == "[Unknown]" || !$title || !$site_url) {
+ Debug::log("setting basic feed info for $feed [$title, $site_url]...");
RSSUtils::set_basic_feed_info($feed);
}
@@ -349,7 +308,12 @@ class RSSUtils {
$fetch_url = $row["feed_url"];
$feed_language = mb_strtolower($row["feed_language"]);
- if (!$feed_language) $feed_language = 'english';
+
+ if (!$feed_language)
+ $feed_language = mb_strtolower(get_pref('DEFAULT_SEARCH_LANGUAGE', $owner_uid));
+
+ if (!$feed_language)
+ $feed_language = 'simple';
} else {
return false;
@@ -1206,10 +1170,12 @@ class RSSUtils {
$sth->execute([$error_msg, $feed]);
unset($rss);
+
+ Debug::log("update failed.", Debug::$LOG_VERBOSE);
return false;
}
- Debug::log("done", Debug::$LOG_VERBOSE);
+ Debug::log("update done.", Debug::$LOG_VERBOSE);
return true;
}
@@ -1241,12 +1207,8 @@ class RSSUtils {
static function cache_media($html, $site_url) {
libxml_use_internal_errors(true);
- $charset_hack = '<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- </head>';
-
$doc = new DOMDocument();
- $doc->loadHTML($charset_hack . $html);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $html);
$xpath = new DOMXPath($doc);
$entries = $xpath->query('(//img[@src])|(//video/source[@src])|(//audio/source[@src])');
@@ -1288,6 +1250,20 @@ class RSSUtils {
}
}
+ static function expire_feed_archive() {
+ Debug::log("Removing old archived feeds...");
+
+ $pdo = Db::pdo();
+
+ if (DB_TYPE == "pgsql") {
+ $pdo->query("DELETE FROM ttrss_archived_feeds
+ WHERE created < NOW() - INTERVAL '1 month'");
+ } else {
+ $pdo->query("DELETE FROM ttrss_archived_feeds
+ WHERE created < DATE_SUB(NOW(), INTERVAL 1 MONTH)");
+ }
+ }
+
static function expire_lock_files() {
Debug::log("Removing old lock files...", Debug::$LOG_VERBOSE);
@@ -1526,9 +1502,8 @@ class RSSUtils {
RSSUtils::expire_cached_files();
RSSUtils::expire_lock_files();
RSSUtils::expire_error_log();
-
- $count = RSSUtils::update_feedbrowser_cache();
- Debug::log("Feedbrowser updated, $count feeds processed.");
+ RSSUtils::expire_feed_archive();
+ RSSUtils::cleanup_feed_browser();
Article::purge_orphans();
RSSUtils::cleanup_counters_cache();
diff --git a/config.php-dist b/config.php-dist
index da9237ff6..244390b98 100755
--- a/config.php-dist
+++ b/config.php-dist
@@ -18,11 +18,13 @@
// *** Basic settings (important!) ***
// ***********************************
- define('SELF_URL_PATH', 'http://example.org/tt-rss/');
- // Full URL of your tt-rss installation. This should be set to the
- // location of tt-rss directory, e.g. http://example.org/tt-rss/
- // You need to set this option correctly otherwise several features
- // including PUSH, bookmarklets and browser integration will not work properly.
+ define('SELF_URL_PATH', 'https://example.org/tt-rss/');
+ // This should be set to a fully qualified URL used to access
+ // your tt-rss instance over the net.
+ // The value should be a constant string literal. Please don't use
+ // PHP server variables here - you might introduce security
+ // issues on your install and cause hard to debug problems.
+ // If your tt-rss instance is behind a reverse proxy, use the external URL.
define('SINGLE_USER_MODE', false);
// Operate in single user mode, disables all functionality related to
diff --git a/css/cdm.less b/css/cdm.less
index 3890451f9..7ac28913e 100755
--- a/css/cdm.less
+++ b/css/cdm.less
@@ -367,6 +367,10 @@ div#floatingTitle.Unread a.title {
}
+.cdm.expandable:not(.active) {
+ user-select : none;
+}
+
.cdm.expandable.Unread {
background : white;
}
diff --git a/css/default.css b/css/default.css
index e952daa96..9d6b81fd1 100644
--- a/css/default.css
+++ b/css/default.css
@@ -127,30 +127,32 @@ body.ttrss_main a:hover {
text-decoration: underline;
}
body.ttrss_main #notify.visible {
- transform: translate(0, -45px);
+ opacity: 100;
}
body.ttrss_main #notify {
- bottom: -45px;
- right: 0px;
- height: 30px;
- left: 0px;
- border-width: 1px 0px 0px 0px;
+ bottom: 20px;
+ right: 20px;
+ min-width: 200px;
+ max-width: 350px;
+ border-width: 1px;
border-style: solid;
position: fixed;
- font-size: 13px;
+ font-size: 14px;
z-index: 99;
display: flex;
+ opacity: 0;
align-items: center;
- transition: all 0.5s ease-in-out;
-}
-body.ttrss_main #notify > * {
- padding: 4px;
+ padding: 10px;
+ transition: opacity 0.2s linear;
+ box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.1);
}
body.ttrss_main #notify img {
vertical-align: middle;
}
body.ttrss_main #notify .msg {
flex-grow: 2;
+ padding: 0 10px;
+ line-height: 20px;
}
body.ttrss_main #notify .icon-close {
cursor: pointer;
@@ -179,6 +181,12 @@ body.ttrss_main .notify.notify_error i.icon-notify,
body.ttrss_main .notify.notify_error i.icon-close {
color: white;
}
+body.ttrss_main .action-chooser .action-button .dijitButtonText {
+ vertical-align: unset;
+}
+body.ttrss_main .action-chooser .action-button .dijitArrowButtonInner {
+ display: none;
+}
body.ttrss_main .hl {
border: 0px solid #ddd;
border-bottom-width: 1px;
@@ -188,6 +196,7 @@ body.ttrss_main .hl {
flex-wrap: nowrap;
background: #f5f5f5;
align-items: center;
+ user-select: none;
}
body.ttrss_main .hl > * {
white-space: nowrap;
@@ -426,6 +435,7 @@ body.ttrss_main div#headlines-frame.wide .title {
body.ttrss_main div#headlines-frame.wide .hl .feed {
display: none;
}
+body.ttrss_main .dijitDialog header,
body.ttrss_main .dijitDialog .dlgSec,
body.ttrss_main .dijitDialog .dlgSecHoriz {
font-size: 16px;
@@ -433,12 +443,18 @@ body.ttrss_main .dijitDialog .dlgSecHoriz {
color: #555;
font-family: "Segoe WP Semibold", "Segoe UI Semibold", "Segoe UI Web Semibold", "Segoe UI", Ubuntu, "Helvetica Neue", Helvetica, Arial, sans-serif;
}
+body.ttrss_main .dijitDialog section,
body.ttrss_main .dijitDialog .dlgSecCont {
margin: 10px 20px;
}
+body.ttrss_main .dijitDialog header.horizontal + section,
body.ttrss_main .dijitDialog .dlgSecHoriz + .dlgSecCont {
- margin: 10px 0px;
+ margin: 10px 0;
}
+body.ttrss_main .dijitDialog section.narrow {
+ margin: 0;
+}
+body.ttrss_main .dijitDialog section fieldset > label,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label {
font-weight: bold;
@@ -447,28 +463,40 @@ body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label {
min-width: 140px;
text-align: right;
}
+body.ttrss_main .dijitDialog section fieldset > label.checkbox,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label.checkbox,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label.checkbox {
font-weight: normal;
display: inline;
}
+body.ttrss_main .dijitDialog section fieldset > label.inline,
+body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label.inline,
+body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label.inline {
+ display: inline;
+}
+body.ttrss_main .dijitDialog section fieldset,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset {
border-width: 0px;
padding: 5px 0px;
}
+body.ttrss_main .dijitDialog section fieldset.narrow,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset.narrow,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset.narrow {
padding: 2px 0px;
}
+body.ttrss_main .dijitDialog section fieldset.align-right,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset.align-right,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset.align-right {
text-align: right;
}
+body.ttrss_main .dijitDialog footer,
body.ttrss_main .dijitDialog .dlgButtons {
margin-top: 5px;
text-align: right;
- clear: both;
+}
+body.ttrss_main .dijitDialog footer.text-center {
+ text-align: center;
}
body.ttrss_main i.icon-label {
color: #fff7d5;
@@ -570,12 +598,8 @@ body.ttrss_main #feeds-holder #feedTree .dijitTreeNode .dijitTreeRowSelected {
background: white;
color: #333;
}
-body.ttrss_main #feeds-holder #feedTree .icon {
- position: relative;
- top: -2px;
-}
-body.ttrss_main #feeds-holder #feedTree i.icon {
- left: -2px;
+body.ttrss_main #feeds-holder #feedTree .dijitIcon.feed-icon {
+ margin-right: 2px;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-inbox {
color: #555;
@@ -584,10 +608,10 @@ body.ttrss_main #feeds-holder #feedTree i.icon.icon-archive {
color: #c77b2e;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-star {
+ position: relative;
color: #ffc069;
font-size: 21px;
- top: -4px;
- left: -4px;
+ left: -2px;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-rss_feed {
color: #ff7c4b;
@@ -596,8 +620,9 @@ body.ttrss_main #feeds-holder #feedTree i.icon.icon-whatshot {
color: #69C671;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-restore {
+ position: relative;
+ top: -1px;
font-weight: bold;
- left: -3px;
color: #257aa7;
}
body.ttrss_main #headlines-wrap-inner {
@@ -917,6 +942,30 @@ body.ttrss_utility .alert .close {
line-height: 20px;
cursor: pointer;
}
+body.ttrss_main .pull-right,
+body.ttrss_utility .pull-right {
+ float: right;
+}
+body.ttrss_main .pull-left,
+body.ttrss_utility .pull-left {
+ float: left;
+}
+body.ttrss_main .text-error,
+body.ttrss_utility .text-error {
+ color: #b94a48;
+}
+body.ttrss_main .text-info,
+body.ttrss_utility .text-info {
+ color: #3a87ad;
+}
+body.ttrss_main .text-success,
+body.ttrss_utility .text-success {
+ color: #468847;
+}
+body.ttrss_main .text-warning,
+body.ttrss_utility .text-warning {
+ color: #a47e3c;
+}
body.ttrss_main .alert,
body.ttrss_utility .alert,
body.ttrss_main .alert h4,
@@ -966,8 +1015,8 @@ body.ttrss_utility hr {
border: 0px solid #ccc;
border-bottom-width: 1px;
}
-body.ttrss_main .insensitive,
-body.ttrss_utility .insensitive {
+body.ttrss_main .text-muted,
+body.ttrss_utility .text-muted {
color: #555;
}
body.ttrss_main .small,
@@ -1321,6 +1370,9 @@ div#floatingTitle.Unread a.title {
font-weight: normal;
cursor: pointer;
}
+.cdm.expandable:not(.active) {
+ user-select: none;
+}
.cdm.expandable.Unread {
background: white;
}
@@ -1443,22 +1495,23 @@ body.ttrss_prefs .user-css-editor {
height: 300px;
width: 575px;
}
-body.ttrss_prefs fieldset.prefs-set .help-text {
- display: inline-block;
- margin-left: 10px;
+body.ttrss_prefs fieldset.prefs {
+ min-height: 30px;
}
-body.ttrss_prefs table.prefPluginsList td label,
-body.ttrss_prefs table.prefUserList td {
- cursor: pointer;
+body.ttrss_prefs fieldset.prefs label:first-of-type {
+ min-width: 300px;
}
-body.ttrss_prefs table.prefPluginsList label {
- white-space: nowrap;
+body.ttrss_prefs fieldset.prefs .help-text {
+ display: inline-block;
+ margin-left: 10px;
}
-body.ttrss_prefs table.prefPluginsList i.plugin-enabled {
- color: #69C671;
+body.ttrss_prefs fieldset.plugin label.description {
+ width: 600px;
+ margin-right: 150px;
+ display: inline-block;
}
-body.ttrss_prefs table.prefPluginsList label img {
- vertical-align: middle;
+body.ttrss_prefs fieldset.plugin label.description .dijitCheckBox {
+ margin-right: 10px;
}
body.ttrss_prefs table.prefErrorLog tr.errrow td {
font-size: 10px;
@@ -1489,6 +1542,7 @@ body.ttrss_prefs .phpinfo td.e {
}
body.ttrss_prefs .phpinfo td.v {
font-family: monospace;
+ word-break: break-all;
}
body.ttrss_prefs fieldset,
body.ttrss_utility fieldset {
@@ -1597,8 +1651,7 @@ body.ttrss_utility.ttrss_login .container .content {
padding: 40px;
}
body.ttrss_utility.installer,
-body.ttrss_utility.feed_debugger,
-body.ttrss_utility.ttrss_zoom {
+body.ttrss_utility.feed_debugger {
margin: 2em;
}
body.ttrss_utility.share_popup {
@@ -1614,6 +1667,17 @@ body.ttrss_utility.share_popup .content {
.flat li {
padding: 2px;
}
+.flat #feedTree .dijitTreeContent .dijitInline {
+ vertical-align: baseline;
+}
+.flat .dijitButton i.material-icons {
+ position: relative;
+ top: -1px;
+}
+.flat .tabLabel > i.material-icons {
+ position: relative;
+ top: -1px;
+}
.flat #filterDlg_Matches span.filterRule {
color: green;
}
@@ -1756,6 +1820,10 @@ body.ttrss_utility.share_popup .content {
.flat .dijitCheckBox {
background: #ccc;
}
+body.ttrss_zoom {
+ max-width: 900px;
+ margin: 2em auto;
+}
body.ttrss_zoom div.post {
border: 1px solid #ddd;
background: white;
diff --git a/css/default.css.map b/css/default.css.map
index cb72b1835..aec172a0c 100644
--- a/css/default.css.map
+++ b/css/default.css.map
@@ -1 +1 @@
-{"version":3,"sources":["default.less","defines.less","tt-rss.less","cdm.less","prefs.less","utility.less","dijit_basic.less","dijit_light.less","zoom.less"],"names":[],"mappings":"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","file":"default.css"} \ No newline at end of file
+{"version":3,"sources":["default.less","defines.less","tt-rss.less","cdm.less","prefs.less","utility.less","dijit_basic.less","dijit_light.less","zoom.less"],"names":[],"mappings":"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","file":"default.css"} \ No newline at end of file
diff --git a/css/dijit_basic.less b/css/dijit_basic.less
index c08af6de4..7c13eff84 100644
--- a/css/dijit_basic.less
+++ b/css/dijit_basic.less
@@ -4,6 +4,22 @@
padding: 2px;
}
+ #feedTree {
+ .dijitTreeContent .dijitInline {
+ vertical-align : baseline;
+ }
+ }
+
+ .dijitButton i.material-icons {
+ position: relative;
+ top : -1px;
+ }
+
+ .tabLabel > i.material-icons {
+ position : relative;
+ top : -1px;
+ }
+
#filterDlg_Matches span.filterRule {
color: green;
}
@@ -142,4 +158,4 @@
}
}
-} \ No newline at end of file
+}
diff --git a/css/prefs.less b/css/prefs.less
index 3b0e28c68..bd390bbd2 100644
--- a/css/prefs.less
+++ b/css/prefs.less
@@ -80,31 +80,31 @@ body.ttrss_prefs {
width : 575px;
}
- fieldset.prefs-set {
+ fieldset.prefs {
+ min-height : 30px;
+
+ label:first-of-type {
+ min-width : 300px;
+ }
+
.help-text {
display : inline-block;
margin-left : 10px;
}
}
- table.prefPluginsList td label, table.prefUserList td {
- cursor : pointer;
- }
-
- table.prefPluginsList{
- label {
- white-space : nowrap;
- }
+ fieldset.plugin {
+ label.description {
+ width : 600px;
+ margin-right : 150px;
+ display : inline-block;
- i.plugin-enabled {
- color : @color-checked;
+ .dijitCheckBox {
+ margin-right : 10px;
+ }
}
}
- table.prefPluginsList label img {
- vertical-align : middle;
- }
-
table.prefErrorLog tr.errrow td {
font-size : 10px;
}
@@ -139,6 +139,7 @@ body.ttrss_prefs {
td.v {
font-family : monospace;
+ word-break : break-all;
}
}
}
diff --git a/css/tt-rss.less b/css/tt-rss.less
index edce31263..e185ad7e1 100755
--- a/css/tt-rss.less
+++ b/css/tt-rss.less
@@ -142,26 +142,25 @@ body.ttrss_main {
}
#notify.visible {
- transform: translate(0, -45px);
+ opacity: 100;
}
#notify {
- bottom : -45px;
- right : 0px;
- height : 30px;
- left : 0px;
- border-width : 1px 0px 0px 0px;
+ bottom : 20px;
+ right : 20px;
+ min-width : 200px;
+ max-width : 350px;
+ border-width : 1px;
border-style : solid;
position : fixed;
- font-size : 13px;
+ font-size : 14px;
z-index : 99;
display : flex;
+ opacity: 0;
align-items : center;
- transition: all 0.5s ease-in-out;
-
- > * {
- padding : 4px;
- }
+ padding : 10px;
+ transition: opacity 0.2s linear;
+ box-shadow : 0px 0px 8px rgba(0,0,0,0.1);
img {
vertical-align : middle;
@@ -169,6 +168,8 @@ body.ttrss_main {
.msg {
flex-grow : 2;
+ padding : 0 10px;
+ line-height : 20px;
}
.icon-close {
@@ -205,6 +206,17 @@ body.ttrss_main {
}
}
+ .action-chooser {
+ .action-button {
+ .dijitButtonText {
+ vertical-align : unset;
+ }
+ .dijitArrowButtonInner {
+ display : none;
+ }
+ }
+ }
+
.hl {
border: 0px solid @border-default;
border-bottom-width: 1px;
@@ -214,6 +226,7 @@ body.ttrss_main {
flex-wrap : nowrap;
background : @color-panel-bg;
align-items : center;
+ user-select : none;
> * {
white-space : nowrap;
@@ -496,6 +509,7 @@ body.ttrss_main {
.dijitDialog {
+ header,
.dlgSec, .dlgSecHoriz {
font-size : 16px;
font-weight : 600;
@@ -503,14 +517,21 @@ body.ttrss_main {
font-family: @fonts-ui-bold;
}
+ section,
.dlgSecCont {
margin : 10px 20px;
}
+ header.horizontal + section,
.dlgSecHoriz + .dlgSecCont {
- margin : 10px 0px;
+ margin : 10px 0;
+ }
+
+ section.narrow {
+ margin : 0;
}
+ section,
div.dlgSecCont, div.dlgSecSimple {
fieldset {
@@ -526,6 +547,10 @@ body.ttrss_main {
font-weight : normal;
display : inline;
}
+
+ > label.inline {
+ display : inline;
+ }
}
fieldset {
@@ -542,10 +567,14 @@ body.ttrss_main {
}
}
+ footer,
.dlgButtons {
margin-top : 5px;
text-align: right;
- clear: both;
+ }
+
+ footer.text-center {
+ text-align: center;
}
}
@@ -668,13 +697,8 @@ body.ttrss_main {
color : #333;
}
- .icon {
- position : relative;
- top : -2px;
- }
-
- i.icon {
- left : -2px;
+ .dijitIcon.feed-icon {
+ margin-right : 2px;
}
i.icon.icon-inbox {
@@ -686,10 +710,10 @@ body.ttrss_main {
}
i.icon.icon-star {
+ position : relative;
color : @color-marked;
font-size : 21px;
- top : -4px;
- left : -4px;
+ left : -2px;
}
i.icon.icon-rss_feed {
@@ -701,8 +725,9 @@ body.ttrss_main {
}
i.icon.icon-restore {
+ position : relative;
+ top : -1px;
font-weight : bold;
- left : -3px;
color : @color-accent;
}
@@ -1098,6 +1123,30 @@ body.ttrss_main, body.ttrss_utility {
}
}
+ .pull-right {
+ float : right;
+ }
+
+ .pull-left {
+ float : left;
+ }
+
+ .text-error {
+ color: #b94a48;
+ }
+
+ .text-info {
+ color: #3a87ad;
+ }
+
+ .text-success {
+ color: #468847;
+ }
+
+ .text-warning {
+ color: darken(#c09853, 10%);
+ }
+
.alert,
.alert h4 {
color: #c09853;
@@ -1144,7 +1193,7 @@ body.ttrss_main, body.ttrss_utility {
border-bottom-width: 1px;
}
- .insensitive {
+ .text-muted {
color : @default-text;
}
diff --git a/css/utility.less b/css/utility.less
index 56e6eaf94..17d403ade 100644
--- a/css/utility.less
+++ b/css/utility.less
@@ -99,8 +99,7 @@ body.ttrss_utility.ttrss_login {
}
body.ttrss_utility.installer,
-body.ttrss_utility.feed_debugger,
-body.ttrss_utility.ttrss_zoom {
+body.ttrss_utility.feed_debugger {
margin : 2em;
}
diff --git a/css/zoom.less b/css/zoom.less
index d55a982e5..5ada0caff 100644
--- a/css/zoom.less
+++ b/css/zoom.less
@@ -1,4 +1,7 @@
body.ttrss_zoom {
+ max-width : 900px;
+ margin : 2em auto;
+
div.post {
border : 1px solid #ddd;
background : white;
diff --git a/include/feedbrowser.php b/include/feedbrowser.php
deleted file mode 100644
index 77ae9d649..000000000
--- a/include/feedbrowser.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
- function make_feed_browser($search, $limit, $mode = 1) {
-
- if (defined('_DISABLE_FEED_BROWSER') && _DISABLE_FEED_BROWSER) return;
-
- $rv = '';
-
- $pdo = Db::pdo();
-
- if ($search) {
- $search = $pdo->quote($search);
-
- $search_qpart = "AND (UPPER(feed_url) LIKE UPPER('%$search%') OR
- UPPER(title) LIKE UPPER('%$search%'))";
- } else {
- $search_qpart = "";
- }
-
- if ($mode == 1) {
- $sth = $pdo->prepare("SELECT feed_url, site_url, title, SUM(subscribers) AS subscribers FROM
- (SELECT feed_url, site_url, title, subscribers FROM ttrss_feedbrowser_cache UNION ALL
- SELECT feed_url, site_url, title, subscribers FROM ttrss_linked_feeds) AS qqq
- WHERE
- (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf
- WHERE tf.feed_url = qqq.feed_url
- AND owner_uid = ?) $search_qpart
- GROUP BY feed_url, site_url, title ORDER BY subscribers DESC LIMIT " . (int)$limit);
- $sth->execute([$_SESSION['uid']]);
-
- } else if ($mode == 2) {
- $sth = $pdo->prepare("SELECT *,
- (SELECT COUNT(*) FROM ttrss_user_entries WHERE
- orig_feed_id = ttrss_archived_feeds.id) AS articles_archived
- FROM
- ttrss_archived_feeds
- WHERE
- (SELECT COUNT(*) FROM ttrss_feeds
- WHERE ttrss_feeds.feed_url = ttrss_archived_feeds.feed_url AND
- owner_uid = :uid) = 0 AND
- owner_uid = :uid $search_qpart
- ORDER BY id DESC LIMIT " . (int)$limit);
-
- $sth->execute([":uid" => $_SESSION['uid']]);
- }
-
- $feedctr = 0;
-
- while ($line = $sth->fetch()) {
-
- if ($mode == 1) {
-
- $feed_url = htmlspecialchars($line["feed_url"]);
- $site_url = htmlspecialchars($line["site_url"]);
- $subscribers = $line["subscribers"];
-
- $check_box = "<input onclick='Lists.onRowChecked(this)'
- dojoType=\"dijit.form.CheckBox\"
- type=\"checkbox\" \">";
-
- $site_url = "<a target=\"_blank\" rel=\"noopener noreferrer\"
- href=\"$site_url\">
- <span class=\"fb_feedTitle\">".
- htmlspecialchars($line["title"])."</span></a>";
-
- $feed_url = "<a target=\"_blank\" rel=\"noopener noreferrer\" class=\"fb_feedUrl\"
- href=\"$feed_url\"><i class='icon-syndicate material-icons'>rss_feed</i></a>";
-
- $rv .= "<li>$check_box $feed_url $site_url".
- "&nbsp;<span class='subscribers'>($subscribers)</span></li>";
-
- } else if ($mode == 2) {
- $feed_url = htmlspecialchars($line["feed_url"]);
- $site_url = htmlspecialchars($line["site_url"]);
-
- $check_box = "<input onclick='Lists.onRowChecked(this)' dojoType=\"dijit.form.CheckBox\"
- type=\"checkbox\">";
-
- if ($line['articles_archived'] > 0) {
- $archived = sprintf(_ngettext("%d archived article", "%d archived articles", (int) $line['articles_archived']), $line['articles_archived']);
- $archived = "&nbsp;<span class='subscribers'>($archived)</span>";
- } else {
- $archived = '';
- }
-
- $site_url = "<a target=\"_blank\" rel=\"noopener noreferrer\"
- href=\"$site_url\">
- <span class=\"fb_feedTitle\">".
- htmlspecialchars($line["title"])."</span></a>";
-
- $feed_url = "<a target=\"_blank\" rel=\"noopener noreferrer\" class=\"fb_feedUrl\"
- href=\"$feed_url\"><i class='icon-syndicate material-icons'>rss_feed</i></a>";
-
-
- $rv .= "<li id=\"FBROW-".$line["id"]."\">".
- "$check_box $feed_url $site_url $archived</li>";
- }
-
- ++$feedctr;
- }
-
- if ($feedctr == 0) {
- $rv .= "<li style=\"text-align : center\"><p>".__('No feeds found.')."</p></li>";
- }
-
- return $rv;
- }
diff --git a/include/functions.php b/include/functions.php
index a1aeb7135..6dc9990e8 100755..100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -1,6 +1,6 @@
<?php
define('EXPECTED_CONFIG_VERSION', 26);
- define('SCHEMA_VERSION', 135);
+ define('SCHEMA_VERSION', 138);
define('LABEL_BASE_INDEX', -1024);
define('PLUGIN_FEED_BASE_INDEX', -128);
@@ -141,7 +141,6 @@
}
_bindtextdomain("messages", "locale");
-
_textdomain("messages");
_bind_textdomain_codeset("messages", "UTF-8");
}
@@ -563,7 +562,7 @@
libxml_use_internal_errors(true);
$doc = new DOMDocument();
- $doc->loadHTML($html);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $html);
$xpath = new DOMXPath($doc);
$base = $xpath->query('/html/head/base[@href]');
@@ -738,21 +737,28 @@
}
}
- function make_password($length = 8) {
-
+ function make_password($length = 12) {
$password = "";
- $possible = "0123456789abcdfghjkmnpqrstvwxyzABCDFGHJKMNPQRSTVWXYZ";
+ $possible = "0123456789abcdfghjkmnpqrstvwxyzABCDFGHJKMNPQRSTVWXYZ*%+^";
- $i = 0;
+ $i = 0;
while ($i < $length) {
- $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
+
+ try {
+ $idx = function_exists("random_int") ? random_int(0, strlen($possible) - 1) : mt_rand(0, strlen($possible) - 1);
+ } catch (Exception $e) {
+ $idx = mt_rand(0, strlen($possible) - 1);
+ }
+
+ $char = substr($possible, $idx, 1);
if (!strstr($password, $char)) {
$password .= $char;
$i++;
}
}
+
return $password;
}
@@ -1197,6 +1203,7 @@
"goto_fresh" => __("Fresh"),
"goto_marked" => __("Starred"),
"goto_published" => __("Published"),
+ "goto_read" => __("Recently read"),
"goto_tagcloud" => __("Tag cloud"),
"goto_prefs" => __("Preferences")),
__("Other") => array(
@@ -1216,40 +1223,36 @@
function get_hotkeys_map() {
$hotkeys = array(
- // "navigation" => array(
"k" => "next_feed",
"j" => "prev_feed",
"n" => "next_article",
"p" => "prev_article",
- "(38)|up" => "prev_article",
- "(40)|down" => "next_article",
- // "^(38)|Ctrl-up" => "prev_article_noscroll",
- // "^(40)|Ctrl-down" => "next_article_noscroll",
- "(191)|/" => "search_dialog",
- // "article" => array(
+ "(38)|Up" => "prev_article",
+ "(40)|Down" => "next_article",
+ "*(38)|Shift+Up" => "article_scroll_up",
+ "*(40)|Shift+Down" => "article_scroll_down",
+ "^(38)|Ctrl+Up" => "prev_article_noscroll",
+ "^(40)|Ctrl+Down" => "next_article_noscroll",
+ "/" => "search_dialog",
"s" => "toggle_mark",
- "*s" => "toggle_publ",
+ "S" => "toggle_publ",
"u" => "toggle_unread",
- "*t" => "edit_tags",
+ "T" => "edit_tags",
"o" => "open_in_new_window",
"c p" => "catchup_below",
"c n" => "catchup_above",
- "*n" => "article_scroll_down",
- "*p" => "article_scroll_up",
- "*(38)|Shift+up" => "article_scroll_up",
- "*(40)|Shift+down" => "article_scroll_down",
- "a *w" => "toggle_widescreen",
+ "N" => "article_scroll_down",
+ "P" => "article_scroll_up",
+ "a W" => "toggle_widescreen",
"a e" => "toggle_embed_original",
"e" => "email_article",
"a q" => "close_article",
- // "article_selection" => array(
"a a" => "select_all",
"a u" => "select_unread",
- "a *u" => "select_marked",
+ "a U" => "select_marked",
"a p" => "select_published",
"a i" => "select_invert",
"a n" => "select_none",
- // "feed" => array(
"f r" => "feed_refresh",
"f a" => "feed_unhide_read",
"f s" => "feed_subscribe",
@@ -1257,31 +1260,27 @@
"f q" => "feed_catchup",
"f x" => "feed_reverse",
"f g" => "feed_toggle_vgroup",
- "f *d" => "feed_debug_update",
- "f *g" => "feed_debug_viewfeed",
- "f *c" => "toggle_combined_mode",
+ "f D" => "feed_debug_update",
+ "f G" => "feed_debug_viewfeed",
+ "f C" => "toggle_combined_mode",
"f c" => "toggle_cdm_expanded",
- "*q" => "catchup_all",
+ "Q" => "catchup_all",
"x" => "cat_toggle_collapse",
- // "goto" => array(
"g a" => "goto_all",
"g f" => "goto_fresh",
"g s" => "goto_marked",
"g p" => "goto_published",
+ "g r" => "goto_read",
"g t" => "goto_tagcloud",
- "g *p" => "goto_prefs",
- // "other" => array(
+ "g P" => "goto_prefs",
"r" => "select_article_cursor",
"c l" => "create_label",
"c f" => "create_filter",
"c s" => "collapse_sidebar",
- "a *n" => "toggle_night_mode",
- "^(191)|Ctrl+/" => "help_dialog",
+ "a N" => "toggle_night_mode",
+ "?" => "help_dialog",
);
- $hotkeys["^(38)|Ctrl-up"] = "prev_article_noscroll";
- $hotkeys["^(40)|Ctrl-down"] = "next_article_noscroll";
-
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HOTKEY_MAP) as $plugin) {
$hotkeys = $plugin->hook_hotkey_map($hotkeys);
}
@@ -1487,11 +1486,19 @@
}
if (count($search_query_leftover) > 0) {
- $search_query_leftover = $pdo->quote(implode(" & ", $search_query_leftover));
if (DB_TYPE == "pgsql") {
+
+ // if there's no joiners consider this a "simple" search and
+ // concatenate everything with &, otherwise don't try to mess with tsquery syntax
+ if (preg_match("/[&|]/", implode(" " , $search_query_leftover))) {
+ $tsquery = $pdo->quote(implode(" ", $search_query_leftover));
+ } else {
+ $tsquery = $pdo->quote(implode(" & ", $search_query_leftover));
+ }
+
array_push($query_keywords,
- "(tsvector_combined @@ to_tsquery($search_language, $search_query_leftover))");
+ "(tsvector_combined @@ to_tsquery($search_language, $tsquery))");
}
}
@@ -1521,17 +1528,13 @@
// plugins work on original source URLs used before caching
function rewrite_cached_urls($str) {
- $charset_hack = '<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- </head>';
-
$res = trim($str); if (!$res) return '';
$doc = new DOMDocument();
- $doc->loadHTML($charset_hack . $res);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $res);
$xpath = new DOMXPath($doc);
- $entries = $xpath->query('(//img[@src]|//video[@poster]|//video/source[@src]|//audio/source[@src])');
+ $entries = $xpath->query('(//img[@src]|//picture/source[@src]|//video[@poster]|//video/source[@src]|//audio/source[@src])');
$need_saving = false;
@@ -1548,6 +1551,8 @@
// this is strictly cosmetic
if ($entry->tagName == 'img') {
$suffix = ".png";
+ } else if ($entry->parentNode && $entry->parentNode->tagName == "picture") {
+ $suffix = ".png";
} else if ($entry->parentNode && $entry->parentNode->tagName == "video") {
$suffix = ".mp4";
} else if ($entry->parentNode && $entry->parentNode->tagName == "audio") {
@@ -1581,21 +1586,15 @@
$res = trim($str); if (!$res) return '';
- $charset_hack = '<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- </head>';
-
- $res = trim($res); if (!$res) return '';
-
libxml_use_internal_errors(true);
$doc = new DOMDocument();
- $doc->loadHTML($charset_hack . $res);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $res);
$xpath = new DOMXPath($doc);
$rewrite_base_url = $site_url ? $site_url : get_self_url_prefix();
- $entries = $xpath->query('(//a[@href]|//img[@src]|//video/source[@src]|//audio/source[@src])');
+ $entries = $xpath->query('(//a[@href]|//img[@src]|//video/source[@src]|//audio/source[@src]|//picture/source[@src])');
foreach ($entries as $entry) {
@@ -1689,7 +1688,7 @@
'dt', 'em', 'footer', 'figure', 'figcaption',
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'html', 'i',
'img', 'ins', 'kbd', 'li', 'main', 'mark', 'nav', 'noscript',
- 'ol', 'p', 'pre', 'q', 'ruby', 'rp', 'rt', 's', 'samp', 'section',
+ 'ol', 'p', 'picture', 'pre', 'q', 'ruby', 'rp', 'rt', 's', 'samp', 'section',
'small', 'source', 'span', 'strike', 'strong', 'sub', 'summary',
'sup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'time',
'tr', 'track', 'tt', 'u', 'ul', 'var', 'wbr', 'video', 'xml:namespace' );
@@ -1981,7 +1980,7 @@
return true;
}
- function add_feed_category($feed_cat, $parent_cat_id = false) {
+ function add_feed_category($feed_cat, $parent_cat_id = false, $order_id = 0) {
if (!$feed_cat) return false;
@@ -2004,9 +2003,9 @@
if (!$sth->fetch()) {
- $sth = $pdo->prepare("INSERT INTO ttrss_feed_categories (owner_uid,title,parent_cat)
- VALUES (?, ?, ?)");
- $sth->execute([$_SESSION['uid'], $feed_cat, $parent_cat_id]);
+ $sth = $pdo->prepare("INSERT INTO ttrss_feed_categories (owner_uid,title,parent_cat,order_id)
+ VALUES (?, ?, ?, ?)");
+ $sth->execute([$_SESSION['uid'], $feed_cat, $parent_cat_id, (int)$order_id]);
if (!$tr_in_progress) $pdo->commit();
@@ -2116,7 +2115,7 @@
libxml_use_internal_errors(true);
$doc = new DOMDocument();
- $doc->loadHTML($content);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $content);
$xpath = new DOMXPath($doc);
$entries = $xpath->query('/html/head/link[@rel="alternate" and '.
'(contains(@type,"rss") or contains(@type,"atom"))]|/html/head/link[@rel="feed"]');
@@ -2137,7 +2136,7 @@
}
function is_html($content) {
- return preg_match("/<html|DOCTYPE html/i", substr($content, 0, 100)) !== 0;
+ return preg_match("/<html|DOCTYPE html/i", substr($content, 0, 8192)) !== 0;
}
function url_is_html($url, $login = false, $pass = false) {
@@ -2217,7 +2216,8 @@
FROM ttrss_tags, ttrss_user_entries, ttrss_entries
WHERE post_int_id = int_id AND $interval_query AND
ref_id = ttrss_entries.id AND tag_cache != '' LIMIT ?");
- $sth->execute([$limit]);
+ $sth->bindValue(1, $limit_part, PDO::PARAM_INT);
+ $sth->execute();
$ids = array();
@@ -2403,18 +2403,23 @@
return __((parseInt(n) > 1) ? msg2 : msg1);
}';
- $l10n = _get_reader();
+ global $text_domains;
- for ($i = 0; $i < $l10n->total; $i++) {
- $orig = $l10n->get_original_string($i);
- if(strpos($orig, "\000") !== FALSE) { // Plural forms
- $key = explode(chr(0), $orig);
- print T_js_decl($key[0], _ngettext($key[0], $key[1], 1)); // Singular
- print T_js_decl($key[1], _ngettext($key[0], $key[1], 2)); // Plural
- } else {
- $translation = __($orig);
- print T_js_decl($orig, $translation);
+ foreach (array_keys($text_domains) as $domain) {
+ $l10n = _get_reader($domain);
+
+ for ($i = 0; $i < $l10n->total; $i++) {
+ $orig = $l10n->get_original_string($i);
+ if(strpos($orig, "\000") !== FALSE) { // Plural forms
+ $key = explode(chr(0), $orig);
+ print T_js_decl($key[0], _ngettext($key[0], $key[1], 1)); // Singular
+ print T_js_decl($key[1], _ngettext($key[0], $key[1], 2)); // Plural
+ } else {
+ $translation = _dgettext($domain,$orig);
+ print T_js_decl($orig, $translation);
+ }
}
+
}
}
diff --git a/include/login_form.php b/include/login_form.php
index 68ebcef29..6c6aaf8cf 100755
--- a/include/login_form.php
+++ b/include/login_form.php
@@ -1,4 +1,5 @@
<?php startup_gettext(); ?>
+<!DOCTYPE html>
<html>
<head>
<title>Tiny Tiny RSS : Login</title>
@@ -60,7 +61,7 @@ function bwLimitChange(elem) {
}
</script>
-<?php $return = urlencode($_SERVER["REQUEST_URI"]) ?>
+<?php $return = urlencode(make_self_url()) ?>
<div class="container">
diff --git a/include/sanity_check.php b/include/sanity_check.php
index c2ecee368..f06cf0a39 100755
--- a/include/sanity_check.php
+++ b/include/sanity_check.php
@@ -14,6 +14,12 @@
* If you come crying when stuff inevitably breaks, you will be mocked and told
* to get out. */
+ function make_self_url() {
+ $proto = is_server_https() ? 'https' : 'http';
+
+ return $proto . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
+ }
+
function make_self_url_path() {
$proto = is_server_https() ? 'https' : 'http';
$url_path = $proto . '://' . $_SERVER["HTTP_HOST"] . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
@@ -50,6 +56,10 @@
array_push($errors, "PHP version 5.6.0 or newer required. You're using " . PHP_VERSION . ".");
}
+ if (!class_exists("UConverter")) {
+ array_push($errors, "PHP UConverter class is missing, it's provided by the Internationalization (intl) module.");
+ }
+
if (CONFIG_VERSION != EXPECTED_CONFIG_VERSION) {
array_push($errors, "Configuration file (config.php) has incorrect version. Update it with new options from config.php-dist and set CONFIG_VERSION to the correct value.");
}
@@ -176,6 +186,7 @@
}
if (count($errors) > 0 && $_SERVER['REQUEST_URI']) { ?>
+ <!DOCTYPE html>
<html>
<head>
<title>Startup failed</title>
diff --git a/include/sessions.php b/include/sessions.php
index c27eb98b0..ca9f169d8 100644
--- a/include/sessions.php
+++ b/include/sessions.php
@@ -49,7 +49,7 @@
if ($_SESSION["uid"]) {
- if ($_SESSION["user_agent"] != sha1($_SERVER['HTTP_USER_AGENT'])) {
+ if (!defined('_SESSION_SKIP_UA_CHECKS') && $_SESSION["user_agent"] != sha1($_SERVER['HTTP_USER_AGENT'])) {
$_SESSION["login_error_msg"] = __("Session failed to validate (UA changed).");
return false;
}
diff --git a/index.php b/index.php
index 9dabdb7e0..43265ca8b 100644
--- a/index.php
+++ b/index.php
@@ -34,8 +34,7 @@
header('Content-Type: text/html; charset=utf-8');
?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
<html>
<head>
<title>Tiny Tiny RSS</title>
@@ -146,7 +145,7 @@
<div dojoType="dijit.layout.BorderContainer" region="center" id="content-wrap">
<div id="toolbar-frame" dojoType="dijit.layout.ContentPane" region="top">
- <div id="toolbar" dojoType="dijit.Toolbar">
+ <div id="toolbar" dojoType="fox.Toolbar">
<i class="material-icons net-alert" style="display : none"
title="<?php echo __("Communication problem with server.") ?>">error_outline</i>
@@ -171,7 +170,7 @@
<select name="view_mode" title="<?php echo __('Show articles') ?>"
onchange="App.onViewModeChanged()"
- dojoType="dijit.form.Select">
+ dojoType="fox.form.Select">
<option selected="selected" value="adaptive"><?php echo __('Adaptive') ?></option>
<option value="all_articles"><?php echo __('All Articles') ?></option>
<option value="marked"><?php echo __('Starred') ?></option>
@@ -181,16 +180,17 @@
<!-- <option value="noscores"><?php echo __('Ignore Scoring') ?></option> -->
</select>
- <select title="<?php echo __('Sort articles') ?>"
+ <select title="<?php echo __('Sort articles') ?>"
onchange="App.onViewModeChanged()"
- dojoType="dijit.form.Select" name="order_by">
- <option selected="selected" value="default"><?php echo __('Default') ?></option>
+ dojoType="fox.form.Select" name="order_by">
+
+ <option selected="selected" value="default"><?php echo __('Default') ?></option>
<option value="feed_dates"><?php echo __('Newest first') ?></option>
<option value="date_reverse"><?php echo __('Oldest first') ?></option>
<option value="title"><?php echo __('Title') ?></option>
</select>
- <div dojoType="dijit.form.ComboButton" onclick="Feeds.catchupCurrent()">
+ <div dojoType="fox.form.ComboButton" onclick="Feeds.catchupCurrent()">
<span><?php echo __('Mark as read') ?></span>
<div dojoType="dijit.DropDownMenu">
<div dojoType="dijit.MenuItem" onclick="Feeds.catchupCurrent('1day')">
@@ -215,8 +215,8 @@
}
?>
- <div dojoType="dijit.form.DropDownButton">
- <span><?php echo __('Actions...') ?></span>
+ <div dojoType="fox.form.DropDownButton" class="action-button" title="<?php echo __('Actions...') ?>">
+ <span><i class="material-icons">menu</i></span>
<div dojoType="dijit.Menu" style="display: none">
<div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcPrefs')"><?php echo __('Preferences...') ?></div>
<div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcSearch')"><?php echo __('Search...') ?></div>
diff --git a/install/index.php b/install/index.php
index f4f5fa6f3..815422712 100755
--- a/install/index.php
+++ b/install/index.php
@@ -22,7 +22,7 @@
return "<script type=\"text/javascript\" charset=\"utf-8\" src=\"$filename?$timestamp\"></script>\n";
}
?>
-
+<!DOCTYPE html>
<html>
<head>
<title>Tiny Tiny RSS - Installer</title>
@@ -55,21 +55,28 @@
//
}
- function make_password($length = 8) {
-
+ function make_password($length = 12) {
$password = "";
$possible = "0123456789abcdfghjkmnpqrstvwxyzABCDFGHJKMNPQRSTVWXYZ*%+^";
- $i = 0;
+ $i = 0;
while ($i < $length) {
- $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
+
+ try {
+ $idx = function_exists("random_int") ? random_int(0, strlen($possible) - 1) : mt_rand(0, strlen($possible) - 1);
+ } catch (Exception $e) {
+ $idx = mt_rand(0, strlen($possible) - 1);
+ }
+
+ $char = substr($possible, $idx, 1);
if (!strstr($password, $char)) {
$password .= $char;
$i++;
}
}
+
return $password;
}
diff --git a/js/AppBase.js b/js/AppBase.js
index 121b7aa85..a5e20b8f9 100644
--- a/js/AppBase.js
+++ b/js/AppBase.js
@@ -60,14 +60,12 @@ define(["dojo/_base/declare"], function (declare) {
const hotkeys_map = App.getInitParam("hotkeys");
const keycode = event.which;
- const keychar = String.fromCharCode(keycode).toLowerCase();
+ const keychar = String.fromCharCode(keycode);
if (keycode == 27) { // escape and drop prefix
this.hotkey_prefix = false;
}
- if (keycode == 16 || keycode == 17) return; // ignore lone shift / ctrl
-
if (!this.hotkey_prefix && hotkeys_map[0].indexOf(keychar) != -1) {
this.hotkey_prefix = keychar;
@@ -87,13 +85,19 @@ define(["dojo/_base/declare"], function (declare) {
Element.hide("cmdline");
- let hotkey_name = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
+ let hotkey_name = "";
+
+ if (event.type == "keydown") {
+ hotkey_name = "(" + keycode + ")";
- // ensure ^*char notation
- if (event.shiftKey) hotkey_name = "*" + hotkey_name;
- if (event.ctrlKey) hotkey_name = "^" + hotkey_name;
- if (event.altKey) hotkey_name = "+" + hotkey_name;
- if (event.metaKey) hotkey_name = "%" + hotkey_name;
+ // ensure ^*char notation
+ if (event.shiftKey) hotkey_name = "*" + hotkey_name;
+ if (event.ctrlKey) hotkey_name = "^" + hotkey_name;
+ if (event.altKey) hotkey_name = "+" + hotkey_name;
+ if (event.metaKey) hotkey_name = "%" + hotkey_name;
+ } else {
+ hotkey_name = keychar ? keychar : "(" + keycode + ")";
+ }
const hotkey_full = this.hotkey_prefix ? this.hotkey_prefix + " " + hotkey_name : hotkey_name;
this.hotkey_prefix = false;
diff --git a/js/CommonDialogs.js b/js/CommonDialogs.js
index 2b7ee8a7f..e0338a97c 100644
--- a/js/CommonDialogs.js
+++ b/js/CommonDialogs.js
@@ -7,25 +7,6 @@ define(["dojo/_base/declare"], function (declare) {
const dialog = dijit.byId("infoBox");
if (dialog) dialog.hide();
},
- uploadIconHandler: function(rc) {
- switch (rc) {
- case 0:
- Notify.info("Upload complete.");
-
- if (App.isPrefs())
- dijit.byId("feedTree").reload();
- else
- Feeds.reload();
-
- break;
- case 1:
- Notify.error("Upload failed: icon is too big.");
- break;
- case 2:
- Notify.error("Upload failed.");
- break;
- }
- },
removeFeedIcon: function(id) {
if (confirm(__("Remove stored feed icon?"))) {
Notify.progress("Removing feed icon...", true);
@@ -40,6 +21,11 @@ define(["dojo/_base/declare"], function (declare) {
else
Feeds.reload();
+ const icon = $$(".feed-editor-icon")[0];
+
+ if (icon)
+ icon.src = icon.src.replace(/\?[0-9]+$/, "?" + new Date().getTime());
+
});
}
@@ -52,7 +38,35 @@ define(["dojo/_base/declare"], function (declare) {
alert(__("Please select an image file to upload."));
} else if (confirm(__("Upload new icon for this feed?"))) {
Notify.progress("Uploading, please wait...", true);
- return true;
+
+ const xhr = new XMLHttpRequest();
+
+ xhr.open( 'POST', 'backend.php', true );
+ xhr.onload = function () {
+ switch (parseInt(this.responseText)) {
+ case 0:
+ Notify.info("Upload complete.");
+
+ if (App.isPrefs())
+ dijit.byId("feedTree").reload();
+ else
+ Feeds.reload();
+
+ const icon = $$(".feed-editor-icon")[0];
+
+ if (icon)
+ icon.src = icon.src.replace(/\?[0-9]+$/, "?" + new Date().getTime());
+
+ break;
+ case 1:
+ Notify.error("Upload failed: icon is too big.");
+ break;
+ case 2:
+ Notify.error("Upload failed.");
+ break;
+ }
+ };
+ xhr.send(new FormData($("feed_icon_upload_form")));
}
return false;
@@ -466,4 +480,4 @@ define(["dojo/_base/declare"], function (declare) {
};
return CommonDialogs;
-}); \ No newline at end of file
+});
diff --git a/js/FeedStoreModel.js b/js/FeedStoreModel.js
index 7f2af22ec..7d8020871 100644
--- a/js/FeedStoreModel.js
+++ b/js/FeedStoreModel.js
@@ -31,7 +31,7 @@ define(["dojo/_base/declare", "dijit/tree/ForestStoreModel"], function (declare)
},
getFeedUnread: function (feed, is_cat) {
const unread = parseInt(this.getFeedValue(feed, is_cat, 'unread'));
- return (isNaN(unread)) ? 0 : unread;
+ return (isNaN(unread)) ? -1 : unread;
},
setFeedUnread: function (feed, is_cat, unread) {
return this.setFeedValue(feed, is_cat, 'unread', parseInt(unread));
diff --git a/js/FeedTree.js b/js/FeedTree.js
index b8e50872a..1dcbae3f9 100755
--- a/js/FeedTree.js
+++ b/js/FeedTree.js
@@ -2,7 +2,10 @@
define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"], function (declare, domConstruct) {
return declare("fox.FeedTree", dijit.Tree, {
- _onKeyPress: function(/* Event */ e) {
+ _onContainerKeydown: function(/* Event */ e) {
+ return; // Stop dijit.Tree from interpreting keystrokes
+ },
+ _onContainerKeypress: function(/* Event */ e) {
return; // Stop dijit.Tree from interpreting keystrokes
},
_createTreeNode: function(args) {
@@ -64,6 +67,13 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"],
CommonDialogs.editFeed(this.getParent().row_id, false);
}}));
+ menu.addChild(new dijit.MenuItem({
+ label: __("Debug feed"),
+ onClick: function() {
+ window.open("backend.php?op=feeds&method=update_debugger&feed_id=" + this.getParent().row_id +
+ "&csrf_token=" + App.getInitParam("csrf_token"));
+ }}));
+
/* menu.addChild(new dijit.MenuItem({
label: __("Update feed"),
onClick: function() {
@@ -125,7 +135,7 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"],
args.item.unread > 0 || args.item.auxcounter > 0 ? Element.show(ctr) : Element.hide(ctr);
- args.item.unread == 0 && args.item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux");
+ args.item.unread <= 0 && args.item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux");
domConstruct.place(ctr, tnode.rowNode, 'first');
tnode.counterNode = ctr;
@@ -161,7 +171,7 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"],
Element.show(ctr) :
Element.hide(ctr);
- item.unread == 0 && item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux");
+ item.unread <= 0 && item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux");
}
}
@@ -174,7 +184,7 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"],
return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "feed-icon";
},
getLabelClass: function (item, opened) {
- return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
+ return (item.unread <= 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
},
getRowClass: function (item, opened) {
let rc = (!item.error || item.error == '') ? "dijitTreeRow" :
@@ -343,7 +353,7 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"],
if (node) {
const check_unread = tree.model.getFeedUnread(bare_id, true);
- if (hide && cat_unread == 0 && check_unread == 0 && (id != "CAT:-1" || !show_special)) {
+ if (hide && cat_unread <= 0 && check_unread <= 0 && (id != "CAT:-1" || !show_special)) {
Effect.Fade(node[0].rowNode, {duration : 0.3,
queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
} else {
@@ -387,7 +397,7 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"],
const node = tree._itemNodesMap[id];
if (node) {
- if (hide && unread == 0 && !has_error && (bare_id > 0 || bare_id < _label_base_index || !show_special)) {
+ if (hide && unread <= 0 && !has_error && (bare_id > 0 || bare_id < _label_base_index || !show_special)) {
Effect.Fade(node[0].rowNode, {duration : 0.3,
queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
} else {
diff --git a/js/Feeds.js b/js/Feeds.js
index 401d669a7..07ec89452 100644
--- a/js/Feeds.js
+++ b/js/Feeds.js
@@ -3,7 +3,7 @@
define(["dojo/_base/declare"], function (declare) {
Feeds = {
counters_last_request: 0,
- _active_feed_id: 0,
+ _active_feed_id: undefined,
_active_feed_is_cat: false,
infscroll_in_progress: 0,
infscroll_disabled: 0,
@@ -44,6 +44,8 @@ define(["dojo/_base/declare"], function (declare) {
this._counters_prev = [];
},
parseCounters: function (elems) {
+ PluginHost.run(PluginHost.HOOK_COUNTERS_RECEIVED, elems);
+
for (let l = 0; l < elems.length; l++) {
if (Feeds._counters_prev[l] && this.counterEquals(elems[l], this._counters_prev[l])) {
@@ -93,11 +95,13 @@ define(["dojo/_base/declare"], function (declare) {
this.hideOrShowFeeds(App.getInitParam("hide_read_feeds") == 1);
this._counters_prev = elems;
+
+ PluginHost.run(PluginHost.HOOK_COUNTERS_PROCESSED);
},
reloadCurrent: function(method) {
- console.log("reloadCurrent: " + method);
-
if (this.getActive() != undefined) {
+ console.log("reloadCurrent: " + method);
+
this.open({feed: this.getActive(), is_cat: this.activeIsCat(), method: method});
}
return false; // block unneeded form submits
@@ -196,12 +200,16 @@ define(["dojo/_base/declare"], function (declare) {
App.setLoadingProgress(50);
document.onkeydown = (event) => { return App.hotkeyHandler(event) };
+ document.onkeypress = (event) => { return App.hotkeyHandler(event) };
window.onresize = () => { Headlines.scrollHandler(); }
- if (!this.getActive()) {
- this.open({feed: -3});
+ const hash_feed_id = hash_get('f');
+ const hash_feed_is_cat = hash_get('c') == "1";
+
+ if (hash_feed_id != undefined) {
+ this.open({feed: hash_feed_id, is_cat: hash_feed_is_cat});
} else {
- this.open({feed: this.getActive(), is_cat: this.activeIsCat()});
+ this.open({feed: -3});
}
this.hideOrShowFeeds(App.getInitParam("hide_read_feeds") == 1);
@@ -245,6 +253,8 @@ define(["dojo/_base/declare"], function (declare) {
return this._active_feed_id;
},
setActive: function(id, is_cat) {
+ console.log('setActive', id, is_cat);
+
hash_set('f', id);
hash_set('c', is_cat ? 1 : 0);
@@ -542,6 +552,11 @@ define(["dojo/_base/declare"], function (declare) {
execute: function () {
if (this.validate()) {
Feeds._search_query = this.attr('value');
+
+ // disallow empty queries
+ if (!Feeds._search_query.query)
+ Feeds._search_query = false;
+
this.hide();
Feeds.reloadCurrent();
}
@@ -549,6 +564,21 @@ define(["dojo/_base/declare"], function (declare) {
href: query
});
+ const tmph = dojo.connect(dialog, 'onLoad', function () {
+ dojo.disconnect(tmph);
+
+ if (Feeds._search_query) {
+ if (Feeds._search_query.query)
+ dijit.byId('search_query')
+ .attr('value', Feeds._search_query.query);
+
+ if (Feeds._search_query.search_language)
+ dijit.byId('search_language')
+ .attr('value', Feeds._search_query.search_language);
+ }
+
+ });
+
dialog.show();
},
updateRandom: function() {
diff --git a/js/Headlines.js b/js/Headlines.js
index 1414dd3c7..3c5ab2ee6 100755
--- a/js/Headlines.js
+++ b/js/Headlines.js
@@ -153,35 +153,59 @@ define(["dojo/_base/declare"], function (declare) {
click: function (event, id, in_body) {
in_body = in_body || false;
- if (App.isCombinedMode()) {
+ if (event.shiftKey && Article.getActive()) {
+ Headlines.select('none');
- if (!in_body && (event.ctrlKey || id == Article.getActive() || App.getInitParam("cdm_expanded"))) {
- Article.openInNewWindow(id);
- Headlines.toggleUnread(id, 0);
- return false;
- }
+ const ids = Headlines.getRange(Article.getActive(), id);
- if (Article.getActive() != id) {
- Article.setActive(id);
+ console.log(Article.getActive(), id, ids);
- if (!App.getInitParam("cdm_expanded"))
- Article.cdmScrollToId(id);
- } else if (in_body) {
- Headlines.toggleUnread(id, 0);
- }
-
- return in_body;
+ for (let i = 0; i < ids.length; i++)
+ Headlines.select('all', ids[i]);
+ } else if (event.ctrlKey) {
+ Headlines.select('invert', id);
} else {
- if (event.ctrlKey) {
- Article.openInNewWindow(id);
- Headlines.toggleUnread(id, 0);
+ if (App.isCombinedMode()) {
+
+ if (event.altKey && !in_body) {
+
+ Article.openInNewWindow(id);
+ Headlines.toggleUnread(id, 0);
+
+ } else if (Article.getActive() != id) {
+
+ Headlines.select('none');
+ Article.setActive(id);
+
+ if (App.getInitParam("cdm_expanded")) {
+ if (!in_body)
+ Article.openInNewWindow(id);
+
+ Headlines.toggleUnread(id, 0);
+ } else {
+ Article.cdmScrollToId(id);
+ }
+
+ } else if (in_body) {
+ Headlines.toggleUnread(id, 0);
+ } else { /* !in body */
+ Article.openInNewWindow(id);
+ }
+
+ return in_body;
} else {
- Article.view(id);
+ if (event.altKey) {
+ Article.openInNewWindow(id);
+ Headlines.toggleUnread(id, 0);
+ } else {
+ Headlines.select('none');
+ Article.view(id);
+ }
}
-
- return false;
}
+
+ return false;
},
initScrollHandler: function () {
$("headlines-frame").onscroll = (event) => {
@@ -997,6 +1021,33 @@ define(["dojo/_base/declare"], function (declare) {
row.removeClassName("Selected");
}
},
+ getRange: function (start, stop) {
+ if (start == stop)
+ return [start];
+
+ const rows = $$("#headlines-frame > div[id*=RROW]");
+ const results = [];
+ let collecting = false;
+
+ for (let i = 0; i < rows.length; i++) {
+ const row = rows[i];
+ const id = row.getAttribute('data-article-id');
+
+ if (id == start || id == stop) {
+ if (!collecting) {
+ collecting = true;
+ } else {
+ results.push(id);
+ break;
+ }
+ }
+
+ if (collecting)
+ results.push(id);
+ }
+
+ return results;
+ },
select: function (mode, articleId) {
// mode = all,none,unread,invert,marked,published
let query = "#headlines-frame > div[id*=RROW]";
diff --git a/js/PluginHost.js b/js/PluginHost.js
index f76b73464..71596ad31 100644
--- a/js/PluginHost.js
+++ b/js/PluginHost.js
@@ -13,6 +13,8 @@ PluginHost = {
HOOK_FLOATING_TITLE: 10,
HOOK_INIT_COMPLETE: 11,
HOOK_HEADLINE_RENDERED: 12,
+ HOOK_COUNTERS_RECEIVED: 13,
+ HOOK_COUNTERS_PROCESSED: 14,
hooks: [],
register: function (name, callback) {
if (typeof(this.hooks[name]) == 'undefined')
@@ -27,6 +29,11 @@ PluginHost = {
for (let i = 0; i < this.hooks[name].length; i++) {
this.hooks[name][i](args);
}
+ },
+ unregister: function (name, callback) {
+ for (var i = 0; i < this.hooks[name].length; i++)
+ if (this.hooks[name][i] == callback)
+ this.hooks[name].splice(i, 1);
}
};
diff --git a/js/PrefFeedTree.js b/js/PrefFeedTree.js
index c2c7751bf..3a5e33b2b 100644
--- a/js/PrefFeedTree.js
+++ b/js/PrefFeedTree.js
@@ -275,9 +275,9 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree"], functio
if ($(label))
if (checkbox.checked)
- $(label).removeClassName('insensitive');
+ $(label).removeClassName('text-muted');
else
- $(label).addClassName('insensitive');
+ $(label).addClassName('text-muted');
},
execute: function () {
diff --git a/js/PrefUsers.js b/js/PrefUsers.js
index 4f24f67cf..55dc43dfa 100644
--- a/js/PrefUsers.js
+++ b/js/PrefUsers.js
@@ -70,7 +70,7 @@ define(["dojo/_base/declare"], function (declare) {
xhrPost("backend.php", {op: "pref-users", method: "resetPass", id: id}, (transport) => {
Notify.close();
- alert(transport.responseText);
+ Notify.info(transport.responseText, true);
});
}
diff --git a/js/Toolbar.js b/js/Toolbar.js
new file mode 100755
index 000000000..6d2c20058
--- /dev/null
+++ b/js/Toolbar.js
@@ -0,0 +1,14 @@
+/* global dijit */
+define(["dojo/_base/declare", "dijit/Toolbar"], function (declare) {
+ return declare("fox.Toolbar", dijit.Toolbar, {
+ _onContainerKeydown: function(/* Event */ e) {
+ return; // Stop dijit.Toolbar from interpreting keystrokes
+ },
+ _onContainerKeypress: function(/* Event */ e) {
+ return; // Stop dijit.Toolbar from interpreting keystrokes
+ },
+ focus: function() {
+ return; // Stop dijit.Toolbar from focusing the first child on click
+ },
+ });
+});
diff --git a/js/form/ComboButton.js b/js/form/ComboButton.js
new file mode 100755
index 000000000..1084cda9c
--- /dev/null
+++ b/js/form/ComboButton.js
@@ -0,0 +1,12 @@
+/* global dijit */
+define(["dojo/_base/declare", "dijit/form/ComboButton"], function (declare) {
+ return declare("fox.form.ComboButton", dijit.form.ComboButton, {
+ startup: function() {
+ this.inherited(arguments);
+ this.dropDown.autoFocus = true; // Allow dropdown menu to be focused on click
+ },
+ focus: function() {
+ return; // Stop dijit.form.ComboButton from keeping focus after closing the menu
+ },
+ });
+});
diff --git a/js/form/DropDownButton.js b/js/form/DropDownButton.js
new file mode 100755
index 000000000..0c182772a
--- /dev/null
+++ b/js/form/DropDownButton.js
@@ -0,0 +1,12 @@
+/* global dijit */
+define(["dojo/_base/declare", "dijit/form/DropDownButton"], function (declare) {
+ return declare("fox.form.DropDownButton", dijit.form.DropDownButton, {
+ startup: function() {
+ this.inherited(arguments);
+ this.dropDown.autoFocus = true; // Allow dropdown menu to be focused on click
+ },
+ focus: function() {
+ return; // Stop dijit.form.DropDownButton from keeping focus after closing the menu
+ },
+ });
+});
diff --git a/js/form/Select.js b/js/form/Select.js
new file mode 100755
index 000000000..c62db1821
--- /dev/null
+++ b/js/form/Select.js
@@ -0,0 +1,8 @@
+/* global dijit */
+define(["dojo/_base/declare", "dijit/form/Select"], function (declare) {
+ return declare("fox.form.Select", dijit.form.Select, {
+ focus: function() {
+ return; // Stop dijit.form.Select from keeping focus after closing the menu
+ },
+ });
+});
diff --git a/js/prefs.js b/js/prefs.js
index b4ac9976e..844ce8c8a 100755
--- a/js/prefs.js
+++ b/js/prefs.js
@@ -53,7 +53,11 @@ require(["dojo/_base/kernel",
"fox/PrefFilterStore",
"fox/PrefFeedTree",
"fox/PrefFilterTree",
- "fox/PrefLabelTree"], function (dojo, declare, ready, parser, AppBase) {
+ "fox/PrefLabelTree",
+ "fox/Toolbar",
+ "fox/form/Select",
+ "fox/form/ComboButton",
+ "fox/form/DropDownButton"], function (dojo, declare, ready, parser, AppBase) {
ready(function () {
try {
@@ -78,6 +82,7 @@ require(["dojo/_base/kernel",
this.enableCsrfSupport();
document.onkeydown = (event) => { return App.hotkeyHandler(event) };
+ document.onkeypress = (event) => { return App.hotkeyHandler(event) };
App.setLoadingProgress(50);
Notify.close();
@@ -117,6 +122,10 @@ require(["dojo/_base/kernel",
hotkeyHandler: function (event) {
if (event.target.nodeName == "INPUT" || event.target.nodeName == "TEXTAREA") return;
+ // Arrow buttons and escape are not reported via keypress, handle them via keydown.
+ // escape = 27, left = 37, up = 38, right = 39, down = 40
+ if (event.type == "keydown" && event.which != 27 && (event.which < 37 || event.which > 40)) return;
+
const action_name = App.keyeventToAction(event);
if (action_name) {
diff --git a/js/tt-rss.js b/js/tt-rss.js
index 99b44549b..a31404426 100644
--- a/js/tt-rss.js
+++ b/js/tt-rss.js
@@ -54,7 +54,11 @@ require(["dojo/_base/kernel",
"fox/Headlines",
"fox/Article",
"fox/FeedStoreModel",
- "fox/FeedTree"], function (dojo, declare, ready, parser, AppBase) {
+ "fox/FeedTree",
+ "fox/Toolbar",
+ "fox/form/Select",
+ "fox/form/ComboButton",
+ "fox/form/DropDownButton"], function (dojo, declare, ready, parser, AppBase) {
ready(function () {
try {
@@ -144,13 +148,6 @@ require(["dojo/_base/kernel",
dijit.getEnclosingWidget(toolbar.order_by).attr('value',
App.getInitParam("default_view_order_by"));
- const hash_feed_id = hash_get('f');
- const hash_feed_is_cat = hash_get('c') == "1";
-
- if (hash_feed_id != undefined) {
- Feeds.setActive(hash_feed_id, hash_feed_is_cat);
- }
-
App.setLoadingProgress(50);
this._widescreen_mode = App.getInitParam("widescreen");
@@ -203,9 +200,13 @@ require(["dojo/_base/kernel",
isCombinedMode: function() {
return App.getInitParam("combined_display_mode");
},
- hotkeyHandler(event) {
+ hotkeyHandler: function(event) {
if (event.target.nodeName == "INPUT" || event.target.nodeName == "TEXTAREA") return;
+ // Arrow buttons and escape are not reported via keypress, handle them via keydown.
+ // escape = 27, left = 37, up = 38, right = 39, down = 40
+ if (event.type == "keydown" && event.which != 27 && (event.which < 37 || event.which > 40)) return;
+
const action_name = App.keyeventToAction(event);
if (action_name) {
@@ -412,6 +413,9 @@ require(["dojo/_base/kernel",
dijit.byId("feedTree").collapseCat(Feeds.getActive());
}
};
+ this.hotkey_actions["goto_read"] = function () {
+ Feeds.open({feed: -6});
+ };
this.hotkey_actions["goto_all"] = function () {
Feeds.open({feed: -4});
};
diff --git a/plugins/af_comics/init.php b/plugins/af_comics/init.php
index a46933305..d24287c74 100755
--- a/plugins/af_comics/init.php
+++ b/plugins/af_comics/init.php
@@ -14,6 +14,7 @@ class Af_Comics extends Plugin {
$this->host = $host;
$host->add_hook($host::HOOK_FETCH_FEED, $this);
+ $host->add_hook($host::HOOK_FEED_BASIC_INFO, $this);
$host->add_hook($host::HOOK_SUBSCRIBE_FEED, $this);
$host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
$host->add_hook($host::HOOK_PREFS_TAB, $this);
@@ -166,6 +167,16 @@ class Af_Comics extends Plugin {
return $contents;
}
+ function hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass) {
+ if ($auth_login || $auth_pass)
+ return $basic_info;
+
+ if (preg_match('#^https?://www\.gocomics\.com/([-a-z0-9]+)$#i', $fetch_url, $matches))
+ $basic_info = array('title' => ucfirst($matches[1]), 'site_url' => $matches[0]);
+
+ return $basic_info;
+ }
+
function api_version() {
return 2;
}
diff --git a/plugins/af_fsckportal/init.php b/plugins/af_fsckportal/init.php
index 0fa58e9ed..04b77a15a 100644
--- a/plugins/af_fsckportal/init.php
+++ b/plugins/af_fsckportal/init.php
@@ -19,11 +19,7 @@ class Af_Fsckportal extends Plugin {
$doc = new DOMDocument();
- $charset_hack = '<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- </head>';
-
- @$doc->loadHTML($charset_hack . $article["content"]);
+ @$doc->loadHTML('<?xml encoding="UTF-8">' . $article["content"]);
if ($doc) {
$xpath = new DOMXPath($doc);
diff --git a/plugins/af_psql_trgm/init.php b/plugins/af_psql_trgm/init.php
index 255c91a0f..dbc99cfe4 100644
--- a/plugins/af_psql_trgm/init.php
+++ b/plugins/af_psql_trgm/init.php
@@ -98,7 +98,7 @@ class Af_Psql_Trgm extends Plugin {
print "</div>";
- print "<div style='text-align : right' class='insensitive'>" . smart_date_time(strtotime($line["updated"])) . "</div>";
+ print "<div style='text-align : right' class='text-muted'>" . smart_date_time(strtotime($line["updated"])) . "</div>";
print "</li>";
}
@@ -107,9 +107,9 @@ class Af_Psql_Trgm extends Plugin {
}
- print "<div style='text-align : center'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('trgmRelatedDlg').hide()\">".__('Close this window')."</button>";
- print "</div>";
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('trgmRelatedDlg').hide()\">".__('Close this window')."</button>";
+ print "</footer>";
}
@@ -163,31 +163,38 @@ class Af_Psql_Trgm extends Plugin {
print_hidden("method", "save");
print_hidden("plugin", "af_psql_trgm");
- print "<p>" . __("PostgreSQL trigram extension returns string similarity as a floating point number (0-1). Setting it too low might produce false positives, zero disables checking.") . "</p>";
- print_notice("Enable the plugin for specific feeds in the feed editor.");
+ print "<h2>" . __("Global settings") . "</h2>";
+
+ print_notice("Enable for specific feeds in the feed editor.");
+
+ print "<fieldset>";
+
+ print "<label>" . __("Minimum similarity:") . "</label> ";
+ print "<input dojoType=\"dijit.form.NumberSpinner\"
+ placeholder=\"0.75\" id='psql_trgm_similarity'
+ required=\"1\" name=\"similarity\" value=\"$similarity\">";
- print "<h3>" . __("Global settings") . "</h3>";
+ print "<div dojoType='dijit.Tooltip' connectId='psql_trgm_similarity' position='below'>" .
+ __("PostgreSQL trigram extension returns string similarity as a floating point number (0-1). Setting it too low might produce false positives, zero disables checking.") .
+ "</div>";
- print "<table>";
+ print "</fieldset><fieldset>";
- print "<tr><td width=\"40%\">" . __("Minimum similarity:") . "</td>";
- print "<td>
- <input dojoType=\"dijit.form.ValidationTextBox\"
- placeholder=\"0.75\"
- required=\"1\" name=\"similarity\" value=\"$similarity\"></td></tr>";
- print "<tr><td width=\"40%\">" . __("Minimum title length:") . "</td>";
- print "<td>
- <input dojoType=\"dijit.form.ValidationTextBox\"
+ print "<label>" . __("Minimum title length:") . "</label> ";
+ print "<input dojoType=\"dijit.form.NumberSpinner\"
placeholder=\"32\"
- required=\"1\" name=\"min_title_length\" value=\"$min_title_length\"></td></tr>";
- print "<tr><td width=\"40%\">" . __("Enable for all feeds:") . "</td>";
- print "<td>";
+ required=\"1\" name=\"min_title_length\" value=\"$min_title_length\">";
+
+ print "</fieldset><fieldset>";
+
+ print "<label class='checkbox'>";
print_checkbox("enable_globally", $enable_globally);
- print "</td></tr>";
+ print " " . __("Enable for all feeds:");
+ print "</label>";
- print "</table>";
+ print "</fieldset>";
- print "<p>"; print_button("submit", __("Save"));
+ print_button("submit", __("Save"), "class='alt-primary'");
print "</form>";
$enabled_feeds = $this->host->get($this, "enabled_feeds");
@@ -214,8 +221,8 @@ class Af_Psql_Trgm extends Plugin {
}
function hook_prefs_edit_feed($feed_id) {
- print "<div class=\"dlgSec\">".__("Similarity (pg_trgm)")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Similarity (pg_trgm)")."</header>";
+ print "<section>";
$enabled_feeds = $this->host->get($this, "enabled_feeds");
if (!array($enabled_feeds)) $enabled_feeds = array();
@@ -225,13 +232,12 @@ class Af_Psql_Trgm extends Plugin {
print "<fieldset>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"trgm_similarity_enabled\"
- name=\"trgm_similarity_enabled\"
- $checked> ".__('Mark similar articles as read')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='trgm_similarity_enabled'
+ name='trgm_similarity_enabled' $checked> ".__('Mark similar articles as read')."</label>";
print "</fieldset>";
- print "</div>";
+ print "</section>";
}
function hook_prefs_save_feed($feed_id) {
diff --git a/plugins/af_readability/init.php b/plugins/af_readability/init.php
index c44ad89ef..8bb368389 100755
--- a/plugins/af_readability/init.php
+++ b/plugins/af_readability/init.php
@@ -38,24 +38,30 @@ class Af_Readability extends Plugin {
$host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
$host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
+ // Note: we have to install the hook even if disabled because init() is being run before plugin data has loaded
+ // so we can't check for our storage-set options here
+ $host->add_hook($host::HOOK_GET_FULL_TEXT, $this);
+
$host->add_filter_action($this, "action_inline", __("Inline content"));
}
function hook_prefs_tab($args) {
if ($args != "prefFeeds") return;
- print "<div dojoType=\"dijit.layout.AccordionPane\"
+ print "<div dojoType='dijit.layout.AccordionPane'
title=\"<i class='material-icons'>extension</i> ".__('Readability settings (af_readability)')."\">";
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
print_error("This plugin requires PHP version 5.6.");
- }
+ } else {
+
+ print "<h2>" . __("Global settings") . "</h2>";
- print_notice("Enable the plugin for specific feeds in the feed editor.");
+ print_notice("Enable for specific feeds in the feed editor.");
- print "<form dojoType=\"dijit.form.Form\">";
+ print "<form dojoType='dijit.form.Form'>";
- print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
+ print "<script type='dojo/method' event='onSubmit' args='evt'>
evt.preventDefault();
if (this.validate()) {
console.log(dojo.objectToQuery(this.getValues()));
@@ -69,43 +75,48 @@ class Af_Readability extends Plugin {
}
</script>";
- print_hidden("op", "pluginhandler");
- print_hidden("method", "save");
- print_hidden("plugin", "af_readability");
+ print_hidden("op", "pluginhandler");
+ print_hidden("method", "save");
+ print_hidden("plugin", "af_readability");
- $enable_share_anything = $this->host->get($this, "enable_share_anything");
+ $enable_share_anything = $this->host->get($this, "enable_share_anything");
- print_checkbox("enable_share_anything", $enable_share_anything);
- print "&nbsp;<label for=\"enable_share_anything\">" . __("Use Readability for pages shared via bookmarklet.") . "</label>";
+ print "<fieldset>";
+ print "<label class='checkbox'> ";
+ print_checkbox("enable_share_anything", $enable_share_anything);
+ print " " . __("Provide full-text services to core code (bookmarklets) and other plugins");
+ print "</label>";
+ print "</fieldset>";
- print "<p>"; print_button("submit", __("Save"));
- print "</form>";
+ print print_button("submit", __("Save"), "class='alt-primary'");
+ print "</form>";
- $enabled_feeds = $this->host->get($this, "enabled_feeds");
- if (!is_array($enabled_feeds)) $enabled_feeds = array();
+ $enabled_feeds = $this->host->get($this, "enabled_feeds");
+ if (!is_array($enabled_feeds)) $enabled_feeds = array();
- $enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
- $this->host->set($this, "enabled_feeds", $enabled_feeds);
+ $enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
+ $this->host->set($this, "enabled_feeds", $enabled_feeds);
- if (count($enabled_feeds) > 0) {
- print "<h3>" . __("Currently enabled for (click to edit):") . "</h3>";
+ if (count($enabled_feeds) > 0) {
+ print "<h3>" . __("Currently enabled for (click to edit):") . "</h3>";
- print "<ul class='panel panel-scrollable list list-unstyled'>";
- foreach ($enabled_feeds as $f) {
- print "<li>" .
- "<i class='material-icons'>rss_feed</i> <a href='#'
+ print "<ul class='panel panel-scrollable list list-unstyled'>";
+ foreach ($enabled_feeds as $f) {
+ print "<li><i class='material-icons'>rss_feed</i> <a href='#'
onclick='CommonDialogs.editFeed($f)'>".
- Feeds::getFeedTitle($f) . "</a></li>";
+ Feeds::getFeedTitle($f) . "</a></li>";
+ }
+ print "</ul>";
}
- print "</ul>";
+
}
print "</div>";
}
function hook_prefs_edit_feed($feed_id) {
- print "<div class=\"dlgSec\">".__("Readability")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Readability")."</header>";
+ print "<section>";
$enabled_feeds = $this->host->get($this, "enabled_feeds");
if (!is_array($enabled_feeds)) $enabled_feeds = array();
@@ -115,13 +126,12 @@ class Af_Readability extends Plugin {
print "<fieldset>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"af_readability_enabled\"
- name=\"af_readability_enabled\"
- $checked>&nbsp;".__('Inline article content')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='af_readability_enabled'
+ name='af_readability_enabled' $checked>&nbsp;".__('Inline article content')."</label>";
print "</fieldset>";
- print "</div>";
+ print "</section>";
}
function hook_prefs_save_feed($feed_id) {
@@ -163,17 +173,13 @@ class Af_Readability extends Plugin {
if ($tmp && mb_strlen($tmp) < 1024 * 500) {
$tmpdoc = new DOMDocument("1.0", "UTF-8");
- if (!$tmpdoc->loadHTML($tmp))
+ if (!@$tmpdoc->loadHTML($tmp))
return false;
+ // this is the worst hack yet :(
if (strtolower($tmpdoc->encoding) != 'utf-8') {
- $tmpxpath = new DOMXPath($tmpdoc);
-
- foreach ($tmpxpath->query("//meta") as $elem) {
- $elem->parentNode->removeChild($elem);
- }
-
- $tmp = $tmpdoc->saveHTML();
+ $tmp = preg_replace("/<meta.*?charset.*?\/>/i", "", $tmp);
+ $tmp = mb_convert_encoding($tmp, 'utf-8', $tmpdoc->encoding);
}
try {
@@ -204,7 +210,6 @@ class Af_Readability extends Plugin {
} catch (Exception $e) {
return false;
}
-
}
return false;
@@ -236,6 +241,24 @@ class Af_Readability extends Plugin {
}
+ function hook_get_full_text($link)
+ {
+ $enable_share_anything = $this->host->get($this, "enable_share_anything");
+
+ if ($enable_share_anything) {
+ $extracted_content = $this->extract_content($link);
+
+ # let's see if there's anything of value in there
+ $content_test = trim(strip_tags(sanitize($extracted_content)));
+
+ if ($content_test) {
+ return $extracted_content;
+ }
+ }
+
+ return false;
+ }
+
function api_version() {
return 2;
}
diff --git a/vendor/andreskrey/Readability/Configuration.php b/plugins/af_readability/vendor/andreskrey/Readability/Configuration.php
index 6c17bc757..6c17bc757 100644
--- a/vendor/andreskrey/Readability/Configuration.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Configuration.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMAttr.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMAttr.php
index 91729f3b1..91729f3b1 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMAttr.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMAttr.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMCdataSection.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMCdataSection.php
index 4535e4e99..4535e4e99 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMCdataSection.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMCdataSection.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMCharacterData.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMCharacterData.php
index e4db11a06..e4db11a06 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMCharacterData.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMCharacterData.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMComment.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMComment.php
index 13b004aff..13b004aff 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMComment.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMComment.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMDocument.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocument.php
index 81e9c7de6..81e9c7de6 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMDocument.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocument.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentFragment.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentFragment.php
index bcb89468d..bcb89468d 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentFragment.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentFragment.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentType.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentType.php
index 18705a7a7..18705a7a7 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentType.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMDocumentType.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMElement.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMElement.php
index c07670bf7..c07670bf7 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMElement.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMElement.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMEntity.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMEntity.php
index 8493e7319..8493e7319 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMEntity.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMEntity.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMEntityReference.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMEntityReference.php
index 32cecb75c..32cecb75c 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMEntityReference.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMEntityReference.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMNode.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMNode.php
index 7c3c4f3a2..7c3c4f3a2 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMNode.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMNode.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMNotation.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMNotation.php
index 2e888ce00..2e888ce00 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMNotation.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMNotation.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMProcessingInstruction.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMProcessingInstruction.php
index 9dd4c5c70..9dd4c5c70 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMProcessingInstruction.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMProcessingInstruction.php
diff --git a/vendor/andreskrey/Readability/Nodes/DOM/DOMText.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMText.php
index 42c575b49..42c575b49 100644
--- a/vendor/andreskrey/Readability/Nodes/DOM/DOMText.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/DOM/DOMText.php
diff --git a/vendor/andreskrey/Readability/Nodes/NodeTrait.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/NodeTrait.php
index d7060ccbb..d7060ccbb 100644
--- a/vendor/andreskrey/Readability/Nodes/NodeTrait.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/NodeTrait.php
diff --git a/vendor/andreskrey/Readability/Nodes/NodeUtility.php b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/NodeUtility.php
index 7a1f18ee4..7a1f18ee4 100644
--- a/vendor/andreskrey/Readability/Nodes/NodeUtility.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Nodes/NodeUtility.php
diff --git a/vendor/andreskrey/Readability/ParseException.php b/plugins/af_readability/vendor/andreskrey/Readability/ParseException.php
index 646c04a37..646c04a37 100644
--- a/vendor/andreskrey/Readability/ParseException.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/ParseException.php
diff --git a/vendor/andreskrey/Readability/Readability.php b/plugins/af_readability/vendor/andreskrey/Readability/Readability.php
index 7b7eed6bf..7b7eed6bf 100644
--- a/vendor/andreskrey/Readability/Readability.php
+++ b/plugins/af_readability/vendor/andreskrey/Readability/Readability.php
diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php
index 17ba432fd..c8ba4a1b2 100755
--- a/plugins/af_redditimgur/init.php
+++ b/plugins/af_redditimgur/init.php
@@ -1,7 +1,4 @@
<?php
-use andreskrey\Readability\Readability;
-use andreskrey\Readability\Configuration;
-
class Af_RedditImgur extends Plugin {
/* @var PluginHost $host */
@@ -37,9 +34,9 @@ class Af_RedditImgur extends Plugin {
print_error("Readability requires PHP version 5.6.");
}
- print "<form dojoType=\"dijit.form.Form\">";
+ print "<form dojoType='dijit.form.Form'>";
- print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
+ print "<script type='dojo/method' event='onSubmit' args='evt'>
evt.preventDefault();
if (this.validate()) {
console.log(dojo.objectToQuery(this.getValues()));
@@ -57,14 +54,19 @@ class Af_RedditImgur extends Plugin {
print_hidden("method", "save");
print_hidden("plugin", "af_redditimgur");
+ print "<fieldset class='narrow'>";
+ print "<label class='checkbox'>";
print_checkbox("enable_readability", $enable_readability);
- print "&nbsp;<label for=\"enable_readability\">" . __("Extract missing content using Readability") . "</label>";
-
- print "<br/>";
+ print " " . __("Extract missing content using Readability (requires af_readability)") . "</label>";
+ print "</fieldset>";
+ print "<fieldset class='narrow'>";
+ print "<label class='checkbox'>";
print_checkbox("enable_content_dupcheck", $enable_content_dupcheck);
- print "&nbsp;<label for=\"enable_content_dupcheck\">" . __("Enable additional duplicate checking") . "</label>";
- print "<p>"; print_button("submit", __("Save"));
+ print " " . __("Enable additional duplicate checking") . "</label>";
+ print "</fieldset>";
+
+ print_button("submit", __("Save"), 'class="alt-primary"');
print "</form>";
print "</div>";
@@ -546,47 +548,16 @@ class Af_RedditImgur extends Plugin {
parse it which p much requires curl */
$useragent_compat = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)";
-
$content_type = $this->get_content_type($url, $useragent_compat);
if ($content_type && strpos($content_type, "text/html") !== FALSE) {
- $tmp = fetch_file_contents(["url" => $url,
- "useragent" => $useragent_compat,
- "http_accept" => "text/html"]);
-
- Debug::log("tmplen: " . mb_strlen($tmp), Debug::$LOG_VERBOSE);
-
- if ($tmp && mb_strlen($tmp) < 1024 * 500) {
-
- $r = new Readability(new Configuration());
-
- try {
- if ($r->parse($tmp)) {
-
- $tmpxpath = new DOMXPath($r->getDOMDocument());
-
- $entries = $tmpxpath->query('(//a[@href]|//img[@src])');
+ foreach ($this->host->get_hooks(PluginHost::HOOK_GET_FULL_TEXT) as $p) {
+ $extracted_content = $p->hook_get_full_text($url);
- foreach ($entries as $entry) {
- if ($entry->hasAttribute("href")) {
- $entry->setAttribute("href",
- rewrite_relative_url($url, $entry->getAttribute("href")));
-
- }
-
- if ($entry->hasAttribute("src")) {
- $entry->setAttribute("src",
- rewrite_relative_url($url, $entry->getAttribute("src")));
-
- }
-
- }
-
- $article["content"] = $r->getContent() . "<hr/>" . $article["content"];
- }
- } catch (Exception $e) {
- //
+ if ($extracted_content) {
+ $article["content"] = $extracted_content;
+ break;
}
}
}
diff --git a/plugins/af_tumblr_1280/init.php b/plugins/af_tumblr_1280/init.php
index 8aba0e652..5d7f366a4 100755
--- a/plugins/af_tumblr_1280/init.php
+++ b/plugins/af_tumblr_1280/init.php
@@ -25,12 +25,8 @@ class Af_Tumblr_1280 extends Plugin {
if (!function_exists("curl_init") || ini_get("open_basedir"))
return $article;
- $charset_hack = '<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- </head>';
-
$doc = new DOMDocument();
- $doc->loadHTML($charset_hack . $article["content"]);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $article["content"]);
$found = false;
@@ -92,4 +88,4 @@ class Af_Tumblr_1280 extends Plugin {
return 2;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_zz_imgproxy/init.php b/plugins/af_zz_imgproxy/init.php
index 7947d4ca2..b172d4563 100755
--- a/plugins/af_zz_imgproxy/init.php
+++ b/plugins/af_zz_imgproxy/init.php
@@ -155,7 +155,7 @@ class Af_Zz_ImgProxy extends Plugin {
$proxy_all = $this->host->get($this, "proxy_all");
$doc = new DOMDocument();
- if (@$doc->loadHTML($article["content"])) {
+ if (@$doc->loadHTML('<?xml encoding="UTF-8">' . $article["content"])) {
$xpath = new DOMXPath($doc);
$imgs = $xpath->query("//img[@src]");
@@ -170,7 +170,7 @@ class Af_Zz_ImgProxy extends Plugin {
}
}
- $vids = $xpath->query("//video");
+ $vids = $xpath->query("(//video|//picture)");
foreach ($vids as $vid) {
if ($vid->hasAttribute("poster")) {
diff --git a/plugins/auth_internal/init.php b/plugins/auth_internal/init.php
index e1eee9f15..8200ddc02 100644
--- a/plugins/auth_internal/init.php
+++ b/plugins/auth_internal/init.php
@@ -48,7 +48,9 @@ class Auth_Internal extends Plugin implements IAuthModule {
}
} else {
$return = urlencode($_REQUEST["return"]);
- ?><html>
+ ?>
+ <!DOCTYPE html>
+ <html>
<head>
<title>Tiny Tiny RSS</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
diff --git a/plugins/bookmarklets/init.php b/plugins/bookmarklets/init.php
index 9669afefe..3b13ef10d 100644
--- a/plugins/bookmarklets/init.php
+++ b/plugins/bookmarklets/init.php
@@ -5,7 +5,9 @@ class Bookmarklets extends Plugin {
function about() {
return array(1.0,
"Easy feed subscription and web page sharing using bookmarklets",
- "fox");
+ "fox",
+ false,
+ "https://git.tt-rss.org/fox/tt-rss/wiki/ShareAnything");
}
function init($host) {
diff --git a/plugins/cache_starred_images/init.php b/plugins/cache_starred_images/init.php
index a1916e226..714d4cb9b 100755
--- a/plugins/cache_starred_images/init.php
+++ b/plugins/cache_starred_images/init.php
@@ -190,12 +190,8 @@ class Cache_Starred_Images extends Plugin implements IHandler {
return;
}
- $charset_hack = '<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- </head>';
-
$doc = new DOMDocument();
- $doc->loadHTML($charset_hack . $content);
+ $doc->loadHTML('<?xml encoding="UTF-8">' . $content);
$xpath = new DOMXPath($doc);
$entries = $xpath->query('(//img[@src])|(//video/source[@src])');
diff --git a/plugins/googlereaderkeys/init.php b/plugins/googlereaderkeys/init.php
index ca8b88516..936158417 100644
--- a/plugins/googlereaderkeys/init.php
+++ b/plugins/googlereaderkeys/init.php
@@ -18,17 +18,17 @@ class GoogleReaderKeys extends Plugin {
$hotkeys["j"] = "next_article_noscroll";
$hotkeys["k"] = "prev_article_noscroll";
- $hotkeys["*n"] = "next_feed";
- $hotkeys["*p"] = "prev_feed";
+ $hotkeys["N"] = "next_feed";
+ $hotkeys["P"] = "prev_feed";
$hotkeys["v"] = "open_in_new_window";
$hotkeys["r"] = "feed_refresh";
$hotkeys["m"] = "toggle_unread";
$hotkeys["o"] = "toggle_expand";
- $hotkeys["(13)|enter"] = "toggle_expand";
- $hotkeys["*(191)|?"] = "help_dialog";
- $hotkeys["(32)|space"] = "next_article";
- $hotkeys["(38)|up"] = "article_scroll_up";
- $hotkeys["(40)|down"] = "article_scroll_down";
+ $hotkeys["\r|Enter"] = "toggle_expand";
+ $hotkeys["?"] = "help_dialog";
+ $hotkeys[" |Space"] = "next_article";
+ $hotkeys["(38)|Up"] = "article_scroll_up";
+ $hotkeys["(40)|Down"] = "article_scroll_down";
return $hotkeys;
}
@@ -37,4 +37,4 @@ class GoogleReaderKeys extends Plugin {
return 2;
}
-} \ No newline at end of file
+}
diff --git a/plugins/hotkeys_noscroll/init.php b/plugins/hotkeys_noscroll/init.php
index 18f5aedab..2038997f5 100644
--- a/plugins/hotkeys_noscroll/init.php
+++ b/plugins/hotkeys_noscroll/init.php
@@ -16,8 +16,8 @@ class Hotkeys_Noscroll extends Plugin {
function hook_hotkey_map($hotkeys) {
- $hotkeys["(40)|down"] = "next_article_noscroll";
- $hotkeys["(38)|up"] = "prev_article_noscroll";
+ $hotkeys["(40)|Down"] = "next_article_noscroll";
+ $hotkeys["(38)|Up"] = "prev_article_noscroll";
$hotkeys["n"] = "next_article_noscroll";
$hotkeys["p"] = "prev_article_noscroll";
diff --git a/plugins/import_export/init.php b/plugins/import_export/init.php
index c49426f9f..714574ab4 100755
--- a/plugins/import_export/init.php
+++ b/plugins/import_export/init.php
@@ -50,32 +50,32 @@ class Import_Export extends Plugin implements IHandler {
function hook_prefs_tab($args) {
if ($args != "prefFeeds") return;
- print "<div dojoType=\"dijit.layout.AccordionPane\"
+ print "<div dojoType='dijit.layout.AccordionPane'
title=\"<i class='material-icons'>import_export</i> ".__('Import and export')."\">";
print_notice(__("You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances of same version."));
print "<p>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return exportData()\">".
+ print "<button dojoType='dijit.form.Button' class='alt-primary' onclick='return exportData()'>".
__('Export my data')."</button> ";
print "<hr>";
- print "<iframe id=\"data_upload_iframe\"
- name=\"data_upload_iframe\" onload=\"dataImportComplete(this)\"
- style=\"width: 400px; height: 100px; display: none;\"></iframe>";
+ print "<iframe id='data_upload_iframe'
+ name='data_upload_iframe' onload='dataImportComplete(this)'
+ style='width: 400px; height: 100px; display: none;'></iframe>";
- print "<form name=\"import_form\" style='display : block' target=\"data_upload_iframe\"
- enctype=\"multipart/form-data\" method=\"POST\"
- action=\"backend.php\">
- <label class=\"dijitButton\">".__("Choose file...")."
- <input style=\"display : none\" id=\"export_file\" name=\"export_file\" type=\"file\">&nbsp;
+ print "<form name='import_form' style='display : block' target='data_upload_iframe'
+ enctype='multipart/form-data' method='POST'
+ action='backend.php'>
+ <label class='dijitButton'>".__("Choose file...")."
+ <input style='display : none' id='export_file' name='export_file' type='file'>&nbsp;
</label>
- <input type=\"hidden\" name=\"op\" value=\"pluginhandler\">
- <input type=\"hidden\" name=\"plugin\" value=\"import_export\">
- <input type=\"hidden\" name=\"method\" value=\"dataimport\">
- <button dojoType=\"dijit.form.Button\" onclick=\"return importData();\" type=\"submit\">" .
+ <input type='hidden' name='op' value='pluginhandler'>
+ <input type='hidden' name='plugin' value='import_export'>
+ <input type='hidden' name='method' value='dataimport'>
+ <button dojoType='dijit.form.Button' onclick='return importData();' class='alt-primary' type='submit'>" .
__('Import') . "</button>";
print "</form>";
@@ -400,6 +400,24 @@ class Import_Export extends Plugin implements IHandler {
if ($res) {
+ if (DB_TYPE == "pgsql") {
+ $ts_lang = get_pref('DEFAULT_SEARCH_LANGUAGE', $owner_uid);
+ // TODO: maybe use per-feed setting if available?
+
+ if (!$ts_lang)
+ $ts_lang = 'simple';
+
+ $sth = $this->pdo->prepare("UPDATE ttrss_entries
+ SET tsvector_combined = to_tsvector(:ts_lang, :ts_content)
+ WHERE id = :id");
+
+ $sth->execute([
+ "id" => $ref_id,
+ "ts_lang" => $ts_lang,
+ "ts_content" => mb_substr(strip_tags($article['title'] . " " . $article['content']), 0, 900000)
+ ]);
+ }
+
$label_cache = json_decode($article['label_cache'], true);
if (is_array($label_cache) && $label_cache["no-labels"] != 1) {
@@ -435,26 +453,29 @@ class Import_Export extends Plugin implements IHandler {
function exportData() {
+ print "<form onsubmit='return false'>";
+
print "<p style='text-align : center' id='export_status_message'>You need to prepare exported data first by clicking the button below.</p>";
- print "<div align='center'>";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button'
+ type='submit' class='alt-primary'
onclick=\"dijit.byId('dataExportDlg').prepare()\">".
__('Prepare data')."</button>";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('dataExportDlg').hide()\">".
__('Close this window')."</button>";
- print "</div>";
-
+ print "</footer>";
+ print "</form>";
}
function dataImport() {
header("Content-Type: text/html"); # required for iframe
- print "<div style='text-align : center'>";
+ print "<footer class='text-center'>";
if ($_FILES['export_file']['error'] != 0) {
print_error(T_sprintf("Upload failed with error code %d (%s)",
@@ -486,7 +507,7 @@ class Import_Export extends Plugin implements IHandler {
}
}
- print "<button dojoType=\"dijit.form.Button\"
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('dataImportDlg').hide()\">".
__('Close this window')."</button>";
diff --git a/plugins/mail/init.php b/plugins/mail/init.php
index 72d8a65c2..e85053566 100644
--- a/plugins/mail/init.php
+++ b/plugins/mail/init.php
@@ -162,22 +162,21 @@ class Mail extends Plugin {
print "</td><td>";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"true\"
- style=\"width : 30em;\"
- name=\"subject\" value=\"$subject\" id=\"subject\">";
+ print "<input dojoType='dijit.form.ValidationTextBox' required='true'
+ style='width : 30em;' name='subject' value=\"$subject\" id='subject'>";
print "</td></tr>";
- print "<tr><td colspan='2'><textarea dojoType=\"dijit.form.SimpleTextarea\"
+ print "<tr><td colspan='2'><textarea dojoType='dijit.form.SimpleTextarea'
style='height : 200px; font-size : 12px; width : 98%' rows=\"20\"
name='content'>$content</textarea>";
print "</td></tr></table>";
- print "<div class='dlgButtons'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').execute()\">".__('Send e-mail')."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').hide()\">".__('Cancel')."</button>";
- print "</div>";
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('emailArticleDlg').execute()\">".__('Send e-mail')."</button> ";
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('emailArticleDlg').hide()\">".__('Cancel')."</button>";
+ print "</footer>";
//return;
}
diff --git a/plugins/mailto/init.php b/plugins/mailto/init.php
index 26871ac2b..421d5fd59 100644
--- a/plugins/mailto/init.php
+++ b/plugins/mailto/init.php
@@ -81,9 +81,9 @@ class MailTo extends Plugin {
print "<p>";
- print "<div style='text-align : center'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').hide()\">".__('Close this dialog')."</button>";
- print "</div>";
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('emailArticleDlg').hide()\">".__('Close this dialog')."</button>";
+ print "</footer>";
//return;
}
diff --git a/plugins/note/init.php b/plugins/note/init.php
index a0abb7f19..3c2ca0075 100644
--- a/plugins/note/init.php
+++ b/plugins/note/init.php
@@ -42,21 +42,18 @@ class Note extends Plugin {
print_hidden("method", "setNote");
print_hidden("plugin", "note");
- print "<table width='100%'><tr><td>";
- print "<textarea dojoType=\"dijit.form.SimpleTextarea\"
+ print "<textarea dojoType='dijit.form.SimpleTextarea'
style='font-size : 12px; width : 98%; height: 100px;'
- placeHolder='body#ttrssMain { font-size : 14px; };'
name='note'>$note</textarea>";
- print "</td></tr></table>";
}
- print "<div class='dlgButtons'>";
+ print "<footer class='text-center'>";
print "<button dojoType=\"dijit.form.Button\"
onclick=\"dijit.byId('editNoteDlg').execute()\">".__('Save')."</button> ";
print "<button dojoType=\"dijit.form.Button\"
onclick=\"dijit.byId('editNoteDlg').hide()\">".__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -78,4 +75,4 @@ class Note extends Plugin {
return 2;
}
-} \ No newline at end of file
+}
diff --git a/plugins/search_sphinx/init.php b/plugins/search_sphinx/init.php
index 8520bb0d8..95b7ad676 100644
--- a/plugins/search_sphinx/init.php
+++ b/plugins/search_sphinx/init.php
@@ -5,7 +5,8 @@ class Search_Sphinx extends Plugin {
return array(1.0,
"Delegate searching for articles to Sphinx (don't forget to set options in config.php)",
"hoelzro",
- true);
+ true,
+ "https://git.tt-rss.org/fox/tt-rss/wiki/SphinxSearch");
}
function init($host) {
@@ -61,4 +62,4 @@ class Search_Sphinx extends Plugin {
function api_version() {
return 2;
}
-} \ No newline at end of file
+}
diff --git a/plugins/search_sphinx/sphinxapi.php b/plugins/search_sphinx/sphinxapi.php
index 4d1ed6116..9c53e216a 100644
--- a/plugins/search_sphinx/sphinxapi.php
+++ b/plugins/search_sphinx/sphinxapi.php
@@ -424,7 +424,7 @@ class SphinxClient
/////////////////////////////////////////////////////////////////////////////
/// create a new client object and fill defaults
- function SphinxClient ()
+ function __construct()
{
// per-client-object settings
$this->_host = "localhost";
diff --git a/plugins/share/init.php b/plugins/share/init.php
index ba33838b3..d0b3dfc0b 100644
--- a/plugins/share/init.php
+++ b/plugins/share/init.php
@@ -100,16 +100,16 @@ class Share extends Plugin {
$sth->execute([$uuid, $param, $_SESSION['uid']]);
}
- print "<div class='dlgSec'>" . __("You can share this article by the following unique URL:") . "</div>";
+ print "<header>" . __("You can share this article by the following unique URL:") . "</header>";
$url_path = get_self_url_prefix();
$url_path .= "/public.php?op=share&key=$uuid";
- print "<div class='dlgSecCont'>
+ print "<section>
<div class='panel text-center'>
<a id='gen_article_url' href='$url_path' target='_blank' rel='noopener noreferrer'>$url_path</a>
</div>
- </div>";
+ </section>";
/* if (!label_find_id(__('Shared'), $_SESSION["uid"]))
label_create(__('Shared'), $_SESSION["uid"]);
@@ -121,7 +121,7 @@ class Share extends Plugin {
print "Article not found.";
}
- print "<div align='center'>";
+ print "<footer class='text-center'>";
print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('shareArticleDlg').unshare()\">".
__('Unshare article')."</button>";
@@ -132,7 +132,7 @@ class Share extends Plugin {
print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('shareArticleDlg').hide()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
}
function api_version() {
diff --git a/plugins/toggle_sidebar/init.js b/plugins/toggle_sidebar/init.js
new file mode 100644
index 000000000..9efb06193
--- /dev/null
+++ b/plugins/toggle_sidebar/init.js
@@ -0,0 +1,9 @@
+Plugins.Toggle_Sidebar = {
+ toggle: function() {
+ Feeds.toggle();
+
+ const label = document.querySelector("i.toggle-sidebar-label");
+
+ label.innerHTML = Element.visible("feeds-holder") ? 'chevron_left' : 'chevron_right';
+ }
+};
diff --git a/plugins/toggle_sidebar/init.php b/plugins/toggle_sidebar/init.php
index ab7924bc5..f8ec35a91 100644
--- a/plugins/toggle_sidebar/init.php
+++ b/plugins/toggle_sidebar/init.php
@@ -15,12 +15,16 @@ class Toggle_Sidebar extends Plugin {
$host->add_hook($host::HOOK_MAIN_TOOLBAR_BUTTON, $this);
}
+ function get_js() {
+ return file_get_contents(__DIR__ . "/init.js");
+ }
+
function hook_main_toolbar_button() {
?>
- <button dojoType="dijit.form.Button" onclick="Feeds.toggle()">
- <i class="material-icons"
- title="<?php echo __('Toggle feedlist') ?>">fullscreen</i>
+ <button dojoType="dijit.form.Button" onclick="Plugins.Toggle_Sidebar.toggle(this)">
+ <i class="material-icons toggle-sidebar-label"
+ title="<?php echo __('Toggle sidebar') ?>">chevron_left</i>
</button>
<?php
diff --git a/prefs.php b/prefs.php
index 660998b81..38e201fec 100644
--- a/prefs.php
+++ b/prefs.php
@@ -26,8 +26,7 @@
header('Content-Type: text/html; charset=utf-8');
?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
<html>
<head>
<title>Tiny Tiny RSS : <?php echo __("Preferences") ?></title>
@@ -154,13 +153,13 @@
?>
</div>
<div id="footer" dojoType="dijit.layout.ContentPane" region="bottom">
- <a class="insensitive" target="_blank" href="http://tt-rss.org/">
+ <a class="text-muted" target="_blank" href="http://tt-rss.org/">
Tiny Tiny RSS</a>
<?php if (!defined('HIDE_VERSION')) { ?>
v<?php echo VERSION ?>
<?php } ?>
&copy; 2005-<?php echo date('Y') ?>
- <a class="insensitive" target="_blank"
+ <a class="text-muted" target="_blank"
href="http://fakecake.org/">Andrew Dolgov</a>
</div> <!-- footer -->
</div>
diff --git a/register.php b/register.php
index 1667d40ce..6aa3c4f12 100644
--- a/register.php
+++ b/register.php
@@ -89,7 +89,7 @@
return;
}
?>
-
+<!DOCTYPE html>
<html>
<head>
<title>Create new account</title>
diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql
index 81f941127..fcff9c9bb 100644
--- a/schema/ttrss_schema_mysql.sql
+++ b/schema/ttrss_schema_mysql.sql
@@ -69,6 +69,7 @@ create table ttrss_feed_categories(id integer not null primary key auto_incremen
create table ttrss_archived_feeds (id integer not null primary key,
owner_uid integer not null,
+ created datetime not null,
title varchar(200) not null,
feed_url text not null,
site_url varchar(250) not null default '',
@@ -132,7 +133,8 @@ create table ttrss_feeds (id integer not null auto_increment primary key,
feed_language varchar(100) not null default '',
foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE,
foreign key (cat_id) references ttrss_feed_categories(id) ON DELETE SET NULL,
- foreign key (parent_feed) references ttrss_feeds(id) ON DELETE SET NULL) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
+ foreign key (parent_feed) references ttrss_feeds(id) ON DELETE SET NULL,
+ unique(feed_url(255), owner_uid)) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
insert into ttrss_feeds (owner_uid, title, feed_url) values
(1, 'Tiny Tiny RSS: Forum', 'http://tt-rss.org/forum/rss.php');
@@ -285,7 +287,7 @@ create table ttrss_tags (id integer primary key auto_increment,
create table ttrss_version (schema_version int not null) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
-insert into ttrss_version values (135);
+insert into ttrss_version values (138);
create table ttrss_enclosures (id integer primary key auto_increment,
content_url text not null,
@@ -378,6 +380,7 @@ insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_ENABLE
insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_REVERSE_HEADLINES', 1, 'false', 1);
insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_CSS_THEME', 2, '', 2);
insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_LANGUAGE', 2, '', 2);
+insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('DEFAULT_SEARCH_LANGUAGE', 2, '', 2);
update ttrss_prefs set access_level = 1 where pref_name in ('ON_CATCHUP_SHOW_NEXT_FEED',
'SORT_HEADLINES_BY_FEED_DATE',
diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql
index 3f0e012b3..ac1b38315 100644
--- a/schema/ttrss_schema_pgsql.sql
+++ b/schema/ttrss_schema_pgsql.sql
@@ -99,7 +99,8 @@ create table ttrss_feeds (id serial not null primary key,
pubsub_state integer not null default 0,
favicon_last_checked timestamp default null,
feed_language varchar(100) not null default '',
- auth_pass_encrypted boolean not null default false);
+ auth_pass_encrypted boolean not null default false,
+ unique(feed_url, owner_uid));
create index ttrss_feeds_owner_uid_index on ttrss_feeds(owner_uid);
create index ttrss_feeds_cat_id_idx on ttrss_feeds(cat_id);
@@ -109,6 +110,7 @@ insert into ttrss_feeds (owner_uid, title, feed_url) values
create table ttrss_archived_feeds (id integer not null primary key,
owner_uid integer not null references ttrss_users(id) on delete cascade,
+ created timestamp not null,
title varchar(200) not null,
feed_url text not null,
site_url varchar(250) not null default '');
@@ -267,7 +269,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id);
create table ttrss_version (schema_version int not null);
-insert into ttrss_version values (135);
+insert into ttrss_version values (138);
create table ttrss_enclosures (id serial not null primary key,
content_url text not null,
@@ -358,6 +360,7 @@ insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_ENABLE
insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_REVERSE_HEADLINES', 1, 'false', 1);
insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_CSS_THEME', 2, '', 2);
insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_LANGUAGE', 2, '', 2);
+insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('DEFAULT_SEARCH_LANGUAGE', 2, '', 2);
update ttrss_prefs set access_level = 1 where pref_name in ('ON_CATCHUP_SHOW_NEXT_FEED',
'SORT_HEADLINES_BY_FEED_DATE',
diff --git a/schema/versions/mysql/136.sql b/schema/versions/mysql/136.sql
new file mode 100644
index 000000000..05506a568
--- /dev/null
+++ b/schema/versions/mysql/136.sql
@@ -0,0 +1,9 @@
+begin;
+
+alter table ttrss_archived_feeds add column created datetime;
+update ttrss_archived_feeds set created = NOW();
+alter table ttrss_archived_feeds change created created datetime not null;
+
+update ttrss_version set schema_version = 136;
+
+commit;
diff --git a/schema/versions/mysql/137.sql b/schema/versions/mysql/137.sql
new file mode 100644
index 000000000..45e4de02f
--- /dev/null
+++ b/schema/versions/mysql/137.sql
@@ -0,0 +1,7 @@
+begin;
+
+alter table ttrss_feeds add constraint ttrss_feeds_feed_url_owner_uid_key unique (feed_url(255), owner_uid);
+
+update ttrss_version set schema_version = 137;
+
+commit;
diff --git a/schema/versions/mysql/138.sql b/schema/versions/mysql/138.sql
new file mode 100644
index 000000000..6bfc5bcd5
--- /dev/null
+++ b/schema/versions/mysql/138.sql
@@ -0,0 +1,7 @@
+begin;
+
+insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('DEFAULT_SEARCH_LANGUAGE', 2, '', 2);
+
+update ttrss_version set schema_version = 138;
+
+commit;
diff --git a/schema/versions/pgsql/136.sql b/schema/versions/pgsql/136.sql
new file mode 100644
index 000000000..d74136537
--- /dev/null
+++ b/schema/versions/pgsql/136.sql
@@ -0,0 +1,9 @@
+begin;
+
+alter table ttrss_archived_feeds add column created timestamp;
+update ttrss_archived_feeds set created = NOW();
+alter table ttrss_archived_feeds alter column created set not null;
+
+update ttrss_version set schema_version = 136;
+
+commit;
diff --git a/schema/versions/pgsql/137.sql b/schema/versions/pgsql/137.sql
new file mode 100644
index 000000000..71b67327e
--- /dev/null
+++ b/schema/versions/pgsql/137.sql
@@ -0,0 +1,7 @@
+begin;
+
+alter table ttrss_feeds add constraint ttrss_feeds_feed_url_owner_uid_key unique (feed_url, owner_uid);
+
+update ttrss_version set schema_version = 137;
+
+commit;
diff --git a/schema/versions/pgsql/138.sql b/schema/versions/pgsql/138.sql
new file mode 100644
index 000000000..6bfc5bcd5
--- /dev/null
+++ b/schema/versions/pgsql/138.sql
@@ -0,0 +1,7 @@
+begin;
+
+insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('DEFAULT_SEARCH_LANGUAGE', 2, '', 2);
+
+update ttrss_version set schema_version = 138;
+
+commit;
diff --git a/templates/digest_template_html.txt b/templates/digest_template_html.txt
index 0759e8a05..ede93d917 100644
--- a/templates/digest_template_html.txt
+++ b/templates/digest_template_html.txt
@@ -6,7 +6,8 @@
<ul>
<!-- $BeginBlock article -->
-<li><a href="${ARTICLE_LINK}">${ARTICLE_TITLE}</a> - ${ARTICLE_UPDATED}
+<li><a href="${ARTICLE_LINK}">${ARTICLE_TITLE}</a> &mdash; <strong>${ARTICLE_UPDATED}</strong>
+<div style='font-style : italic'>${ARTICLE_LABELS}</div>
<div style='color : gray'>${ARTICLE_EXCERPT}</div>
<!-- $EndBlock article -->
</ul>
diff --git a/themes/night.css b/themes/night.css
index b19af2930..14f7e074f 100644
--- a/themes/night.css
+++ b/themes/night.css
@@ -128,30 +128,32 @@ body.ttrss_main a:hover {
text-decoration: underline;
}
body.ttrss_main #notify.visible {
- transform: translate(0, -45px);
+ opacity: 100;
}
body.ttrss_main #notify {
- bottom: -45px;
- right: 0px;
- height: 30px;
- left: 0px;
- border-width: 1px 0px 0px 0px;
+ bottom: 20px;
+ right: 20px;
+ min-width: 200px;
+ max-width: 350px;
+ border-width: 1px;
border-style: solid;
position: fixed;
- font-size: 13px;
+ font-size: 14px;
z-index: 99;
display: flex;
+ opacity: 0;
align-items: center;
- transition: all 0.5s ease-in-out;
-}
-body.ttrss_main #notify > * {
- padding: 4px;
+ padding: 10px;
+ transition: opacity 0.2s linear;
+ box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.1);
}
body.ttrss_main #notify img {
vertical-align: middle;
}
body.ttrss_main #notify .msg {
flex-grow: 2;
+ padding: 0 10px;
+ line-height: 20px;
}
body.ttrss_main #notify .icon-close {
cursor: pointer;
@@ -180,6 +182,12 @@ body.ttrss_main .notify.notify_error i.icon-notify,
body.ttrss_main .notify.notify_error i.icon-close {
color: white;
}
+body.ttrss_main .action-chooser .action-button .dijitButtonText {
+ vertical-align: unset;
+}
+body.ttrss_main .action-chooser .action-button .dijitArrowButtonInner {
+ display: none;
+}
body.ttrss_main .hl {
border: 0px solid #222;
border-bottom-width: 1px;
@@ -189,6 +197,7 @@ body.ttrss_main .hl {
flex-wrap: nowrap;
background: #222;
align-items: center;
+ user-select: none;
}
body.ttrss_main .hl > * {
white-space: nowrap;
@@ -427,6 +436,7 @@ body.ttrss_main div#headlines-frame.wide .title {
body.ttrss_main div#headlines-frame.wide .hl .feed {
display: none;
}
+body.ttrss_main .dijitDialog header,
body.ttrss_main .dijitDialog .dlgSec,
body.ttrss_main .dijitDialog .dlgSecHoriz {
font-size: 16px;
@@ -434,12 +444,18 @@ body.ttrss_main .dijitDialog .dlgSecHoriz {
color: #ccc;
font-family: "Segoe WP Semibold", "Segoe UI Semibold", "Segoe UI Web Semibold", "Segoe UI", Ubuntu, "Helvetica Neue", Helvetica, Arial, sans-serif;
}
+body.ttrss_main .dijitDialog section,
body.ttrss_main .dijitDialog .dlgSecCont {
margin: 10px 20px;
}
+body.ttrss_main .dijitDialog header.horizontal + section,
body.ttrss_main .dijitDialog .dlgSecHoriz + .dlgSecCont {
- margin: 10px 0px;
+ margin: 10px 0;
}
+body.ttrss_main .dijitDialog section.narrow {
+ margin: 0;
+}
+body.ttrss_main .dijitDialog section fieldset > label,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label {
font-weight: bold;
@@ -448,28 +464,40 @@ body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label {
min-width: 140px;
text-align: right;
}
+body.ttrss_main .dijitDialog section fieldset > label.checkbox,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label.checkbox,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label.checkbox {
font-weight: normal;
display: inline;
}
+body.ttrss_main .dijitDialog section fieldset > label.inline,
+body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label.inline,
+body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label.inline {
+ display: inline;
+}
+body.ttrss_main .dijitDialog section fieldset,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset {
border-width: 0px;
padding: 5px 0px;
}
+body.ttrss_main .dijitDialog section fieldset.narrow,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset.narrow,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset.narrow {
padding: 2px 0px;
}
+body.ttrss_main .dijitDialog section fieldset.align-right,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset.align-right,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset.align-right {
text-align: right;
}
+body.ttrss_main .dijitDialog footer,
body.ttrss_main .dijitDialog .dlgButtons {
margin-top: 5px;
text-align: right;
- clear: both;
+}
+body.ttrss_main .dijitDialog footer.text-center {
+ text-align: center;
}
body.ttrss_main i.icon-label {
color: #fff7d5;
@@ -571,12 +599,8 @@ body.ttrss_main #feeds-holder #feedTree .dijitTreeNode .dijitTreeRowSelected {
background: #333;
color: #333;
}
-body.ttrss_main #feeds-holder #feedTree .icon {
- position: relative;
- top: -2px;
-}
-body.ttrss_main #feeds-holder #feedTree i.icon {
- left: -2px;
+body.ttrss_main #feeds-holder #feedTree .dijitIcon.feed-icon {
+ margin-right: 2px;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-inbox {
color: #555;
@@ -585,10 +609,10 @@ body.ttrss_main #feeds-holder #feedTree i.icon.icon-archive {
color: #c77b2e;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-star {
+ position: relative;
color: #ffc069;
font-size: 21px;
- top: -4px;
- left: -4px;
+ left: -2px;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-rss_feed {
color: #ff7c4b;
@@ -597,8 +621,9 @@ body.ttrss_main #feeds-holder #feedTree i.icon.icon-whatshot {
color: #69C671;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-restore {
+ position: relative;
+ top: -1px;
font-weight: bold;
- left: -3px;
color: #b87d2c;
}
body.ttrss_main #headlines-wrap-inner {
@@ -918,6 +943,30 @@ body.ttrss_utility .alert .close {
line-height: 20px;
cursor: pointer;
}
+body.ttrss_main .pull-right,
+body.ttrss_utility .pull-right {
+ float: right;
+}
+body.ttrss_main .pull-left,
+body.ttrss_utility .pull-left {
+ float: left;
+}
+body.ttrss_main .text-error,
+body.ttrss_utility .text-error {
+ color: #b94a48;
+}
+body.ttrss_main .text-info,
+body.ttrss_utility .text-info {
+ color: #3a87ad;
+}
+body.ttrss_main .text-success,
+body.ttrss_utility .text-success {
+ color: #468847;
+}
+body.ttrss_main .text-warning,
+body.ttrss_utility .text-warning {
+ color: #a47e3c;
+}
body.ttrss_main .alert,
body.ttrss_utility .alert,
body.ttrss_main .alert h4,
@@ -967,8 +1016,8 @@ body.ttrss_utility hr {
border: 0px solid #ccc;
border-bottom-width: 1px;
}
-body.ttrss_main .insensitive,
-body.ttrss_utility .insensitive {
+body.ttrss_main .text-muted,
+body.ttrss_utility .text-muted {
color: #ccc;
}
body.ttrss_main .small,
@@ -1322,6 +1371,9 @@ div#floatingTitle.Unread a.title {
font-weight: normal;
cursor: pointer;
}
+.cdm.expandable:not(.active) {
+ user-select: none;
+}
.cdm.expandable.Unread {
background: white;
}
@@ -1444,22 +1496,23 @@ body.ttrss_prefs .user-css-editor {
height: 300px;
width: 575px;
}
-body.ttrss_prefs fieldset.prefs-set .help-text {
- display: inline-block;
- margin-left: 10px;
+body.ttrss_prefs fieldset.prefs {
+ min-height: 30px;
}
-body.ttrss_prefs table.prefPluginsList td label,
-body.ttrss_prefs table.prefUserList td {
- cursor: pointer;
+body.ttrss_prefs fieldset.prefs label:first-of-type {
+ min-width: 300px;
}
-body.ttrss_prefs table.prefPluginsList label {
- white-space: nowrap;
+body.ttrss_prefs fieldset.prefs .help-text {
+ display: inline-block;
+ margin-left: 10px;
}
-body.ttrss_prefs table.prefPluginsList i.plugin-enabled {
- color: #69C671;
+body.ttrss_prefs fieldset.plugin label.description {
+ width: 600px;
+ margin-right: 150px;
+ display: inline-block;
}
-body.ttrss_prefs table.prefPluginsList label img {
- vertical-align: middle;
+body.ttrss_prefs fieldset.plugin label.description .dijitCheckBox {
+ margin-right: 10px;
}
body.ttrss_prefs table.prefErrorLog tr.errrow td {
font-size: 10px;
@@ -1490,6 +1543,7 @@ body.ttrss_prefs .phpinfo td.e {
}
body.ttrss_prefs .phpinfo td.v {
font-family: monospace;
+ word-break: break-all;
}
body.ttrss_prefs fieldset,
body.ttrss_utility fieldset {
@@ -1598,8 +1652,7 @@ body.ttrss_utility.ttrss_login .container .content {
padding: 40px;
}
body.ttrss_utility.installer,
-body.ttrss_utility.feed_debugger,
-body.ttrss_utility.ttrss_zoom {
+body.ttrss_utility.feed_debugger {
margin: 2em;
}
body.ttrss_utility.share_popup {
@@ -1615,6 +1668,17 @@ body.ttrss_utility.share_popup .content {
.flat li {
padding: 2px;
}
+.flat #feedTree .dijitTreeContent .dijitInline {
+ vertical-align: baseline;
+}
+.flat .dijitButton i.material-icons {
+ position: relative;
+ top: -1px;
+}
+.flat .tabLabel > i.material-icons {
+ position: relative;
+ top: -1px;
+}
.flat #filterDlg_Matches span.filterRule {
color: green;
}
@@ -1909,7 +1973,7 @@ body.flat.ttrss_main .dijitCheckBox:not(.dijitChecked)::before {
color: #999999;
background: #222;
}
-body.flat.ttrss_main .insensitive {
+body.flat.ttrss_main .text-muted {
color: #999999;
}
body.flat.ttrss_main .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
diff --git a/themes/night.css.map b/themes/night.css.map
index d1e3afa0d..b83e4ac3f 100644
--- a/themes/night.css.map
+++ b/themes/night.css.map
@@ -1 +1 @@
-{"version":3,"sources":["night_base.less","night.less","C:/Users/fox/Projects/tt-rss/css/defines.less","C:/Users/fox/Projects/tt-rss/css/tt-rss.less","C:/Users/fox/Projects/tt-rss/css/cdm.less","C:/Users/fox/Projects/tt-rss/css/prefs.less","C:/Users/fox/Projects/tt-rss/css/utility.less","C:/Users/fox/Projects/tt-rss/css/dijit_basic.less"],"names":[],"mappings":"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","file":"night.css"} \ No newline at end of file
+{"version":3,"sources":["night_base.less","night.less","C:/Users/fox/Projects/tt-rss/css/defines.less","C:/Users/fox/Projects/tt-rss/css/tt-rss.less","C:/Users/fox/Projects/tt-rss/css/cdm.less","C:/Users/fox/Projects/tt-rss/css/prefs.less","C:/Users/fox/Projects/tt-rss/css/utility.less","C:/Users/fox/Projects/tt-rss/css/dijit_basic.less"],"names":[],"mappings":"QACQ;QCAA;ACeR,IAAI;AACJ,IAAI;AACJ;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,UAAA;EACA,SAAA;;ACxBF,IAAI;EACH,gBAAA;EACA,WAAA;EACA,aAAa,8CAAb;EACA,eAAA;EACA,gBAAA;;AALD,IAAI,WAOH;EACC,aAAA;;AARF,IAAI,WAWH,IAAG;EACF,YAAA;EACA,eAAA;;AAbF,IAAI,WAWH,IAAG,KAIF,IAAG;EACF,YAAA;EACA,cAAA;EACA,sBAAA;EACA,wBAAA;EACA,gBAAA;;AApBH,IAAI,WAWH,IAAG,KAIF,IAAG,OAOF;AAtBH,IAAI,WAWH,IAAG,KAIF,IAAG,OAOK;EACN,aAAA;;AAvBJ,IAAI,WAWH,IAAG,KAIF,IAAG,OAWF;EACC,aAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,8BAAA;;AA/BJ,IAAI,WAWH,IAAG,KAIF,IAAG,OAmBF;EACC,YAAA;;AAnCJ,IAAI,WAWH,IAAG,KAIF,IAAG,OAuBF;EACC,mBAAA;;AAvCJ,IAAI,WAWH,IAAG,KAIF,IAAG,OA2BF;AA1CH,IAAI,WAWH,IAAG,KAIF,IAAG,OA2BG,EAAC;EACL,eAAA;EACA,sBAAA;EACA,WAAA;;AA7CJ,IAAI,WAWH,IAAG,KAIF,IAAG,OAiCF;EACC,YAAA;EACA,eAAA;EACA,gBAAA;EACA,kCAAA;EACA,aDrDY,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CCqDnG;;AArDJ,IAAI,WAWH,IAAG,KA8CF,IAAG;EACF,aAAA;EACA,eAAA;;AA3DH,IAAI,WAWH,IAAG,KA8CF,IAAG,QAIF;AA7DH,IAAI,WAWH,IAAG,KA8CF,IAAG,QAKF;EACC,iBAAA;EACA,cAAA;EACA,YAAA;;AAjEJ,IAAI,WAWH,IAAG,KA8CF,IAAG,QAWF;EACC,aAAA;;AArEJ,IAAI,WAWH,IAAG,KA8CF,IAAG,QAeF;EACC,cAAA;EACA,cAAA;;AA1EJ,IAAI,WA+EH;EACC,aAAA;EACA,mBAAA;;AAjFF,IAAI,WA+EH,eAIC;EACC,iBAAA;;AApFH,IAAI,WAwFH;EACC,yBAAA;EACA,WAAA;EACA,yBAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;;AA9FF,IAAI,WAwFH,cAQC;EACC,YAAA;;AAjGH,IAAI,WAqGH,cAAa;EACZ,eAAA;;AAtGF,IAAI,WAyGH;EACC,eAAA;EACA,gBAAA;EACA,kCAAA;;AA5GF,IAAI,WAgHH;EACC,eAAA;EACA,gBAAA;EACA,kCAAA;;AAnHF,IAAI,WAuHH;EACC,eAAA;EACA,gBAAA;EACA,kCAAA;;AA1HF,IAAI,WA8HH;EACC,eAAA;EACA,gBAAA;EACA,kCAAA;;AAjIF,IAAI,WAqIH;EACC,cAAA;EACA,qBAAA;;AAvIF,IAAI,WA0IH,EAAC;EACA,cAAA;EACA,0BAAA;;AA5IF,IAAI,WA+IH,QAAO;EACN,YAAA;;AAhJF,IAAI,WAmJH;EACC,YAAA;EACA,WAAA;EACA,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;EACA,eAAA;EACA,eAAA;EACA,WAAA;EACA,aAAA;EACA,UAAA;EACA,mBAAA;EACA,aAAA;EACA,+BAAA;EACA,0CAAA;;AAlKF,IAAI,WAmJH,QAiBC;EACC,sBAAA;;AArKH,IAAI,WAmJH,QAqBC;EACC,YAAA;EACA,eAAA;EACA,iBAAA;;AA3KH,IAAI,WAmJH,QA2BC;EACC,eAAA;;AA/KH,IAAI,WAmLH;EACC,qBAAA;EACA,yBAAA;;AArLF,IAAI,WAwLH,QAAO;EACN,qBAAA;EACA,yBAAA;;AA1LF,IAAI,WA6LH,QAAO;EACN,qBAAA;EACA,yBAAA;;AA/LF,IAAI,WA6LH,QAAO,YAIN,EAAC;EACA,cAAA;;AAlMH,IAAI,WAsMH,QAAO;EACN,sBAAA;EACA,kBAAA;EACA,YAAA;;AAzMF,IAAI,WAsMH,QAAO,aAKN,EAAC;AA3MH,IAAI,WAsMH,QAAO,aAKS,EAAC;EACf,YAAA;;AA5MH,IAAI,WAgNH,gBACC,eACC;EACC,qBAAA;;AAnNJ,IAAI,WAgNH,gBACC,eAIC;EACC,aAAA;;AAtNJ,IAAI,WA2NH;EACC,sBAAA;EACA,wBAAA;EACA,uCAAA;EACA,aAAA;EACA,mBAAA;EACA,iBAAA;EACA,gBAAA;EACA,mBAAA;EACA,iBAAA;;AApOF,IAAI,WA2NH,IAWC;EACC,mBAAA;EACA,YAAA;;AAxOH,IAAI,WA2NH,IAgBC;EACC,sBAAA;;AA5OH,IAAI,WA2NH,IAoBC;AA/OF,IAAI,WA2NH,IAoBQ;EACN,aAAA;EACA,mBAAA;;AAjPH,IAAI,WA2NH,IAoBC,MAIC,EAAC;AAnPJ,IAAI,WA2NH,IAoBQ,OAIN,EAAC;EACA,gBAAA;EACA,YAAA;EACA,6BAAA;EACA,iBAAA;EACA,eAAA;;AAxPJ,IAAI,WA2NH,IAiCC,OACC,EAAC;EACA,WAAA;;AA9PJ,IAAI,WA2NH,IAuCC,IAAG;EACF,eAAA;EACA,YAAA;EACA,gBAAA;EACA,uBAAA;;AAtQH,IAAI,WA2NH,IA8CC,KAAI;EACH,mBAAA;EACA,WAAA;EACA,eAAA;EACA,mBAAA;;AA7QH,IAAI,WA2NH,IAqDC,IAAG;EACF,iBAAA;;AAjRH,IAAI,WA2NH,IAyDC,KAAI,KAAM;EACT,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;;AA3RH,IAAI,WA2NH,IAmEC,KAAI,KAAM,EAAC;EACV,cAAA;;AA/RH,IAAI,WA2NH,IAuEC,KAAI;EACH,WAAA;EACA,iBAAA;EACA,eAAA;EACA,kBAAA;;AAtSH,IAAI,WA2NH,IA8EC,KAAI,QAAS;EACZ,qBAAA;;AA1SH,IAAI,WA2NH,IAkFC,IAAG,KAAM;EACR,eAAA;;AA9SH,IAAI,WA2NH,IAsFC,IAAG,KAAM;AAjTX,IAAI,WA2NH,IAsFe,IAAG,MAAO;EACvB,eAAA;;AAlTH,IAAI,WA2NH,IA0FC,IAAG,MAAO;EACT,gBAAA;EACA,kCAAA;EACA,aDvTS,oBAAoB,8CCuT7B;EACA,WAAA;;AAzTH,IAAI,WA2NH,IAiGC,EAAC,MAAM;AA5TT,IAAI,WA2NH,IAiGe,KAAI,WAAW,KAAM;EAClC,cAAA;;AA7TH,IAAI,WAiUH,IAAG,MAAO;EACT,aAAA;;AAlUF,IAAI,WAqUH,IAAG;EACF,iBAAA;;AAtUF,IAAI,WAyUH,IAAG,OAAQ,IAAG,MAAO;EACpB,YAAA;;AA1UF,IAAI,WA6UH,IAAG,OAAQ,IAAG,MAAO;EACpB,cAAA;;;AA9UF,IAAI,WAkVH,IAAG;EACF,mBAAA;;AAnVF,IAAI,WAsVH,IAAG;AAtVJ,IAAI,WAuVH,IAAG;EACF,YAAA;EACA,mBAAA;;AAzVF,IAAI,WAsVH,IAAG,OAKF;AA3VF,IAAI,WAuVH,IAAG,SAIF;AA3VF,IAAI,WAsVH,IAAG,OAMF,MAAM;AA5VR,IAAI,WAuVH,IAAG,SAKF,MAAM;AA5VR,IAAI,WAsVH,IAAG,OAOF,YAAY,EAAC;AA7Vf,IAAI,WAuVH,IAAG,SAMF,YAAY,EAAC;AA7Vf,IAAI,WAsVH,IAAG,OAQF;AA9VF,IAAI,WAuVH,IAAG,SAOF;EACC,YAAA;;AA/VH,IAAI,WAmWH,IAAG;EACF,cAAA;;AApWF,IAAI,WAuWH,gBAAgB;AAvWjB,IAAI,WAwWH,iBAAiB;AAxWlB,IAAI,WAyWH,kBAAkB;EACjB,uBAAA;EACA,WAAA;EACA,kBAAA;EACA,sBAAA;EACA,sBAAA;;AA9WF,IAAI,WAiXH,gBAAgB;AAjXjB,IAAI,WAkXH,iBAAiB;AAlXlB,IAAI,WAmXH,kBAAkB;EACjB,cAAA;EACA,sBAAA;;AArXF,IAAI,WAwXH,gBAAgB;AAxXjB,IAAI,WAyXH,iBAAiB;AAzXlB,IAAI,WA0XH,kBAAkB;EACjB,uBAAA;EACA,aAAA;EACA,WAAA;EACA,sBAAA;EACA,eAAA;EACA,sBAAA;EACA,gBAAA;EACA,cAAA;EACA,cAAA;EACA,cAAA;;AApYF,IAAI,WAuYH,IAAG;EACF,WAAA;EACA,YAAA;;AAzYF,IAAI,WA4YH,KAAI;EACH,WAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;;AAhZF,IAAI,WAmZH;EACC,qBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;;AA5ZF,IAAI,WA+ZH,EAAC;AA/ZF,IAAI,WA+ZW,EAAC;EACd,eAAA;EACA,WAAA;;AAjaF,IAAI,WAoaH,IAAG;EACF,sBAAA;EACA,uBAAA;EACA,YAAA;;AAvaF,IAAI,WA0aH,GAAE;EACD,aAAA;EACA,WAAA;EACA,cAAA;EACA,6BAAA;EACA,kBAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qBAAA;EACA,YAAA;;AApbF,IAAI,WA0aH,GAAE,eAYD;EACC,aAAA;EACA,mBAAA;;AAxbH,IAAI,WA0aH,GAAE,eAYD,GAIC;EACC,WAAA;;AA3bJ,IAAI,WAicH,gBAAgB,KAAI;EACnB,cAAA;;AAlcF,IAAI,WAqcH,GAAE;EACD,qBAAA;EACA,WAAA;EACA,YAAA;;AAxcF,IAAI,WAqcH,GAAE,QAKD;EACC,WAAA;EACA,YAAA;;AA5cH,IAAI,WAgdH;EACC,iBAAA;;AAjdF,IAAI,WAodH;EACC,gBAAA;EACA,OAAA;EACA,MAAA;EACA,YAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;;AA3dF,IAAI,WA8dH;EACC,iBAAA;EACA,WAAA;;AAheF,IAAI,WAmeH,IAAG;EACF,YAAA;EACA,kBAAA;EACA,iBAAA;;AAteF,IAAI,WAyeH,IAAG;EACF,gBAAA;EACA,kBAAA;EACA,wBAAA;EACA,eAAA;EACA,sBAAA;EACA,wBAAA;;AA/eF,IAAI,WAkfH,IAAG,gBAAgB,KAClB;EACC,iBAAA;EACA,mBAAA;;AArfH,IAAI,WAkfH,IAAG,gBAAgB,KAMlB,IAAI;EACH,aAAA;;AAzfH,IAAI,WA6fH,aAEC;AA/fF,IAAI,WA6fH,aAGC;AAhgBF,IAAI,WA6fH,aAGU;EACR,eAAA;EACA,gBAAA;EACA,WAAA;EACA,aDpgBa,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CCogBpG;;AApgBH,IAAI,WA6fH,aAUC;AAvgBF,IAAI,WA6fH,aAWC;EACC,iBAAA;;AAzgBH,IAAI,WA6fH,aAeC,OAAM,WAAY;AA5gBpB,IAAI,WA6fH,aAgBC,aAAa;EACZ,cAAA;;AA9gBH,IAAI,WA6fH,aAoBC,QAAO;EACN,SAAA;;AAlhBH,IAAI,WA6fH,aAwBC,QAGC,SACC;AAzhBJ,IAAI,WA6fH,aAyBC,IAAG,WAEF,SACC;AAzhBJ,IAAI,WA6fH,aAyBiB,IAAG,aAElB,SACC;EACC,iBAAA;EACA,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,iBAAA;;AA9hBL,IAAI,WA6fH,aAwBC,QAGC,SASC,QAAO;AAjiBX,IAAI,WA6fH,aAyBC,IAAG,WAEF,SASC,QAAO;AAjiBX,IAAI,WA6fH,aAyBiB,IAAG,aAElB,SASC,QAAO;EACN,mBAAA;EACA,eAAA;;AAniBL,IAAI,WA6fH,aAwBC,QAGC,SAcC,QAAO;AAtiBX,IAAI,WA6fH,aAyBC,IAAG,WAEF,SAcC,QAAO;AAtiBX,IAAI,WA6fH,aAyBiB,IAAG,aAElB,SAcC,QAAO;EACN,eAAA;;AAviBL,IAAI,WA6fH,aAwBC,QAsBC;AA3iBH,IAAI,WA6fH,aAyBC,IAAG,WAqBF;AA3iBH,IAAI,WA6fH,aAyBiB,IAAG,aAqBlB;EACC,iBAAA;EACA,gBAAA;;AA7iBJ,IAAI,WA6fH,aAwBC,QA2BC,SAAQ;AAhjBX,IAAI,WA6fH,aAyBC,IAAG,WA0BF,SAAQ;AAhjBX,IAAI,WA6fH,aAyBiB,IAAG,aA0BlB,SAAQ;EACP,gBAAA;;AAjjBJ,IAAI,WA6fH,aAwBC,QA+BC,SAAQ;AApjBX,IAAI,WA6fH,aAyBC,IAAG,WA8BF,SAAQ;AApjBX,IAAI,WA6fH,aAyBiB,IAAG,aA8BlB,SAAQ;EACP,iBAAA;;AArjBJ,IAAI,WA6fH,aA4DC;AAzjBF,IAAI,WA6fH,aA6DC;EACC,eAAA;EACA,iBAAA;;AA5jBH,IAAI,WA6fH,aAkEC,OAAM;EACL,kBAAA;;AAhkBH,IAAI,WAokBH,EAAC;EACA,cAAA;;AArkBF,IAAI,WAwkBH,IAAG;EACF,kBAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;EACA,iBAAA;EACA,sBAAA;EACA,yBAAA;EACA,wBAAA;EACA,UAAA;;AAllBF,IAAI,WAqlBH;EACC,sBAAA;EACA,YAAA;EACA,WAAA;;AAxlBF,IAAI,WA2lBH,cACC;EACC,eAAA;EACA,YAAA;;AA9lBH,IAAI,WA2lBH,cAMC;EACC,gBAAA;;AAlmBH,IAAI,WA2lBH,cAUC,gBACC;EACC,UAAA;;AAvmBJ,IAAI,WA2lBH,cAUC,gBAKC;EACC,UAAA;EACA,aAAA;;AA5mBJ,IAAI,WA2lBH,cAUC,gBASC;EACC,kBAAA;;AA/mBJ,IAAI,WAonBH;EACC,YAAA;EACA,iBAAA;EACA,WAAA;;AAvnBF,IAAI,WA0nBH;EACC,YAAA;EACA,sBAAA;EACA,gBAAA;EACA,gBAAA;EACA,sDAAA;EACA,iCAAA;;AAhoBF,IAAI,WA0nBH,cAQC;EACC,YAAA;EACA,kBAAA;EACA,kCAAA;EACA,aDroBS,oBAAoB,8CCqoB7B;;AAtoBH,IAAI,WA0nBH,cAQC,UAMC,aAAY;EACX,gBAAA;EACA,cAAA;EACA,qBAAA;;AA3oBJ,IAAI,WA0nBH,cAQC,UAYC;EACC,iBAAA;EACA,qBAAA;EACA,cAAA;EACA,kBAAA;EACA,yBAAA;EACA,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,sBAAA;EACA,YAAA;EACA,kBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,eAAA;EACA,YAAA;;AA9pBJ,IAAI,WA0nBH,cAQC,UA+BC,eAAe;EACd,UAAA;EACA,YAAA;EACA,kBAAA;EACA,SAAA;;AArqBJ,IAAI,WA0nBH,cAQC,UAsCC,cAAc,gBAAe;EAC5B,iBAAA;;AAzqBJ,IAAI,WA0nBH,cAQC,UA0CC,cAAa,MAAO;EACnB,UAAA;;AA7qBJ,IAAI,WA0nBH,cAQC,UA8CC,eAAe;EACd,6BAAA;;AAjrBJ,IAAI,WA0nBH,cAQC,UAkDC,eAAe;EACd,gDAAA;EACA,8BAAA;EACA,gBAAA;EACA,WAAA;;AAxrBJ,IAAI,WA0nBH,cAQC,UAyDC,WAAU;EACT,iBAAA;;AA5rBJ,IAAI,WA0nBH,cAQC,UA6DC,EAAC,KAAK;EACL,WAAA;;AAhsBJ,IAAI,WA0nBH,cAQC,UAiEC,EAAC,KAAK;EACL,cAAA;;AApsBJ,IAAI,WA0nBH,cAQC,UAqEC,EAAC,KAAK;EACL,kBAAA;EACA,cAAA;EACA,eAAA;EACA,UAAA;;AA3sBJ,IAAI,WA0nBH,cAQC,UA4EC,EAAC,KAAK;EACL,cAAA;;AA/sBJ,IAAI,WA0nBH,cAQC,UAgFC,EAAC,KAAK;EACL,cAAA;;AAntBJ,IAAI,WA0nBH,cAQC,UAoFC,EAAC,KAAK;EACL,kBAAA;EACA,SAAA;EACA,iBAAA;EACA,cAAA;;AA1tBJ,IAAI,WAguBH;EACC,YAAA;EACA,WAAA;EACA,iBAAA;;AAnuBF,IAAI,WAsuBH,iBAAgB,cAAe,QAAQ;EACtC,aAAA;;AAvuBF,IAAI,WA0uBH;EACC,YAAA;EACA,gBAAA;EACA,eAAA;EACA,iCAAA;EACA,mBAAmB,aAAnB;EACA,mCAAA;;AAhvBF,IAAI,WA0uBH,iBAQC,IAAG;EACF,yBAAA;EACA,wBAAA;EACA,gBAAA;;AArvBH,IAAI,WA0uBH,iBAcC,IAAG,WAAY,EAAC;EACf,WAAA;EACA,iBAAA;;AA1vBH,IAAI,WA0uBH,iBAmBC,IAAG,WAAY;EACd,WAAA;;AA9vBH,IAAI,WA0uBH,iBAuBC,IAAG,WAAY,EAAC;EACf,cAAA;;AAlwBH,IAAI,WAswBH;EACC,aAAA;;AAvwBF,IAAI,WA0wBH;EACC,YAAA;EACA,WAAA;EACA,iBAAA;EACA,mBAAA;EACA,eAAA;;AA/wBF,IAAI,WA0wBH,eAOC;EACC,iBAAA;EACA,sBAAA;EACA,wBAAA;EACA,iBAAA;EACA,YAAA;EACA,aAAA;EACA,mBAAA;EACA,iBAAA;EACA,WAAA;EACA,eAAA;EACA,mBAAA;;AA5xBH,IAAI,WA0wBH,eAOC,SAaC;AA9xBH,IAAI,WA0wBH,eAOC,SAcC,qBAAqB;AA/xBxB,IAAI,WA0wBH,eAOC,SAeC,kBAAkB;EACjB,WAAA;;AAjyBJ,IAAI,WA0wBH,eAOC,SAmBC,EAAC;AApyBJ,IAAI,WA0wBH,eAOC,SAmBc,MAAM,EAAC;EACnB,UAAA;;AAryBJ,IAAI,WA0wBH,eAOC,SAuBC,EAAC;EACA,cAAA;;AAzyBJ,IAAI,WA0wBH,eAOC,SA2BC;EACC,kBAAA;EACA,YAAA;EACA,aAAA;;AA/yBJ,IAAI,WA0wBH,eAOC,SA2BC,mBAKC;EACC,YAAA;EACA,aAAA;EACA,mBAAA;;AApzBL,IAAI,WA0wBH,eAOC,SA2BC,mBAKC,MAKC;EACC,sBAAA;EACA,iBAAA;;AAxzBN,IAAI,WA0wBH,eAOC,SA2BC,mBAgBC;EACC,aAAA;EACA,mBAAA;;AA9zBL,IAAI,WA0wBH,eAOC,SAiDC;EACC,cAAA;EACA,kBAAA;;AAp0BJ,IAAI,WA0wBH,eAOC,SAsDC;EACC,kBAAA;EACA,iBAAA;EACA,iBAAA;EACA,cAAA;;AAGD,QAA0B;EAA1B,IA90BC,WA0wBH,eAOC,SA8DE;IACC,aAAA;;;AAh1BL,IAAI,WAs1BH;EACC,iBAAA;EACA,iBAAA;EACA,WAAA;EACA,wBAAA;EACA,WAAA;EACA,kBAAA;EACA,UAAA;EACA,QAAA;EACA,UAAA;;AA/1BF,IAAI,WAk2BH;EACC,YAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,cAAA;EACA,iCAAA;;AAx2BF,IAAI,WA22BH,IAAG;AA32BJ,IAAI,WA22BY,IAAG;EACjB,WAAA;EACA,YAAA;EACA,iBAAA;EACA,sBAAA;EACA,qBAAA;;AAh3BF,IAAI,WAm3BH;EACC,qBAAA;EACA,WAAA;EACA,eAAA;EACA,uBAAA;EACA,sBAAA;EACA,wBAAA;EACA,uBAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;;AA73BF,IAAI,WAg4BH,QAAO;EACN,cAAA;EACA,qBAAA;;AAl4BF,IAAI,WAq4BH,QAAO;EACN,gBAAA;EACA,eAAA;;AAv4BF,IAAI,WA04BH,iBAAgB,aAAc;EAC7B,YAAA;;AA34BF,IAAI,WA84BH;EACC,gBAAA;EACA,kBAAA;EACA,WAAA;EACA,eAAA;EACA,kBAAA;;AAn5BF,IAAI,WA84BH,kBAOC;AAr5BF,IAAI,WA84BH,kBAOI;EACF,WAAA;EACA,aAAA;EACA,cAAA;;AAx5BH,IAAI,WA84BH,kBAaC,EAAC;EACA,cAAA;;AA55BH,IAAI,WAg6BH,GAAE;AAh6BH,IAAI,WAg6BmB,GAAE;EACvB,iBAAA;EACA,cAAA;EACA,qBAAA;EACA,mBAAA;EACA,kBAAA;EACA,6BAAA;EACA,sBAAA;EACA,uBAAA;EACA,YAAA;EACA,gBAAA;;AA16BF,IAAI,WA66BH,GAAE,kBAAmB;AA76BtB,IAAI,WA66BsB,GAAE,kBAAmB;EAC7C,eAAA;;AA96BF,IAAI,WAi7BH,GAAE,kBAAmB,GAAG;AAj7BzB,IAAI,WAi7BqC,GAAE,kBAAmB,GAAG;EAC/D,iBAAA;;AAl7BF,IAAI,WAq7BH,GAAE,aACD;EACC,aAAA;;AAv7BH,IAAI,WAq7BH,GAAE,aAKD,GAAE;EACD,YAAA;;AA37BH,IAAI,WAq7BH,GAAE,aASD;EACC,cAAA;EACA,YAAA;;AAh8BH,IAAI,WAq7BH,GAAE,aAcD;EACC,eAAA;;AAp8BH,IAAI,WAw8BH,OAAM;EACL,cAAA;EACA,gBAAA;EACA,gBAAA;;AA38BF,IAAI,WA88BH,iBAAiB;EAChB,aAAA;EACA,YAAA;;AAh9BF,IAAI,WAm9BH,KAAI;EACH,yBAAA;EACA,cAAA;;AAr9BF,IAAI,WA49BH,iBAAiB;EAChB,iBAAA;;AA79BF,IAAI,WAg+BH;EACC,iBAAA;;AAj+BF,IAAI,WAo+BH,aAAa,IAAG;EACf,sBAAA;EACA,YAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;EACA,YAAA;EACA,WAAA;;AAIF,IAAI,WAAY,aACf,GAAE;AADH,IAAI,WAAY,aAEf,GAAE;AAFH,IAAI,WAAY,aAGf,GAAE;AAHH,IAAI,WAAY,aAIf,GAAE;EACD,eAAA;;AAIF,IAAI,WACH,EAAC;EACA,cAAA;EACA,iBAAA;EACA,yBAAA;EACA,kBAAA;;AALF,IAAI,WAQH,EAAC;EACA,YAAA;;AATF,IAAI,WAYH,cAAa,gBAAiB;EAC7B,YAAA;;AAbF,IAAI,WAgBH,eAAc,OAAQ,EAAC;AAhBxB,IAAI,WAiBH,KAAI,OAAQ,MAAM,EAAC;AAjBpB,IAAI,WAkBH,IAAG,OAAQ,MAAM,EAAC;EACjB,cAAA;;AAnBF,IAAI,WAsBH,eAAc,UAAW,EAAC;AAtB3B,IAAI,WAuBH,KAAI,UAAW,MAAM,EAAC;AAvBvB,IAAI,WAwBH,IAAG,UAAW,MAAM,EAAC;EACpB,cAAA;;AAzBF,IAAI,WA4BH,YAAY,EAAC;EACZ,cAAA;;AA7BF,IAAI,WAgCH,WAAW,EAAC;EACX,WAAA;;AAjCF,IAAI,WAoCH,eAAe,EAAC;EACf,YAAA;;AArCF,IAAI,WAwCH,EAAC;EACA,eAAA;;AAzCF,IAAI,WA4CH;EACC,sBAAA;EACA,gBAAA;EACA,YAAA;;AA/CF,IAAI,WAkDH,aAAa;EACZ,gBAAA;;AAnDF,IAAI,WAsDH;EACC,cAAA;EACA,aAAA;;AAxDF,IAAI,WA2DH,GAAE,KAAM;EACP,YAAA;;AA5DF,IAAI,WA+DH,GAAE;EACD,YAAA;;AAhEF,IAAI,WAmEH,GAAE;EACD,qBAAA;;AApEF,IAAI,WAuEH;EACC,kBAAA;;AAxEF,IAAI,WA2EH,0BACC;EACC,WAAA;;AA7EH,IAAI,WA2EH,0BAKC;EACC,iBAAA;;AAjFH,IAAI,WA2EH,0BASC;EACC,cAAA;;AAMH,IAAI,WACH;AADgB,IAAI,cACpB;EACC,0BAAA;EACA,mBAAA;;EAEA,yBAAA;EACA,yBAAA;EACA,kBAAA;;AAPF,IAAI,WACH,OAQC;AATe,IAAI,cACpB,OAQC;EACC,kBAAA;EACA,SAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;;AAdH,IAAI,WAkBH;AAlBgB,IAAI,cAkBpB;EACC,YAAA;;AAnBF,IAAI,WAsBH;AAtBgB,IAAI,cAsBpB;EACC,WAAA;;AAvBF,IAAI,WA0BH;AA1BgB,IAAI,cA0BpB;EACC,cAAA;;AA3BF,IAAI,WA8BH;AA9BgB,IAAI,cA8BpB;EACC,cAAA;;AA/BF,IAAI,WAkCH;AAlCgB,IAAI,cAkCpB;EACC,cAAA;;AAnCF,IAAI,WAsCH;AAtCgB,IAAI,cAsCpB;EACC,cAAA;;AAvCF,IAAI,WA0CH;AA1CgB,IAAI,cA0CpB;AA1CD,IAAI,WA2CH,OAAO;AA3CS,IAAI,cA2CpB,OAAO;EACN,cAAA;;AA5CF,IAAI,WA+CH,OAAO;AA/CS,IAAI,cA+CpB,OAAO;EACN,SAAA;;AAhDF,IAAI,WAmDH;AAnDgB,IAAI,cAmDpB;EACC,cAAA;EACA,yBAAA;EACA,qBAAA;;AAtDF,IAAI,WAyDH,eAAe;AAzDC,IAAI,cAyDpB,eAAe;EACd,cAAA;;AA1DF,IAAI,WA6DH;AA7DgB,IAAI,cA6DpB;AA7DD,IAAI,WA8DH;AA9DgB,IAAI,cA8DpB;EACC,cAAA;EACA,yBAAA;EACA,qBAAA;;AAjEF,IAAI,WAoEH,cAAc;AApEE,IAAI,cAoEpB,cAAc;AApEf,IAAI,WAqEH,aAAa;AArEG,IAAI,cAqEpB,aAAa;EACZ,cAAA;;AAtEF,IAAI,WAyEH;AAzEgB,IAAI,cAyEpB;EACC,cAAA;EACA,yBAAA;EACA,qBAAA;;AA5EF,IAAI,WAyEH,YAKC;AA9Ee,IAAI,cAyEpB,YAKC;EACC,cAAA;;AA/EH,IAAI,WAmFH;AAnFgB,IAAI,cAmFpB;EACC,sBAAA;EACA,wBAAA;;AArFF,IAAI,WAwFH;AAxFgB,IAAI,cAwFpB;EACC,WAAA;;AAzFF,IAAI,WA4FH;AA5FgB,IAAI,cA4FpB;EACC,eAAA;;AA7FF,IAAI,WAgGH,IAAG;AAhGa,IAAI,cAgGpB,IAAG;EACF,kBAAA;EACA,YAAA;EACA,sBAAA;EACA,sBAAA;EACA,WAAA;EACA,YAAA;;AAtGF,IAAI,WAgGH,IAAG,aAQF;AAxGe,IAAI,cAgGpB,IAAG,aAQF;EACC,qBAAA;EACA,WAAA;EACA,YAAA;;AA3GH,IAAI,WAgGH,IAAG,aAcF,GAAG,GAAE;AA9GU,IAAI,cAgGpB,IAAG,aAcF,GAAG,GAAE;EACJ,yBAAA;;AA/GH,IAAI,WAgGH,IAAG,aAkBF,GAAG;AAlHY,IAAI,cAgGpB,IAAG,aAkBF,GAAG;EACF,qBAAA;EACA,cAAA;EACA,SAAA;EACA,YAAA;EACA,eAAA;;AAMH;EACC,mBAAA;EACA,WAAA;;AAGD;EACC,UAAA;;AAGD;EACC,yBAAA;;AAGD;EACC,sBAAA;;AAGD,KAAK;EACJ,aAAA;;ACluCD,IACC,EAAC;EACA,WAAA;;AAFF,IAKC;AALD,IAKU;EACR,aAAA;EACA,mBAAA;EACA,iBAAA;;AARF,IAWC,QAAQ;AAXT,IAWc,QAAQ;AAXtB,IAYC,QAAQ,EAAC;EACR,eAAA;EACA,sBAAA;;AAdF,IAiBC;EACC,mBAAA;;AAlBF,IAiBC,QAGC;EACC,YAAA;EACA,mBAAA;;AAtBH,IAiBC,QAQC;AAzBF,IAiBC,QAQQ;EACN,aAAA;EACA,mBAAA;;AA3BH,IAiBC,QAQC,MAIC,EAAC;AA7BJ,IAiBC,QAQQ,OAIN,EAAC;EACA,gBAAA;EACA,YAAA;EACA,6BAAA;EACA,iBAAA;EACA,eAAA;;AAlCJ,IAiBC,QAqBC;EACC,YAAA;;AAvCH,IAiBC,QAyBC,KAAI;EACH,WAAA;EACA,mBAAA;EACA,eAAA;EACA,mBAAA;;AA9CH,IAiBC,QAgCC;EACC,eAAA;;AAlDH,IAsDC;EACC,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;;AA5DF,IAsDC,QAQC;EACC,YAAA;;AA/DH,IAmEC;EACC,gBAAA;EACA,iBAAA;;AArEF,IAwEC;EACC,YAAA;EACA,gBAAA;EACA,eAAA;;AA3EF,IA8EC,cAAc;AA9Ef,IA+EC,cAAc;AA/Ef,IAgFC,eAAe;AAhFhB,IAiFC,eAAe;EACd,iBAAA;EACA,cAAA;EACA,YAAA;;AAIF,IAAI;;;;AAAJ,IAAI,SAIH;AAJD,IAAI,SAIQ;EACV,aAAA;;AALF,IAAI,SAQH;EACC,mBAAA;;AATF,IAAI,SAYH;EACC,sBAAA;EACA,wBAAA;;AAdF,IAAI,SAiBH;EACC,eAAA;EACA,kBAAA;;AAKF,GAAG,IAAI,SAAU,IAAG;EACnB,mCAAA;;AAGD,GAAG,IAAI,SAAU,IAAG,OAAQ,EAAC;EAC5B,eAAA;EACA,WAAA;EACA,gBAAA;EACA,uCAAA;EACA,kCAAA;EACA,aF1He,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CE0HtG;;AAGD,GAAG,IAAI,SAAS;EACf,iBAAA;;AAGD,GAAG,IAAI,SAAS,OAAQ,IAAG,OAAQ,EAAC;EACnC,cAAA;;AAGD,GAAG,IAAI,SAAS,OAAQ,IAAG,OAAQ,EAAC;EACnC,YAAA;;AAGD,GAAG,IAAI,SAAU,IAAG;EACnB,WAAA;;AAGD,GAAG,IAAI,SAAS,OAAQ,IAAG;EAC1B,YAAA;;AAGD,GAAG,IAAI,OAAQ,IAAG;EACjB,YAAA;;AAGD,GAAG,IAAI,MAAO;EACb,aAAA;;AAGD,IACC,IAAG;EACF,yBAAA;EACA,wBAAA;EACA,wBAAA;;AAJF,IAOC,IAAG,WAAY,EAAC;EACf,WAAA;EACA,iBAAA;;AATF,IAYC,IAAG,WAAY;EACd,WAAA;;AAbF,IAgBC,IAAG,WAAY,EAAC;EACf,cAAA;;AAjBF,IAoBC,IAAG,OAAQ,KAAI;EACd,YAAA;EACA,mBAAA;EACA,kBAAA;;AAvBF,IA0BC,IAAG,OAAQ,IAAG;AA1Bf,IA0BsB,IAAG,OAAQ,IAAG,KAAM;EACxC,sBAAA;EACA,WAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;;AA/BF,IAkCC,IAAG,cAAe;;EAEjB,qBAAA;EACA,kBAAA;EACA,aAAA;;AAtCF,IAyCC,IAAG,cAAe;EACjB,cAAA;EACA,cAAA;;AA3CF,IA8CC,IAAG,OAAQ,KAAI;EACd,mBAAA;EACA,WAAA;EACA,eAAA;EACA,mBAAA;;AAlDF,IAqDC,MAAM;EACL,kBAAA;EACA,qBAAA;EACA,wBAAA;;AAIF,KAAK,IAAI,aAAc,IAAG,cACzB;EACC,aAAA;;AAIF,GAAG;EACF,kBAAA;EACA,UAAA;EACA,QAAA;EACA,UAAA;EACA,SAAA;EACA,sBAAA;EACA,wBAAA;EACA,iBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,iBAAA;EACA,+CAAA;EACA,mBAAA;;AAdD,GAAG,cAgBF;EACC,mBAAA;EACA,YAAA;;AAlBF,GAAG,cAqBF;AArBD,GAAG,cAqBK;EACN,aAAA;EACA,mBAAA;;AAvBF,GAAG,cAqBF,MAIC,EAAC;AAzBH,GAAG,cAqBK,OAIN,EAAC;EACA,gBAAA;EACA,eAAA;EACA,YAAA;EACA,iBAAA;;AA7BH,GAAG,cAqBF,MAWC,EAAC;AAhCH,GAAG,cAqBK,OAWN,EAAC;EACA,gBAAA;EACA,iBAAA;EACA,YAAA;EACA,WAAA;EACA,eAAA;;AArCH,GAAG,cAyCF;EACC,aAAA;;AA1CF,GAAG,cA6CF,UAAU,EAAC;EACV,cAAA;EACA,eAAA;;AA/CF,GAAG,cAkDF,KAAI;EACH,WAAA;EACA,eAAA;EACA,mBAAA;;AArDF,GAAG,cAwDF,EAAC;EACA,eAAA;EACA,WAAA;EACA,uCAAA;EACA,gBAAA;EACA,kCAAA;EACA,aFzRc,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CEyRrG;;AA9DF,GAAG,cAiEF,IAAG;EACF,mBAAA;EACA,WAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;;AAvEF,GAAG,cA0EF,IAAG,KAAM;EACR,kBAAA;EACA,qBAAA;EACA,wBAAA;;AA7EF,GAAG,cAgFF,KAAI;EACH,mBAAA;EACA,mBAAA;EACA,WAAA;EACA,eAAA;;AApFF,GAAG,cAuFF,IAAG,KAAM;EACR,WAAA;;AAxFF,GAAG,cA2FF,KAAI;EACH,WAAA;EACA,mBAAA;;AA7FF,GAAG,cAgGF,YACC;EACC,mBAAA;EACA,sBAAA;;AAnGH,GAAG,cAgGF,YAMC,EAAC;EACA,WAAA;;AAvGH,GAAG,cAgGF,YAUC,EAAC;EACA,iBAAA;EACA,WAAA;EACA,mBAAA;EACA,eAAA;EACA,mBAAA;;AA/GH,GAAG,cAgGF,YAkBC,EAAC,QAAQ;EACR,cAAA;;AAMH,GAAG,cAAc,OAAQ,EAAC;EACzB,YAAA;;AAGD,IAAI;EACH,sBAAA;EACA,sBAAA;EACA,wBAAA;;AAHD,IAAI,WAKH;EACC,aAAA;;AANF,IAAI,WASH,IAAG,OAAQ,KAAI;EACd,mBAAA;EACA,uBAAA;EACA,gBAAA;;AAZF,IAAI,WAeH;EACC,mBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;EACA,eAAA;;AAKF,IAAI,WAAW,IAAI;EAClB,iBAAA;;AAGD,IAAI,WAAW;EACd,iBAAA;;AAGD,IAAI,WAAW,SAAS,IAAI;EAC3B,mBAAA;;AADD,IAAI,WAAW,SAAS,IAAI,SAG3B;AAHD,IAAI,WAAW,SAAS,IAAI,SAI3B,QAAQ,EAAC;AAJV,IAAI,WAAW,SAAS,IAAI,SAK3B;EACC,YAAA;;AAIF,IAAI,WAAW;EACd,6BAAA;;AAGD,GAAG,IAAI,WAAW,OAAQ,IAAG,OAAQ,KAAI;EACxC,mBAAA;;AAGD,GAAG,IAAI,WAAY,IAAG,OAAQ,EAAC;EAC9B,gBAAA;EACA,WAAA;EACA,eAAA;EACA,uCAAA;EACA,kCAAA;EACA,aFjZe,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CEiZtG;;AAGD,GAAG,IAAI,WAAW,OAAQ,IAAG,OAAQ,EAAC;EACrC,YAAA;;AAGD,GAAG,IAAI,WAAW,OACjB,UAAU,EAAC;EACV,cAAA;EACA,eAAA;;AAHF,GAAG,IAAI,WAAW,OAMjB;EACC,aAAA;;AAPF,GAAG,IAAI,WAAW,OAUjB,IAAG,OAAQ,EAAC;EACX,cAAA;EACA,eAAA;EACA,gBAAA;EACA,kCAAA;EACA,aFvac,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CEuarG;;AAIF,GAAG,IAAI,WAAW,IAAI;EACrB,eAAA;;AADD,GAAG,IAAI,WAAW,IAAI,SAGrB;AAHD,GAAG,IAAI,WAAW,IAAI,SAGX;EACT,aAAA;;AC/aF,IAAI;EACH,sBAAA;EACA,aAAa,8CAAb;EACA,eAAA;;AAHD,IAAI,YAKH;AALD,IAAI,YAKC;AALL,IAAI,YAKK;AALT,IAAI,YAKS;EACX,aHNc,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CGMrG;EACA,gBAAA;EACA,WAAA;;AARF,IAAI,YAWH,kBACC,GAAE;AAZJ,IAAI,YAWH,kBAEC,GAAE;AAbJ,IAAI,YAWH,kBAGC,GAAE;EACD,eAAA;;AAfH,IAAI,YAmBH;AAnBD,IAAI,YAmBM;EACR,YAAA;EACA,eAAA;;AArBF,IAAI,YAwBH;EACC,YAAA;;AAzBF,IAAI,YA4BH;EACC,aAAA;;AA7BF,IAAI,YAgCH;EACC,sBAAA;EACA,eAAA;EACA,WAAA;EACA,kBAAA;;AApCF,IAAI,YAuCH,QAAQ;EACP,sBAAA;EACA,eAAA;;AAzCF,IAAI,YA4CH,WAAU,WAAY;AA5CvB,IAAI,YA6CH,WAAU,UAAW;AA7CtB,IAAI,YA8CH,WAAU,WAAY;EACrB,aAAA;;AA/CF,IAAI,YAkDH,qBAAqB,EAAC;EACrB,SAAA;EACA,kBAAA;;AApDF,IAAI,YAuDH,6BAA6B,EAAC;EAC7B,YAAA;;AAxDF,IAAI,YA2DH,aAAa,oBAAoB;EAChC,YAAA;;AA5DF,IAAI,YA+DH,IAAG;AA/DJ,IAAI,YA+DkB,IAAG;AA/DzB,IAAI,YA+DyC,IAAG;EAC9C,kBAAA;EACA,YAAA;EACA,WAAA;;AAlEF,IAAI,YAqEH,IAAG,gBAAiB;AArErB,IAAI,YAqEsB,IAAG,kBAAmB;AArEhD,IAAI,YAqEiD,IAAG;EACtD,iBAAA;;AAtEF,IAAI,YAyEH;EACC,UAAA;;AA1EF,IAAI,YA6EH;EACC,aAAA;EACA,YAAA;;AA/EF,IAAI,YAkFH,SAAQ;EACP,gBAAA;;AAnFF,IAAI,YAkFH,SAAQ,MAGP,MAAK;EACJ,gBAAA;;AAtFH,IAAI,YAkFH,SAAQ,MAOP;EACC,qBAAA;EACA,iBAAA;;AA3FH,IAAI,YA+FH,SAAQ,OACP,MAAK;EACJ,YAAA;EACA,mBAAA;EACA,qBAAA;;AAnGH,IAAI,YA+FH,SAAQ,OACP,MAAK,YAKJ;EACC,kBAAA;;AAtGJ,IAAI,YA2GH,MAAK,aAAc,GAAE,OAAQ;EAC5B,eAAA;;AA5GF,IAAI,YA+GH,MAAK,aAAc,GAAE,OAAQ,GAAE;EAC9B,kBAAA;EACA,iBAAA;EACA,mBAAA;;AAlHF,IAAI,YAqHH,MAAK,aAAc,GAAE;AArHtB,IAAI,YAqH6B,MAAK,aAAc,GAAE;AArHtD,IAAI,YAqH0D,MAAK,aAAc,GAAE;EACjF,WAAA;;AAtHF,IAAI,YAyHH;EACC,qBAAA;EACA,eAAA;;AA3HF,IAAI,YA8HH,SACC;EACC,yBAAA;;AAhIH,IAAI,YA8HH,SAKC,GAAE;AAnIJ,IAAI,YA8HH,SAKO,GAAE;EACP,sBAAA;;AApIH,IAAI,YA8HH,SASC,GAAE;EACD,iBAAA;;AAxIH,IAAI,YA8HH,SAaC,GAAE;EACD,sBAAA;EACA,qBAAA;;AAKH,IAAI,YAEH;AADD,IAAI,cACH;EACC,iBAAA;EACA,gBAAA;;AAJF,IAAI,YAOH,SAAQ;AANT,IAAI,cAMH,SAAQ;EACP,gBAAA;;AARF,IAAI,YAWH,SAAQ;AAVT,IAAI,cAUH,SAAQ;EACP,iBAAA;;AAZF,IAAI,YAeH,SAAS,QAAO;AAdjB,IAAI,cAcH,SAAS,QAAO;EACf,gBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;EACA,iBAAA;;AApBF,IAAI,YAuBH,SAAS,QAAO;AAtBjB,IAAI,cAsBH,SAAS,QAAO;EACf,eAAA;EACA,mBAAA;;AC3KF,IAAI,cAAc;EACjB,gBAAA;;AAGD,IAAI;EACH,gBAAA;EACA,WAAA;EACA,aAAa,8CAAb;EACA,eAAA;EACA,WAAA;;AALD,IAAI,cAOH;EACC,iBAAA;EACA,sBAAA;EACA,aAAA;EACA,+CAAA;;AAXF,IAAI,cAOH,SAMC,GAAE;EACD,aAAA;;AAdH,IAAI,cAOH,SAUC;AAjBF,IAAI,cAOH,SAUK;AAjBN,IAAI,cAOH,SAUS;EACP,cAAA;EACA,aJvBa,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CIuBpG;;AAnBH,IAAI,cAOH,SAeC;EACC,eAAA;;AAvBH,IAAI,cAOH,SAmBC;EACC,eAAA;;AA3BH,IAAI,cA+BH;EACC,cAAA;EACA,qBAAA;;AAjCF,IAAI,cAoCH,EAAC;AApCF,IAAI,cAqCH,EAAC;EACA,cAAA;EACA,0BAAA;;AAvCF,IAAI,cA0CH;EACC,WAAA;EACA,aJhDc,qBAAqB,qBAAqB,yBAAyB,oBAAoB,8CIgDrG;EACA,eAAA;EACA,kBAAA;;AA9CF,IAAI,cAiDH;EACC,kBAAA;EACA,iBAAA;;AAnDF,IAAI,cAiDH,QAIC;EACC,WAAA;;AAtDH,IAAI,cAiDH,QAQC,EAAC;EACA,cAAA;;AA1DH,IAAI,cA8DH;EACC,SAAA;;AAIF,IAAI,cAAc,IACjB,SACC,SAAS;EACR,eAAA;;AAKH,IAAI,cAAc;EACjB,SAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;;AARD,IAAI,cAAc,YAUjB;EACC,gBAAA;EACA,iBAAA;EACA,kBAAA;;AAbF,IAAI,cAAc,YAUjB,WAKC;EACC,aAAA;;AAKH,IAAI,cAAc;AAClB,IAAI,cAAc;EACjB,WAAA;;AAGD,IAAI,cAAc;EACjB,SAAA;EACA,UAAA;EACA,iBAAA;;AAHD,IAAI,cAAc,YAKjB;EACC,aAAA;EACA,eAAA;EACA,gBAAA;;ACjHF,KAEC;EACC,YAAA;;AAHF,KAMC,UACC,kBAAkB;EACjB,wBAAA;;AARH,KAYC,aAAa,EAAC;EACb,kBAAA;EACA,SAAA;;AAdF,KAiBC,UAAU,IAAG;EACZ,kBAAA;EACA,SAAA;;AAnBF,KAsBC,mBAAmB,KAAI;EACtB,YAAA;;AAvBF,KA0BC,YAAY,aAAa,GAAE;AA1B5B,KA2BC,mBAAmB,KAAI,WAAW;EACjC,UAAA;;AA5BF,KA+BC;EACC,eAAA;EACA,YAAA;;AAjCF,KAoCC;EACC,0CAAA;;AArCF,KAwCC,eAAc;EACb,yBAAA;EACA,qBAAA;;AA1CF,KA6CC,WAAW,eAAe;EACzB,gBAAA;EACA,eAAA;;AA/CF,KAkDC,WAAW,eAAc,cAAc,IAAI,wBAAyB;EACnE,cAAA;;AAnDF,KAsDC,WAAW,eAAe;EACzB,YAAA;;AAvDF,KA0DC;EACC,WAAA;;AA3DF,KA8DC,eAAc;EACb,aAAa,WAAb;EACA,SAAS,OAAT;EACA,YAAA;;AAjEF,KAoEC,UAEC,EAAC;AAtEH,KAqEC,8BAA6B,IAAI,gBAChC,EAAC;EACA,cAAA;;AAvEH,KA2EC,WACC;AA5EF,KA2EC,WAEC;EACC,aAAA;;AA9EH,KA2EC,WAMC,sBACC,aAAa;EACZ,YAAA;;AAnFJ,KA2EC,WAMC,sBAKC;EACC,cAAA;;AAvFJ,KA2EC,WAgBC,eAAe,cAAa;EAC3B,YAAA;;AA5FH,KA2EC,WAoBC,cAAc;EACb,kBAAA;EACA,SAAA;;AAjGH,KA2EC,WAyBC;EACC,YAAA;EACA,kBAAA;;AAtGH,KA2EC,WA8BC,cAAa;EACZ,YAAA;;AA1GH,KA2EC,WA8BC,cAAa,eAGZ;EACC,QAAS,YAAT;;AA7GJ,KA2EC,WAsCC;EACC,YAAA;;AAlHH,KA2EC,WA0CC;EACC,eAAA;EACA,mBAAA;EACA,mBAAA;EACA,iBAAA;;AAzHH,KA2EC,WA0CC,aAMC;EACC,YAAA;;AA5HJ,KA2EC,WAqDC;EACC,eAAA;;AAjIH,KA2EC,WAyDC;EACC,gBAAA;EACA,uBAAA;;AAtIH,KA2IC,MAAK;EACJ,sBAAA;EACA,YAAA;EACA,kBAAA;EACA,eAAA;EACA,kBAAA;EACA,QAAA;;AAjJF,KAoJC,MAAK,YAAY;EAChB,sBAAA;;AArJF,KAwJC,WACC,eAAe;EACd,oBAAA;EACA,iBAAA;EACA,WAAA;;AL3HH;EACE,aAAa,gBAAb;EACA,kBAAA;EACA,gBAAA;EACA,mDAAA;;EACA,KAAK,MAAM,mBACX,MAAM,2EAC2C,OAAO,0DACR,OAAO,wDACR,OAAO,WAJtD;;AAOF;EACE,aAAa,gBAAb;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;;EACA,qBAAA;EACA,cAAA;EAEA,oBAAA;EACA,sBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;EACA,sBAAA;;EAGA,mCAAA;;EAEA,kCAAA;;EAGA,kCAAA;;EAGA,uBAAuB,MAAvB;;AFpDF,IAAI,KAAK,WAAW,YACnB;AADD,IAAI,KAAK,WAAW,YACZ;EACN,gBAAA;;AAFF,IAAI,KAAK,WAAW,YAKnB,QAAQ;EACP,WAAA;;AANF,IAAI,KAAK,WAAW,YASnB,GAAE;AATH,IAAI,KAAK,WAAW,YAUnB,IAAG;EACF,cAAA;;AAIF,IAAI,KAAK;;;;;;;;;;;;;;;;;AAAT,IAAI,KAAK,WACR,IAAG;EACF,QAAS,SAAT;;AAFF,IAAI,KAAK,WAKR,EAAC;EACA,cAAA;;AANF,IAAI,KAAK,WASR;AATD,IAAI,KAAK,WASD;EACN,WAAA;EACA,gBAAA;;AAXF,IAAI,KAAK,WAcR,eAAe;EACd,gBAAA;EACA,cAAA;;AAhBF,IAAI,KAAK,WAmBR;EACC,gBAAA;EACA,wCAAA;;AArBF,IAAI,KAAK,WAmBR,cAIC,UACC,aAAY;EACX,gBAAA;EACA,WAAA;EACA,kBAAA;;AA3BJ,IAAI,KAAK,WAmBR,cAIC,UAOC;EACC,gBAAA;EACA,8BAAA;EACA,cAAA;;AAjCJ,IAAI,KAAK,WAmBR,cAIC,UAaC,sBAAsB;EACrB,iBAAA;;AArCJ,IAAI,KAAK,WA0CR;EACC,sBAAA;;AA3CF,IAAI,KAAK,WA0CR,eAGC,MAAM;EACL,cAAA;;AA9CH,IAAI,KAAK,WA0CR,eAOC,EAAC;EACA,YAAA;;AAlDH,IAAI,KAAK,WAsDR,IAAG,cAAc,OAAQ,EAAC;EACzB,cAAA;;AAvDF,IAAI,KAAK,WA0DR,iBACC,IAAG,IAAI,SAAS,IAAI,WAAW,IAAI;AA3DrC,IAAI,KAAK,WA0DR,iBAEC,KAAI,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI;EAC9C,gBAAA;;AA7DH,IAAI,KAAK,WA0DR,iBAMC,IAAG,OAAO,IAAI,SAAS,IAAI;AAhE7B,IAAI,KAAK,WA0DR,iBAOC,KAAI,WAAW,OAAO,IAAI,SAAS,IAAI;EACtC,gBAAA;;AAlEH,IAAI,KAAK,WA0DR,iBAWC,KAAI;EACH,gBAAA;;AAtEH,IAAI,KAAK,WA0DR,iBAeC,IAAG,OAAQ;AAzEb,IAAI,KAAK,WA0DR,iBAgBC,KAAI,OAAQ;EACX,cAAA;;AA3EH,IAAI,KAAK,WA0DR,iBAoBC,IAAG,OAGF;AAjFH,IAAI,KAAK,WA0DR,iBAqBC,IAAG,SAEF;AAjFH,IAAI,KAAK,WA0DR,iBAsBC,KAAI,WAAW,SACd;EACC,QAAS,SAAT;;AAlFJ,IAAI,KAAK,WA0DR,iBAoBC,IAAG,OAGF,IAGC;AApFJ,IAAI,KAAK,WA0DR,iBAqBC,IAAG,SAEF,IAGC;AApFJ,IAAI,KAAK,WA0DR,iBAsBC,KAAI,WAAW,SACd,IAGC;EACC,QAAS,SAAT;;AArFL,IAAI,KAAK,WA0DR,iBAoBC,IAAG,OAWF;AAzFH,IAAI,KAAK,WA0DR,iBAqBC,IAAG,SAUF;AAzFH,IAAI,KAAK,WA0DR,iBAsBC,KAAI,WAAW,SASd;EACC,QAAS,SAAT;;AA1FJ,IAAI,KAAK,WA0DR,iBAoCC,IAAG,SAAS,OAGX,EAAC;AAjGJ,IAAI,KAAK,WA0DR,iBAqCC,KAAI,WAAW,SAAS,OAEvB,EAAC;AAjGJ,IAAI,KAAK,WA0DR,iBAsCC,IAAG,OAAO,OACT,EAAC;EACA,QAAS,SAAT;;AAlGJ,IAAI,KAAK,WA0DR,iBA4CC,IAAG,SAAS,UAGX,EAAC;AAzGJ,IAAI,KAAK,WA0DR,iBA6CC,KAAI,WAAW,SAAS,UAEvB,EAAC;AAzGJ,IAAI,KAAK,WA0DR,iBA8CC,IAAG,OAAO,UACT,EAAC;EACA,QAAS,SAAT;;AA1GJ,IAAI,KAAK,WA0DR,iBAoDC,KAAI,SAAS,OAAQ;AA9GvB,IAAI,KAAK,WA0DR,iBAqDC,KAAI,WAAW,OAAQ;EACtB,cAAA;;AAhHH,IAAI,KAAK,WA0DR,iBAyDC,KAAI,WAAW;EACd,gBAAA;;AApHH,IAAI,KAAK,WA0DR,iBA6DC;AAvHF,IAAI,KAAK,WA0DR,iBA6DM;EACJ,WAAA;;AAxHH,IAAI,KAAK,WA0DR,iBA6DC,IAGC;AA1HH,IAAI,KAAK,WA0DR,iBA6DM,KAGJ;EACC,WAAA;;AA3HJ,IAAI,KAAK,WA0DR,iBA6DC,IAOC;AA9HH,IAAI,KAAK,WA0DR,iBA6DM,KAOJ;EACC,cAAA;;AA/HJ,IAAI,KAAK,WA0DR,iBA6DC,IAWC;AAlIH,IAAI,KAAK,WA0DR,iBA6DM,KAWJ;AAlIH,IAAI,KAAK,WA0DR,iBA6DC,IAWW;AAlIb,IAAI,KAAK,WA0DR,iBA6DM,KAWM;EACT,WAAA;;AAnIJ,IAAI,KAAK,WA0DR,iBA6DC,IAeC,MAAM;AAtIT,IAAI,KAAK,WA0DR,iBA6DM,KAeJ,MAAM;EACL,cAAA;;AAvIJ,IAAI,KAAK,WA0DR,iBAiFC,KAAK;EACJ,kBAAA;EACA,WAAA;;AA7IH,IAAI,KAAK,WA0DR,iBAsFC,MACC,EAAC;AAjJJ,IAAI,KAAK,WA0DR,iBAsFC,MAEC;EACC,YAAA;;AAnJJ,IAAI,KAAK,WAyJR,cACC,aACC;AA3JH,IAAI,KAAK,WAyJR,cACC,aACuB;EACrB,wCAAA;;AA5JJ,IAAI,KAAK,WAyJR,cAOC,aAAY,IAAI,aACf;AAjKH,IAAI,KAAK,WAyJR,cAOC,aAAY,IAAI,aACO;EACrB,sBAAA;;AAlKJ,IAAI,KAAK,WAuKR,eAAc,IAAI,eAAe;EAChC,cAAA;EACA,gBAAA;;AAzKF,IAAI,KAAK,WA4KR;EACC,cAAA;;AA7KF,IAAI,KAAK,WAgLR,sCAAsC;EACrC,YAAA;;AAjLF,IAAI,KAAK,WAoLR,aAAa;EACZ,gBAAA;;AArLF,IAAI,KAAK,WAwLR,UAAS,IAAI;EACZ,gBAAA;;AAzLF,IAAI,KAAK,WA4LR,UAAS,gBAAgB;EACxB,cAAA;;AA7LF,IAAI,KAAK,WAgMR,MAAK;EACJ,sBAAA;;AAjMF,IAAI,KAAK,WAoMR,MAAK,YAAY;EAChB,qBAAA;EACA,sBAAA;;AAtMF,IAAI,KAAK,WAyMR;EACC,cAAA;;AA1MF,IAAI,KAAK,WA6MR;EACC,WAAA;;AA9MF,IAAI,KAAK,WAiNR;EACC,sBAAA;EACA,kBAAA;;AAnNF,IAAI,KAAK,WAsNR,aAAa;EACZ,sBAAA;;AAvNF,IAAI,KAAK,WA0NR,iBAAiB;AA1NlB,IAAI,KAAK,WA2NR,gBAAgB;EACf,WAAA;EACA,qBAAA;;AA7NF,IAAI,KAAK,WAgOR;EACC,WAAA;EACA,gBAAA;;AAlOF,IAAI,KAAK,WAqOR,GAAE;AArOH,IAAI,KAAK,WAqOc,GAAE;EACvB,gBAAA;EACA,kBAAA;;AAvOF,IAAI,KAAK,WA0PR;EACC,mBAAA;EACA,qBAAA;EACA,WAAA;;AA7PF,IAAI,KAAK,WA0PR,cAKC,EAAC;EACA,WAAA;;AAhQH,IAAI,KAAK,WAoQR;EACC,UAAA;;AArQF,IAAI,KAAK,WAwQR;EACC,sBAAA;;AAzQF,IAAI,KAAK,WA4QR;EACC,sBAAA;;AA7QF,IAAI,KAAK,WAgRR;EACC,gBAAA;EACA,qBAAA","file":"night.css"} \ No newline at end of file
diff --git a/themes/night_base.less b/themes/night_base.less
index 9e664fcd9..8e6755b64 100644
--- a/themes/night_base.less
+++ b/themes/night_base.less
@@ -12,7 +12,7 @@
@default-text: #ccc;
-@fg-insensitive: darken(@default-text, 20%);
+@fg-text-muted: darken(@default-text, 20%);
@fg-light : lighten(@default-text, 10%);
body.flat.ttrss_main.ttrss_prefs {
@@ -26,7 +26,7 @@ body.flat.ttrss_main.ttrss_prefs {
td.filename,
div.prefHelp {
- color : @fg-insensitive;
+ color : @fg-text-muted;
}
}
@@ -157,7 +157,7 @@ body.flat.ttrss_main {
}
.author {
- color : @fg-insensitive;
+ color : @fg-text-muted;
}
.updated, .content {
@@ -198,12 +198,12 @@ body.flat.ttrss_main {
}
.dijitCheckBox:not(.dijitChecked)::before {
- color : @fg-insensitive;
+ color : @fg-text-muted;
background: @color-panel-bg;
}
- .insensitive {
- color : @fg-insensitive;
+ .text-muted {
+ color : @fg-text-muted;
}
.dijitAccordionInnerContainerSelected .dijitAccordionTitle {
diff --git a/themes/night_blue.css b/themes/night_blue.css
index ac5684fc7..da7fe1a7a 100644
--- a/themes/night_blue.css
+++ b/themes/night_blue.css
@@ -128,30 +128,32 @@ body.ttrss_main a:hover {
text-decoration: underline;
}
body.ttrss_main #notify.visible {
- transform: translate(0, -45px);
+ opacity: 100;
}
body.ttrss_main #notify {
- bottom: -45px;
- right: 0px;
- height: 30px;
- left: 0px;
- border-width: 1px 0px 0px 0px;
+ bottom: 20px;
+ right: 20px;
+ min-width: 200px;
+ max-width: 350px;
+ border-width: 1px;
border-style: solid;
position: fixed;
- font-size: 13px;
+ font-size: 14px;
z-index: 99;
display: flex;
+ opacity: 0;
align-items: center;
- transition: all 0.5s ease-in-out;
-}
-body.ttrss_main #notify > * {
- padding: 4px;
+ padding: 10px;
+ transition: opacity 0.2s linear;
+ box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.1);
}
body.ttrss_main #notify img {
vertical-align: middle;
}
body.ttrss_main #notify .msg {
flex-grow: 2;
+ padding: 0 10px;
+ line-height: 20px;
}
body.ttrss_main #notify .icon-close {
cursor: pointer;
@@ -180,6 +182,12 @@ body.ttrss_main .notify.notify_error i.icon-notify,
body.ttrss_main .notify.notify_error i.icon-close {
color: white;
}
+body.ttrss_main .action-chooser .action-button .dijitButtonText {
+ vertical-align: unset;
+}
+body.ttrss_main .action-chooser .action-button .dijitArrowButtonInner {
+ display: none;
+}
body.ttrss_main .hl {
border: 0px solid #222;
border-bottom-width: 1px;
@@ -189,6 +197,7 @@ body.ttrss_main .hl {
flex-wrap: nowrap;
background: #222;
align-items: center;
+ user-select: none;
}
body.ttrss_main .hl > * {
white-space: nowrap;
@@ -427,6 +436,7 @@ body.ttrss_main div#headlines-frame.wide .title {
body.ttrss_main div#headlines-frame.wide .hl .feed {
display: none;
}
+body.ttrss_main .dijitDialog header,
body.ttrss_main .dijitDialog .dlgSec,
body.ttrss_main .dijitDialog .dlgSecHoriz {
font-size: 16px;
@@ -434,12 +444,18 @@ body.ttrss_main .dijitDialog .dlgSecHoriz {
color: #ccc;
font-family: "Segoe WP Semibold", "Segoe UI Semibold", "Segoe UI Web Semibold", "Segoe UI", Ubuntu, "Helvetica Neue", Helvetica, Arial, sans-serif;
}
+body.ttrss_main .dijitDialog section,
body.ttrss_main .dijitDialog .dlgSecCont {
margin: 10px 20px;
}
+body.ttrss_main .dijitDialog header.horizontal + section,
body.ttrss_main .dijitDialog .dlgSecHoriz + .dlgSecCont {
- margin: 10px 0px;
+ margin: 10px 0;
}
+body.ttrss_main .dijitDialog section.narrow {
+ margin: 0;
+}
+body.ttrss_main .dijitDialog section fieldset > label,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label {
font-weight: bold;
@@ -448,28 +464,40 @@ body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label {
min-width: 140px;
text-align: right;
}
+body.ttrss_main .dijitDialog section fieldset > label.checkbox,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label.checkbox,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label.checkbox {
font-weight: normal;
display: inline;
}
+body.ttrss_main .dijitDialog section fieldset > label.inline,
+body.ttrss_main .dijitDialog div.dlgSecCont fieldset > label.inline,
+body.ttrss_main .dijitDialog div.dlgSecSimple fieldset > label.inline {
+ display: inline;
+}
+body.ttrss_main .dijitDialog section fieldset,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset {
border-width: 0px;
padding: 5px 0px;
}
+body.ttrss_main .dijitDialog section fieldset.narrow,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset.narrow,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset.narrow {
padding: 2px 0px;
}
+body.ttrss_main .dijitDialog section fieldset.align-right,
body.ttrss_main .dijitDialog div.dlgSecCont fieldset.align-right,
body.ttrss_main .dijitDialog div.dlgSecSimple fieldset.align-right {
text-align: right;
}
+body.ttrss_main .dijitDialog footer,
body.ttrss_main .dijitDialog .dlgButtons {
margin-top: 5px;
text-align: right;
- clear: both;
+}
+body.ttrss_main .dijitDialog footer.text-center {
+ text-align: center;
}
body.ttrss_main i.icon-label {
color: #fff7d5;
@@ -571,12 +599,8 @@ body.ttrss_main #feeds-holder #feedTree .dijitTreeNode .dijitTreeRowSelected {
background: #333;
color: #333;
}
-body.ttrss_main #feeds-holder #feedTree .icon {
- position: relative;
- top: -2px;
-}
-body.ttrss_main #feeds-holder #feedTree i.icon {
- left: -2px;
+body.ttrss_main #feeds-holder #feedTree .dijitIcon.feed-icon {
+ margin-right: 2px;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-inbox {
color: #555;
@@ -585,10 +609,10 @@ body.ttrss_main #feeds-holder #feedTree i.icon.icon-archive {
color: #c77b2e;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-star {
+ position: relative;
color: #ffc069;
font-size: 21px;
- top: -4px;
- left: -4px;
+ left: -2px;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-rss_feed {
color: #ff7c4b;
@@ -597,8 +621,9 @@ body.ttrss_main #feeds-holder #feedTree i.icon.icon-whatshot {
color: #69C671;
}
body.ttrss_main #feeds-holder #feedTree i.icon.icon-restore {
+ position: relative;
+ top: -1px;
font-weight: bold;
- left: -3px;
color: #257aa7;
}
body.ttrss_main #headlines-wrap-inner {
@@ -918,6 +943,30 @@ body.ttrss_utility .alert .close {
line-height: 20px;
cursor: pointer;
}
+body.ttrss_main .pull-right,
+body.ttrss_utility .pull-right {
+ float: right;
+}
+body.ttrss_main .pull-left,
+body.ttrss_utility .pull-left {
+ float: left;
+}
+body.ttrss_main .text-error,
+body.ttrss_utility .text-error {
+ color: #b94a48;
+}
+body.ttrss_main .text-info,
+body.ttrss_utility .text-info {
+ color: #3a87ad;
+}
+body.ttrss_main .text-success,
+body.ttrss_utility .text-success {
+ color: #468847;
+}
+body.ttrss_main .text-warning,
+body.ttrss_utility .text-warning {
+ color: #a47e3c;
+}
body.ttrss_main .alert,
body.ttrss_utility .alert,
body.ttrss_main .alert h4,
@@ -967,8 +1016,8 @@ body.ttrss_utility hr {
border: 0px solid #ccc;
border-bottom-width: 1px;
}
-body.ttrss_main .insensitive,
-body.ttrss_utility .insensitive {
+body.ttrss_main .text-muted,
+body.ttrss_utility .text-muted {
color: #ccc;
}
body.ttrss_main .small,
@@ -1322,6 +1371,9 @@ div#floatingTitle.Unread a.title {
font-weight: normal;
cursor: pointer;
}
+.cdm.expandable:not(.active) {
+ user-select: none;
+}
.cdm.expandable.Unread {
background: white;
}
@@ -1444,22 +1496,23 @@ body.ttrss_prefs .user-css-editor {
height: 300px;
width: 575px;
}
-body.ttrss_prefs fieldset.prefs-set .help-text {
- display: inline-block;
- margin-left: 10px;
+body.ttrss_prefs fieldset.prefs {
+ min-height: 30px;
}
-body.ttrss_prefs table.prefPluginsList td label,
-body.ttrss_prefs table.prefUserList td {
- cursor: pointer;
+body.ttrss_prefs fieldset.prefs label:first-of-type {
+ min-width: 300px;
}
-body.ttrss_prefs table.prefPluginsList label {
- white-space: nowrap;
+body.ttrss_prefs fieldset.prefs .help-text {
+ display: inline-block;
+ margin-left: 10px;
}
-body.ttrss_prefs table.prefPluginsList i.plugin-enabled {
- color: #69C671;
+body.ttrss_prefs fieldset.plugin label.description {
+ width: 600px;
+ margin-right: 150px;
+ display: inline-block;
}
-body.ttrss_prefs table.prefPluginsList label img {
- vertical-align: middle;
+body.ttrss_prefs fieldset.plugin label.description .dijitCheckBox {
+ margin-right: 10px;
}
body.ttrss_prefs table.prefErrorLog tr.errrow td {
font-size: 10px;
@@ -1490,6 +1543,7 @@ body.ttrss_prefs .phpinfo td.e {
}
body.ttrss_prefs .phpinfo td.v {
font-family: monospace;
+ word-break: break-all;
}
body.ttrss_prefs fieldset,
body.ttrss_utility fieldset {
@@ -1598,8 +1652,7 @@ body.ttrss_utility.ttrss_login .container .content {
padding: 40px;
}
body.ttrss_utility.installer,
-body.ttrss_utility.feed_debugger,
-body.ttrss_utility.ttrss_zoom {
+body.ttrss_utility.feed_debugger {
margin: 2em;
}
body.ttrss_utility.share_popup {
@@ -1615,6 +1668,17 @@ body.ttrss_utility.share_popup .content {
.flat li {
padding: 2px;
}
+.flat #feedTree .dijitTreeContent .dijitInline {
+ vertical-align: baseline;
+}
+.flat .dijitButton i.material-icons {
+ position: relative;
+ top: -1px;
+}
+.flat .tabLabel > i.material-icons {
+ position: relative;
+ top: -1px;
+}
.flat #filterDlg_Matches span.filterRule {
color: green;
}
@@ -1909,7 +1973,7 @@ body.flat.ttrss_main .dijitCheckBox:not(.dijitChecked)::before {
color: #999999;
background: #222;
}
-body.flat.ttrss_main .insensitive {
+body.flat.ttrss_main .text-muted {
color: #999999;
}
body.flat.ttrss_main .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
diff --git a/themes/night_blue.css.map b/themes/night_blue.css.map
index 938ffd935..020994944 100644
--- a/themes/night_blue.css.map
+++ b/themes/night_blue.css.map
@@ -1 +1 @@
-{"version":3,"sources":["night_base.less","night_blue.less","C:/Users/fox/Projects/tt-rss/css/defines.less","C:/Users/fox/Projects/tt-rss/css/tt-rss.less","C:/Users/fox/Projects/tt-rss/css/cdm.less","C:/Users/fox/Projects/tt-rss/css/prefs.less","C:/Users/fox/Projects/tt-rss/css/utility.less","C:/Users/fox/Projects/tt-rss/css/dijit_basic.less"],"names":[],"mappings":"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","file":"night_blue.css"} \ No newline at end of file
+{"version":3,"sources":["night_base.less","night_blue.less","C:/Users/fox/Projects/tt-rss/css/defines.less","C:/Users/fox/Projects/tt-rss/css/tt-rss.less","C:/Users/fox/Projects/tt-rss/css/cdm.less","C:/Users/fox/Projects/tt-rss/css/prefs.less","C:/Users/fox/Projects/tt-rss/css/utility.less","C:/Users/fox/Projects/tt-rss/css/dijit_basic.less"],"names":[],"mappings":"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","file":"night_blue.css"} \ No newline at end of file
diff --git a/update.php b/update.php
index 434162a1b..3817c7e26 100755
--- a/update.php
+++ b/update.php
@@ -22,9 +22,9 @@
init_plugins();
$longopts = array("feeds",
- "feedbrowser",
"daemon",
"daemon-loop",
+ "send-digests",
"task:",
"cleanup-tags",
"quiet",
@@ -56,7 +56,9 @@
}
if (count($options) == 0 && !defined('STDIN')) {
- ?> <html>
+ ?>
+ <!DOCTYPE html>
+ <html>
<head>
<title>Tiny Tiny RSS data update script.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -76,7 +78,6 @@
print "Tiny Tiny RSS data update script.\n\n";
print "Options:\n";
print " --feeds - update feeds\n";
- print " --feedbrowser - update feedbrowser\n";
print " --daemon - start single-process update daemon\n";
print " --task N - create lockfile using this task id\n";
print " --cleanup-tags - perform tags table maintenance\n";
@@ -87,6 +88,7 @@
print " --update-schema - update database schema\n";
print " --gen-search-idx - generate basic PostgreSQL fulltext search index\n";
print " --convert-filters - convert type1 filters to type2\n";
+ print " --send-digests - send pending email digests\n";
print " --force-update - force update of all feeds\n";
print " --list-plugins - list all available plugins\n";
print " --debug-feed N - perform debug update of feed N\n";
@@ -111,7 +113,7 @@
$schema_version = get_schema_version();
if ($schema_version != SCHEMA_VERSION) {
- die("Schema version is wrong, please upgrade the database.\n");
+ die("Schema version is wrong, please upgrade the database (--update-schema).\n");
}
}
@@ -179,11 +181,6 @@
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op);
}
- if (isset($options["feedbrowser"])) {
- $count = RSSUtils::update_feedbrowser_cache();
- print "Finished, $count feeds processed.\n";
- }
-
if (isset($options["daemon"])) {
while (true) {
$quiet = (isset($options["quiet"])) ? "--quiet" : "";
@@ -325,30 +322,41 @@
}
if (isset($options["update-schema"])) {
- Debug::log("checking for updates (" . DB_TYPE . ")...");
+ Debug::log("Checking for updates (" . DB_TYPE . ")...");
$updater = new DbUpdater(Db::pdo(), DB_TYPE, SCHEMA_VERSION);
if ($updater->isUpdateRequired()) {
- Debug::log("schema update required, version " . $updater->getSchemaVersion() . " to " . SCHEMA_VERSION);
- Debug::log("WARNING: please backup your database before continuing.");
+ Debug::log("Schema update required, version " . $updater->getSchemaVersion() . " to " . SCHEMA_VERSION);
+
+ if (DB_TYPE == "mysql")
+ Debug::Log("READ THIS: Due to MySQL limitations, your database is not completely protected while updating.\n".
+ "Errors may put it in an inconsistent state requiring manual rollback.\nBACKUP YOUR DATABASE BEFORE CONTINUING.");
+ else
+ Debug::log("WARNING: please backup your database before continuing.");
+
Debug::log("Type 'yes' to continue.");
if (read_stdin() != 'yes')
exit;
+ Debug::log("Performing updates to version " . SCHEMA_VERSION);
+
for ($i = $updater->getSchemaVersion() + 1; $i <= SCHEMA_VERSION; $i++) {
- Debug::log("performing update up to version $i...");
+ Debug::log("* Updating to version $i...");
$result = $updater->performUpdateTo($i, false);
- Debug::log($result ? "OK!" : "FAILED!");
-
- if (!$result) return;
+ if ($result) {
+ Debug::log("* Completed.");
+ } else {
+ Debug::log("One of the updates failed. Either retry the process or perform updates manually.");
+ return;
+ }
}
} else {
- Debug::log("update not required.");
+ Debug::log("Update not required.");
}
}
@@ -426,6 +434,10 @@
exit($rc);
}
+ if (isset($options["send-digests"])) {
+ Digest::send_headlines_digests();
+ }
+
PluginHost::getInstance()->run_commands($options);
if (file_exists(LOCK_DIRECTORY . "/$lock_filename"))