-
Notifications
You must be signed in to change notification settings - Fork 374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(blog): add sorting, better rendering #1541
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #1541 +/- ##
==========================================
+ Coverage 47.41% 47.48% +0.06%
==========================================
Files 385 385
Lines 61319 61408 +89
==========================================
+ Hits 29074 29159 +85
+ Misses 29826 29812 -14
- Partials 2419 2437 +18 ☔ View full report in Codecov by Sentry. |
There is currently a bug in the rendering of the realm, specifically related to parsing time.Time. Putting this PR on hold until we figure out what is going on - it seems that it is a deeper issue than just the blog code. Bug in question: #1588 The issue mainly happens when there is no date provided in the frontmatter of the blog post README, which is somethign that shouldn't really happen in our case, since there is a review process in place. |
Currently cannot figure out why CI is failing - both Other than that, PR can be reviewed. It is supposed to be used in sync with the refactor of the Edit: fixed in 4283930 |
Suggest reverting the changes to Comment and then we should be good to merge |
## Description This PR adds two new AVL trees that enable sorting of the blog posts by publication date and title. This approach utilizes the fact that the AVL tree iteration order is lexicographic by key. We introduce two new AVL trees into the `Blog` struct - which store a key to sort by (title or publication date), and store the pointers to posts, meaning the memory overhead is small. This PR also modifies the rendering of the blog: Old blog home page: ![Screenshot 2024-01-23 at 11 34 10](https://github.com/gnolang/gno/assets/33522493/78e197d3-a477-49a9-88d8-06b4f2c3d51d) New blog home page (sorted newest-top-left): ![Screenshot 2024-01-23 at 11 33 38](https://github.com/gnolang/gno/assets/33522493/16712e37-c971-4cf5-9962-9dbf639a6088) Old post rendering - header & footer: ![Screenshot 2024-01-23 at 11 34 46](https://github.com/gnolang/gno/assets/33522493/d6a713bb-379c-44b7-9ea7-38997e6b5c5a) New post rendering - header & footer: ![Screenshot 2024-01-23 at 11 35 03](https://github.com/gnolang/gno/assets/33522493/352ea40d-c9ac-41a0-a362-fb3c5ca62968) ---- ![Screenshot 2024-01-23 at 11 35 11](https://github.com/gnolang/gno/assets/33522493/6f21416c-8945-4eca-9bee-b67a9e56a568) The API changes are the following: - Each post now stores the publisher (ie caller of ModAddPost), and the authors. - It is envisioned that the author list will be a list of GitHub usernames, while the publisher is simply the address of the caller. A PR in the Blog repo will be added to accommodate this change. - If the author list in the frontmatter of the blog post is empty, just the publisher will be displayed - The timestamp for when the blog was written will primarily be taken in from the outside world, ie from the frontmatter, in the `RFC3339` format. This timestamp allows us to still keep the ordering of the blogs even when the block height/timestamp is unreliable. In case the timestamps are not provided, time.Now() in the realm will be used instead. Publishing flow - two options: - Pass in data directly to the blog realm via `ModAddPost`, - Use the `gnoblog-cli` or similar parsing & publishing tool. Either way, it is expected that any timestamps passed will be used in the `time.RFC3339` format. This PR is being published in pair with a [refactor](gnolang/blog#63) of the gnoblog-cli tool. Related: gnolang/blog#20 <details><summary>Contributors' checklist...</summary> - [ ] Added new tests, or not needed, or not feasible - [ ] Provided an example (e.g. screenshot) to aid review or the PR is self-explanatory - [ ] Updated the official documentation or not needed - [ ] No breaking changes were made, or a `BREAKING CHANGE: xxx` message was included in the description - [ ] Added references to related issues and PRs - [ ] Provided any useful hints for running manual tests - [ ] Added new benchmarks to [generated graphs](https://gnoland.github.io/benchmarks), if any. More info [here](https://github.com/gnolang/gno/blob/master/.benchmarks/README.md). </details> --------- Co-authored-by: Manfred Touron <94029+moul@users.noreply.github.com>
Description
This PR adds two new AVL trees that enable sorting of the blog posts by publication date and title.
This approach utilizes the fact that the AVL tree iteration order is lexicographic by key. We introduce two new AVL trees into the
Blog
struct - which store a key to sort by (title or publication date), and store the pointers to posts, meaning the memory overhead is small.This PR also modifies the rendering of the blog:
Old blog home page:
New blog home page (sorted newest-top-left):
Old post rendering - header & footer:
New post rendering - header & footer:
The API changes are the following:
RFC3339
format. This timestamp allows us to still keep the ordering of the blogs even when the block height/timestamp is unreliable. In case the timestamps are not provided, time.Now() in the realm will be used instead.Publishing flow - two options:
ModAddPost
,gnoblog-cli
or similar parsing & publishing tool.Either way, it is expected that any timestamps passed will be used in the
time.RFC3339
format.This PR is being published in pair with a refactor of the gnoblog-cli tool.
Related: gnolang/blog#20
Contributors' checklist...
BREAKING CHANGE: xxx
message was included in the description