diff options
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 .= " "; - $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\"> ".__('Hide from Popular feeds')."</label>"; - - print " "; $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\"> ".__('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'> ".__('Include in e-mail digest')."</label>"; print " "; $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\"> ".__('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'> ".__('Always display image attachments')."</label>"; print " "; $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\"> ". __('Do not embed media')."</label>"; + print "<label class='checkbox'><input disabled='1' type='checkbox' id='hide_images' + name='hide_images' dojoType='dijit.form.CheckBox'> ". __('Do not embed media')."</label>"; print " "; $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\"> ".__('Cache media')."</label>"; + print "<label class='checkbox'><input disabled='1' type='checkbox' id='cache_images' + name='cache_images' dojoType='dijit.form.CheckBox'> ".__('Cache media')."</label>"; print " "; $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\"> ".__('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'> ".__('Mark updated articles as unread')."</label>"; print " "; $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 " "; // 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%\"> </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 " — <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%\"> </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 " — <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%\"> </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%'> </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":"QAGQ;ACaR,IAAI;AACJ,IAAI;AACJ;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,UAAA;EACA,SAAA;;ACxBF,IAAI;EACH,iBAAA;EACA,YAAA;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,mBAAA;;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,mBAAA;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,mBAAA;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,YAAA;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,iBAAA;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,uBAAA;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,mBAAA;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,mBAAA;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,iBAAA;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,iBAAA;;AA73BF,IAAI,WAg4BH,QAAO;EACN,cAAA;EACA,qBAAA;;AAl4BF,IAAI,WAq4BH,QAAO;EACN,mBAAA;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,uBAAA;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,mBAAA;EACA,YAAA;;AA/CF,IAAI,WAkDH,aAAa;EACZ,iBAAA;;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,uBAAA;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,YAAA;;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,yBAAA;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,yBAAA;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,yBAAA;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,mBAAA;EACA,YAAA;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,yBAAA;;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;;AMrEF,KAEC,aAAa;EACZ,mBAAA;;AAHF,KAMC,UAAS,IAAI;EACZ,mBAAA;;AAPF,KAUC;EACC,gBAAA;;ACXF,IAAI;EACH,gBAAA;EACA,gBAAA;;AAFD,IAAI,WAIH,IAAG;EACF,sBAAA;EACA,iBAAA;EACA,+CAAA;;AAPF,IAAI,WAIH,IAAG,KAKF;EACC,aAAA;;AAVH,IAAI,WAIH,IAAG,KASF,IAAG;EACF,oBAAA;EACA,sBAAA;EACA,wBAAA;EACA,iBAAA;EACA,eAAA;EACA,WAAA;;AAnBH,IAAI,WAIH,IAAG,KASF,IAAG,OAQF;EACC,aAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,8BAAA;;AA1BJ,IAAI,WAIH,IAAG,KA0BF;EACC,qBAAA;EACA,kBAAA;EACA,aAAA;;AAjCH,IAAI,WAIH,IAAG,KAgCF,IAAG;EACF,eAAA;EACA,gBAAA;EACA,eAAA;EACA,UAAA;;AAxCH,IAAI,WAIH,IAAG,KAgCF,IAAG,QAMF;AA1CH,IAAI,WAIH,IAAG,KAgCF,IAAG,QAMG;EACJ,gBAAA;EACA,YAAA;;AA5CJ,IAAI,WAIH,IAAG,KAgCF,IAAG,QAWF;EACC,uBAAA;EACA,WAAA;EACA,kBAAA;EACA,sBAAA;EACA,sBAAA;;AApDJ,IAAI,WAIH,IAAG,KAgCF,IAAG,QAmBF;EACC,cAAA;EACA,sBAAA;EACA,eAAA;;AA1DJ,IAAI,WAIH,IAAG,KAgCF,IAAG,QAyBF;EACC,uBAAA;EACA,aAAA;EACA,WAAA;EACA,sBAAA;EACA,eAAA;EACA,sBAAA;EACA,mBAAA;EACA,cAAA;EACA,cAAA;EACA,cAAA","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". - " <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 = " <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; } @@ -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 " <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> ".__('Inline article content')."</label>"; + print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='af_readability_enabled' + name='af_readability_enabled' $checked> ".__('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 " <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 " <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\"> + 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'> </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 @@ -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 } ?> © 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> — <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":"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","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")) |