aboutsummaryrefslogtreecommitdiff
path: root/app/views/index/normal.phtml
AgeCommit message (Collapse)Author
2026-01-04Allow styling entries by category in User CSS (#8397)Gravatar Inverle
* Allow styling entries by category in User CSS Since we have `data-feed`, it is useful to have `data-category` too. Example of usage to hide titles in all entries that belong to a specific category ID: ```css [data-category="6"] { .title { display: none !important } .summary { position: relative; bottom: 2rem; } } ``` * Add `data-link` to entries in `reader.phtml`
2025-12-13New links in transitions and jump to next transition (#8294)Gravatar Alexandre Alapetite
Easier to explain graphically: <img width="408" height="266" alt="image" src="https://github.com/user-attachments/assets/0e3724a1-155b-4a87-89b3-cfe8a18cb100" /> The jump to next section ⏭ works when the sorting criterion is a date. Need https://github.com/FreshRSS/FreshRSS/pull/8293
2025-12-08Minor refactor `<img class="icon">` -> `_i('...')` (#8297)Gravatar Inverle
2025-12-08Keep scroll state of page when closing the slider (#8295)Gravatar Inverle
2025-11-04Better transitions between groups of articles (#8174)Gravatar Alexandre Alapetite
fix https://github.com/FreshRSS/FreshRSS/issues/7520 fix https://github.com/FreshRSS/FreshRSS/issues/8168 fix https://github.com/FreshRSS/FreshRSS/discussions/8172
2025-10-02Add a new hook in the UI (#8054)Gravatar Alexis Degrugillier
* Add a new hook in the UI The new hook allows extension to add their own tool bar to navigate between entries. For instance, if the user wants less or more buttons that what's available by default. See #7912 See #7913 * add link data to ease navigation
2025-09-30Add hook enums (#8036)Gravatar Alexis Degrugillier
- add an enum to handle hook types (enum are available since PHP 8.1) - change hook calls from string value to enum value
2025-09-10Rewrite PHP opening tags (#7939)Gravatar Alexis Degrugillier
This allows to remove the use of `echo` and be consistent through out the file. Some empty PHP tags where removed as well.
2025-02-03Shortcuts for adding labels (#7274)Gravatar maTh
* add shortcut in config * open my labels menu with shortcut * the first 9 items are selectable + input field * i18n * Update app/i18n/nl/conf.php Co-authored-by: Frans de Jonge <fransdejonge@gmail.com> * index.menu.mylabels * order fixed --------- Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
2025-01-06Implement custom order-by (#7149)Gravatar Alexandre Alapetite
Add option to sort results by received date (existing, default), publication date, title, URL (link), random. fix https://github.com/FreshRSS/FreshRSS/issues/1771 fix https://github.com/FreshRSS/FreshRSS/issues/2083 fix https://github.com/FreshRSS/FreshRSS/issues/2119 fix https://github.com/FreshRSS/FreshRSS/issues/2596 fix https://github.com/FreshRSS/FreshRSS/issues/3204 fix https://github.com/FreshRSS/FreshRSS/issues/4405 fix https://github.com/FreshRSS/FreshRSS/issues/5529 fix https://github.com/FreshRSS/FreshRSS/issues/5864 fix https://github.com/FreshRSS/Extensions/issues/161 URL parameters: * `&sort=id` (current behaviour, sorting according to newest received articles) * `&sort=date` (publication date, which is not indicative of how new an article is) * `&sort=title` * `&sort=link` * `&sort=rand` (random order - which disables infinite scrolling, at least for now) combined with `&order=ASC` or `&order=DESC` ![image](https://github.com/user-attachments/assets/2de5aef1-604e-4a73-a147-569f6f42a1be) ## Implementation notes The sorting criteria by *received date* (id), which is the default, and which was the only one before this PR, is the one that has the best sorting characteristics: * *uniqueness*: no entries have the exact same received date * *monotonicity*: new entries always have a higher received date * *performance*: this field is efficiently indexed in database for fast usage, including for paging (indexing could also be done to other fields, but with lower effective performance) In contrary, sorting criteria such as by *publication date*, by *title*, or by *link* are neither unique nor monotonic. In particular, multiple articles may share the same *publication date*, and we may receive articles with a *publication date* far in the future, and then later some new articles with a *publication date* far in the past. To understand why sorting by *publication date* is problematic, it helps to think about sorting by *title* or by *link*, as sorting by *title* and by *publication date* share more or less the same characteristics. ### Problem 1: new articles New articles may be received in the background after what is shown on screen, and before the next user action such as *mark all as read*. Due to the lack of *monotonicity* when sorting by e.g. *publication date* or *title*, users risk marking as read a batch of articles containing some fresh articles without seeing them. Mitigation: A parameter `idMax` tracks the maximum ID related to a batch of actions such as *mark all as read* to exclude articles received after those that are displayed. ### Problem 2: paging / pagination When navigating articles, only a few articles are displayed, and a new "page" of articles needs to be received from the database when scrolling down or when clicking the button to show more articles. When sorting by e.g. *publication date* or *title*, it is not trivial to show the next page without re-showing some of the same articles, and without skipping any. Indeed, views are often with additional criteria such as showing only unread articles, and users may mark some articles as read while viewing them, hereby removing some articles from the previous pages. And like for *Problem 1*, new articles may have been received in the background. Consequently, it is not possible to use `OFFSET` to implement pagination (so the patches suggested by a few users were wrong due to that, in particular). Mitigation: `idMax` is also used (just like for *Problem 1*) and a *Keyset Pagination* approach is used, combining an unstable sorting criterion such as *publication date* or *title*, together with *id* to ensure stable sorting. (So, 2 sorting criteria + 1 filter criteria) See e.g. https://www.alwaysdeveloping.net/dailydrop/2022/07/01-keyset-pagination/ ### Problem 3: performance Sorting by anything else than *received date* (id) is doomed to be slow(er) due to the combination of 3 criteria (see *Problem 2*). An `OFFSET` approach (which is not possible anyway as explained) would be even slower. Furthermore, we have no SQL index at the moment, but they would not necessarily help much due to the multiple sorting criteria needed and involving some `OR` logic which is difficult to optimise for databases. The nicest syntax would be using tuples and corresponding indexes, but that is poorly supported by MySQL https://bugs.mysql.com/bug.php?id=104128 Mitigation: a compatibility SQL syntax is used to implement *Keyset Pagination* ### Problem 4: user confusion Several users have shown that they do not fully understand the difference between *received date* and *publication date*, and particularly not the pitfalls of *publication date*. Mitigation: the menus to mark-as-read *before 1 day* and *before 1 week* are disabled when sorting by anything else than *received date*. Likewise, the separation headers *Today* and *Yesterday* and *Before yesterday* are only shown when sorting by *received date*. Again here, to better understand why, it helps to think about sorting by *title* or by *link*, as sorting by *title* and by *publication date* share more or less the same characteristics. * [ ] We should write a Q&A and/or documentation about the problems associated to *sorting by publication date*: risks of not noticing new publication, of inadvertently marking them as read, of having some articles with a date in the future hanging at the top of the views (vice versa when sorting in ascending order), performance, etc. ### Problem 5: APIs Sorting by anything else than *received date* breaks the guarantees needed for a successful synchronisation via API. Mitigation: sorting by *received date* is ensured for all API calls.
2024-12-26new: reader view: footer has manage icons (#7133)Gravatar maTh
* add footer * rename content thin medium large class * rework css * footer improved
2024-12-18fix: sharing menu entry id (#7113)Gravatar maTh
* fix sharing menu entry id * Update main.js
2024-12-05Rework UI authors (#7054)Gravatar Alexandre Alapetite
Add separators, and mutualise code fix https://github.com/FreshRSS/FreshRSS/issues/7032
2024-11-15New: Label menu in article row (#6984)Gravatar maTh
* configs * add the icon in the entry header line * rename comment * Update main.js * CSS * comment typo fix * fix gloabl view my labels menu * improved: my labels dropdown with triangle now. yay!
2024-10-17Use HTML5 hidden (#6910)Gravatar Alexandre Alapetite
https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute Remove remains of `aria-hidden` mostly not used anymore in our logic. fix https://github.com/FreshRSS/FreshRSS/issues/6909
2024-10-05refactor labels article menu (#6864)Gravatar maTh
* refactor labels menu with template * reduce network traffic
2024-10-01improved: 'My Labels' field be searchable (#6753)Gravatar maTh
* datalist-labels * Update main.js
2024-09-11PHPStan booleansInConditions (#6793)Gravatar Alexandre Alapetite
* PHPStan booleansInConditions * Uniformisation
2024-09-07Improved: refactor the sharing menu to use a template instead of duplicated ↵Gravatar maTh
HTML code (#6751) * <script> --> <template> * sharing menu * normal view, global view (reader view does not have a share button) * fix
2024-02-26New feature: shareable user query (#6052)Gravatar Alexandre Alapetite
* New feature: shareable user query Share the output of a user query by RSS / HTML / OPML with other people through unique URLs. Replaces the global admin token, which was the only option (but unsafe) to share RSS outputs with other people. Also add a new HTML output for people without an RSS reader. fix https://github.com/FreshRSS/FreshRSS/issues/3066#issuecomment-648977890 fix https://github.com/FreshRSS/FreshRSS/issues/3178#issuecomment-769435504 * Remove unused method * Fix token saving * Implement HTML view * Update i18n for master token * Revert i18n get_favorite * Fix missing i18n for user queries from before this PR * Remove irrelevant tests * Add link to RSS version * Fix getGet * Fix getState * Fix getSearch * Alternative getSearch * Default getOrder * Explicit default state * Fix test * Add OPML sharing * Remove many redundant SQL queries from original implementation of user queries * Fix article tags * Use default user settings * Prepare public search * Fixes * Allow user search on article tags * Implement user search * Revert filter bug * Revert wrong SQL left outer join change * Implement checkboxes * Safe check of OPML * Fix label * Remove RSS button to favour new sharing method That sharing button was using a global admin token * First version of HTTP 304 * Disallow some recusrivity fix https://github.com/FreshRSS/FreshRSS/issues/6086 * Draft of nav * Minor httpConditional * Add support for offset for pagination * Fix offset pagination * Fix explicit order ASC * Add documentation * Help links i18n * Note about deprecated master token * Typo * Doc about format
2023-12-26Fix show_tags_max (#5978)Gravatar Alexandre Alapetite
fix https://github.com/FreshRSS/FreshRSS/issues/5975 Regression from https://github.com/FreshRSS/FreshRSS/pull/5830
2023-12-18Pass PHPStan level 8 (#5946)Gravatar Alexandre Alapetite
* Pass PHPStan level 8 And prepare for PHPStan level 9 https://phpstan.org/user-guide/rule-levels * Revert wrong replace in comment * Fix PHPStan level 8 * Update PHPStan and other dev dependencies * Remove obsolete comment * noVariableVariables and towards bleedingEdge https://github.com/phpstan/phpstan-strict-rules https://phpstan.org/blog/what-is-bleeding-edge * More bleedingEdge * A bit more PHPStan level 9 * More PHPStan level 9 * Prepare for booleansInConditions Ignore int and null * Revert wrong line * More fixes * Fix keep_max_n_unread * Stricter attribute functions * Stricter callHooks and more PHPStan level 9 * More typing * A tiny more
2023-12-03Allow reas-as-scroll in important view (#5906)Gravatar Alexandre Alapetite
And within a single feed See https://github.com/FreshRSS/FreshRSS/pull/5782#issuecomment-1810065152
2023-11-16Use strict_types (#5830)Gravatar Luc SANCHEZ
* Little's optimisations and booleans in conditions * Apply strict type * Apply strict type * Apply strict type * Fix multiple bugs with PHP 8.2 and 8.3 * Many declares missing, more errors fixed * Apply strict type * Another approach * Stronger typing for Minz_Session * Fix case of SQLite --------- Co-authored-by: Luc <sanchezluc+freshrss@gmail.com> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2023-11-08New feature important feeds (#5782)Gravatar Alexandre Alapetite
* New feature important feeds * Fix PHPStan * Initial style for important feeds + keep unread * Change UI order * Count important unread * Never mark as read important feeds during scroll * Fix i18n conf.iew.normal regression * Fix reader view * More fix reader view * Create important.svg * Fix title * Fix counter * Account for important during mark-all-as-read * Fix underline colour * 📌 * Changelog --------- Co-authored-by: math-gh <> Co-authored-by: maTh <1645099+math-GH@users.noreply.github.com>
2023-11-07Do not show message Add some feeds (#5827)Gravatar Alexandre Alapetite
* Do not show message Add some feeds I found this message misleading, as a view is most of the time empty due to a filter, not due to a lack of feeds. * Remove i18n
2023-04-17Complete PHPStan Level 6 (#5305)Gravatar Alexandre Alapetite
* Complete PHPStan Level 6 Fix https://github.com/FreshRSS/FreshRSS/issues/4112 And initiate PHPStan Level 7 * PHPStan Level 6 for tests * Use phpstan/phpstan-phpunit * Update to PHPStan version 1.10 * Fix mixed bug * Fix mixed return bug * Fix paginator bug * Fix FreshRSS_UserConfiguration * A couple more Minz_Configuration bug fixes * A few trivial PHPStan Level 7 fixes * A few more simple PHPStan Level 7 * More files passing PHPStan Level 7 Add interface to replace removed class from https://github.com/FreshRSS/FreshRSS/pull/5251 * A few more PHPStan Level 7 preparations * A few last details
2023-04-07Use typed access to request parameters (#5267)Gravatar Alexandre Alapetite
* Use typed access to request parameters This was a big source of mixed datatypes in many places * Fix notifications * Fix bookmarkAction
2023-01-06Better enclosures (#4944)Gravatar Alexandre Alapetite
* Better enclosures #fix https://github.com/FreshRSS/FreshRSS/issues/4702 Improvement of https://github.com/FreshRSS/FreshRSS/pull/2898 * A few fixes * Better enclosure titles * Improve thumbnails * Implement thumbnail for HTML+XPath * Avoid duplicate enclosures #fix https://github.com/FreshRSS/FreshRSS/issues/1668 * Fix regex * Add basic support for media:credit And use <figure> for enclosures * Fix link encoding + simplify code * Fix some SimplePie bugs Encoding errors in enclosure links * Remove debugging syslog * Remove debugging syslog * SimplePie fix multiple RSS2 enclosures #fix https://github.com/FreshRSS/FreshRSS/issues/4974 * Improve thumbnails * Performance with yield Avoid generating all enclosures if not used * API keep providing enclosures inside content Clients are typically not showing the enclosures to the users (tested with News+, FeedMe, Readrops, Fluent Reader Lite) * Lint * Fix API output enclosure * Fix API content strcut * API tolerate enclosures without a type
2022-10-05Slider: Block Page for one scrollbar; Scrollbar width normal (#4692)Gravatar Cyb10101
* Block page if slider is open; Hides the double page scrollbar * Slider scrollbar default width * Update frss.rtl.css * Add user Cyb10101 to credits * make fix-all * make fix-all (second pass) Co-authored-by: mathContao <math-home@web.de> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-10-03Improved: better semantic HTML for boxes (#4665)Gravatar maTh
* add h1 title on views * add h2 titles into box-title * thin scrollbar in box-content
2022-08-08Refactor entry-to-GReader API format (#4490)Gravatar Alexandre Alapetite
* Refactor entry to GReader API format Some code was copied in two locations and not completely uniform. Cleaning of related variables and functions (e.g. better types for entries and categories as objects vs. as IDs). Usecase: I need to call the same GReader-compatible serialization from an extension * Fixed some edge cases * Keep summary instead of content `summary` and `content` seems to be used interchangeably in the Google Reader API. We have been using `summary` for our client API and `content` in our export/import, so stick to that.
2022-07-19Fix/Improved: Slider mobile (#4416)Gravatar maTh
* add close button, add content slider div * add &ajax=1#slider to the links * CSS * fix showPW functionality * open slider after received Ajax * do not show empty slider * RTL CSS * fixed code smell * improved: links prep via JS * Redirect anchor * enable #anchors in printuri() * enable #slider when config was saved * Active sliding via JS Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-07-17Improved: Article header (#4101)Gravatar maTh
* First draft for normal view * Revert changes on the entry header * Update normal.phtml * Update normal.phtml * RTL CSS * CSS fixes * Better tags style * fix * Update swage.scss * fix * Update swage.scss * fixed .content header * font-size in rem * improved template * dropdown menu if more than 7 tags * configuration: show tags in topline * Simplify loop logic * Minor space * config tags via reading (i18n still missed) * fixed the whitespaces * optimizations * optimize header+footer * Update normal.phtml * fix css * new config: show author+date in footer * config feed name display * improve HTML * fix whitespaces * i18n * i18n: German translations * fix i18n German * fixed: uncouple from bottomline config * reverted: tobline_tags * equalities * fixed: author in footer * fixed data-leave-validation * improved max numbers i18n label * Config works now also in the reader view * fix: footer border * reader view: style article-header-topline * fixed whitespace * i18n fr * Minor i18n fr * Fix mistake i18n fr * i18n fr more precise expression * Fix JavaScript * removed the link icon in the title * clean CSS Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-05-30Slider: close via shortcut (#4394)Gravatar maTh
* change close-slider behind slider * open/close slider via anchor * use shortcuts globaly * deleted debugging console.log()
2022-05-17Fix slider when no article (#4375)Gravatar Alexandre Alapetite
* Fix slider when no article #fix https://github.com/FreshRSS/FreshRSS/issues/4373 https://github.com/FreshRSS/FreshRSS/pull/4291 * Use aside * Forgotten Co-authored-by: maTh <math-home@web.de>
2022-04-11Do not render irrelevant HTML for Ajax calls (#4310)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/4309
2022-04-11Improved: slider (#4297)Gravatar maTh
* CSS * thin scrollbar * fix whitespaces in CSS * fix CSS order
2022-03-22Improve: manage feed in view within a slider (#4226)Gravatar maTh
* it works * small improvements * Update slider.js * fixed JS syntax * slider.js included in main.js * fix syntax * delete including of slider.js * Update extra.js
2022-02-28Implement Web scraping "HTML + XPath" (#4220)Gravatar Alexandre Alapetite
* More PHP type hints for Fever Follow-up of https://github.com/FreshRSS/FreshRSS/pull/4201 Related to https://github.com/FreshRSS/FreshRSS/issues/4200 * Detail * Draft * Progress * More draft * Fix thumbnail PHP type hint https://github.com/FreshRSS/FreshRSS/issues/4215 * More types * A bit more * Refactor FreshRSS_Entry::fromArray * Progress * Starts to work * Categories * Fonctional * Layout update * Fix relative URLs * Cache system * Forgotten files * Remove a debug line * Automatic form validation of XPath expressions * data-leave-validation * Fix reload action * Simpler examples * Fix column type for PostgreSQL * Enforce HTTP encoding * Readme * Fix get full content * target="_blank" * gitignore * htmlspecialchars_utf8 * Implement HTML <base> And fix/revert `xml:base` support in SimplePie https://github.com/simplepie/simplepie/commit/e49c578817aa504d8d05cd7f33857aeda9d41908 * SimplePie upstream PR merged https://github.com/simplepie/simplepie/pull/723
2022-02-06Improved: "Pagination" + load more button (#4125)Gravatar maTh
* Frontend changes done * Load more should work now also without JS * Update template.rtl.css * improved the themes' CSS * Update template.rtl.css * fix CI * CSS prop. order fixed * Rename pagination.phtml to stream-footer.phtml * use the new template name * rename key of i18n * fixed CI, that does not like the white space * rename pagination variable * Update indexController.php
2022-02-04Normal view: improve feed filter link (#4006)Gravatar maTh
* padding+greyscal favicon while hovering+underline * improve underline + improve mouse title * fixed RTL * CSS for more places of feed filter * add title in content feed filter
2021-12-31Add PHPStan (#4021)Gravatar Alexandre Alapetite
* Add PHPStan #fix https://github.com/FreshRSS/FreshRSS/issues/4016 https://phpstan.org/ ```sh composer run-script phpstan ``` * More fixes * Fix global variables * Add .phtml * Fix merge https://github.com/FreshRSS/FreshRSS/pull/4090 * Fix more warnings * Fix view errors and enable in CI * ReturnTypeWillChange * Dynamic view type * Fix Minz static/self bug
2021-12-07fix normal and reader view (#4040)Gravatar maTh
2021-11-30Fix JS error: new-article missed (#3999)Gravatar maTh
2021-11-24improved HTML (#3989)Gravatar maTh
2021-07-21Add HTML5 tags (#3651)Gravatar maTh
* use HTML5 tags #3643 added some HTML5 tags: header, main, nav * <main> into <div> as dicussed in the PR. Todo: check side effects (f.e. threepaneview extension) * fixed whitespace with tabs * fixed more whitespaces with tabs it was not my fault, but I fixed it * added empty lines as wished * Update app/views/index/global.phtml Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> * Update app/views/index/global.phtml * Update app/views/index/global.phtml * Update app/views/index/global.phtml * Update app/views/index/global.phtml * Update app/views/index/global.phtml * Update app/views/index/global.phtml Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
2021-05-31Change links to add feeds (#3650)Gravatar Alexis Degrugillier
Before, the links was redirecting to the subscription management page which was the default behavior before changes introduced in 1.17.0 (#3027). All links were modified except the one for empty content. Now, the empty content links are redirecting to the proper page. See #3642
2021-02-28Travis: Enforce phpcs line length + whitespace (#3488)Gravatar Alexandre Alapetite
* Update Travis line length * Also check whitespace in CSS files * Fix line length ext.php * More syntax, string templates * Fix exclude-pattern * Test JS files as well
2021-02-27Remove + conversion in search except for tags (#3489)Gravatar Alexis Degrugillier
Before, every + sign was converted to a space to allow to search for spaces. But the documentation stated that to search for space one has to enclose the string in quotes. This has a confusing behavior when searching for a string containing a + sign. Now, the + conversion is kept only for the tag search since it's the only one documented that way. See #3454