Skip to content
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

ref(calendar): refactored view outside of calendar module #815

Merged

Conversation

andreadev-it
Copy link
Contributor

@andreadev-it andreadev-it commented Apr 23, 2023

This PR is just a refactor to propose a way to separate the handling of different views and modes from the actual drawing. Views are extracted into their own modules (in this case, inside the folder core.ui.calendar.views) and can add themselves to the calendar module through the public.add_view method. This allows other plugins (like GTD, for example) to create their own views and add them to the calendar through an API.

Let me know if you guys like this, the API is pretty simple. The add_view function of the calendar module accepts two arguments: the view name and the view details. The details have to include a setup function that will be called with the following arguments: ui_info, mode and options.

This is how it looks to add the monthly view:

core/ui/calendar/views/monthly.lua:

module.public = {

    view_name = "monthly",

    setup = function (ui_info, mode, options)
        -- ...
    end
}

module.load = function ()
    module.required['core.ui.calendar'].add_view(module.public.view_name, module.public)
end

The new functions that were added are:
calendar.public.add_view
calendar.private.get_view
monthly.public.setup

It also slightly changes the api for the modes. The closing of the calendar window is now automatic whenever the callback that requested the date selection is called. This means that the calendar mode are not required to return true in order to close the calendar. They can now return true if they want the view to be redrawn (that's how the mode on_select return value should be considered after this change)

One thing to note: since the calendar views could be very different in how they work (based on the goal they're trying to achieve), I think that the drawing of the last line, that shows how to get the help menu and also shows the view name, should be handled by the view itself. That's of course my opinion, and I'll be happy to see what everyone else think about this whole PR 🙂

Have a nice day!

@vhyrro
Copy link
Member

vhyrro commented Apr 27, 2023

Yes!! I really like this refactor, makes things much more readable.

You're right, it would be better to make the current view/help components a per-view thing instead of a global thing, I'm happy with such a change later down the line :)

One very small nitpick: be sure to run make format every now and again, or set up a git hook to do it for you - just for the sake of consistency :p

@vhyrro vhyrro merged commit ea6b689 into nvim-neorg:neorg-calendar-view Apr 27, 2023
@andreadev-it
Copy link
Contributor Author

Thank you, I'm sorry I keep forgetting the formatting 😅
Will look into git hooks for that!

vhyrro pushed a commit that referenced this pull request May 13, 2023
Co-authored-by: Andrea <andrea@DESKTOP-RPJDAO0.localdomain>
vhyrro pushed a commit that referenced this pull request May 14, 2023
Co-authored-by: Andrea <andrea@DESKTOP-RPJDAO0.localdomain>
vhyrro pushed a commit that referenced this pull request May 14, 2023
Co-authored-by: Andrea <andrea@DESKTOP-RPJDAO0.localdomain>
normful added a commit to normful/neorg that referenced this pull request Jun 4, 2023
* upstream/main:
  feat(keybinds.lua): add descriptions to all keybinds
  chore: format with stylua
  feat(keybinds.lua): add `desc` fields to task keybinds (nvim-neorg#926)
  fix(core.summary): bugs + flexibility around incomplete metadata (nvim-neorg#927)
  docs(concealer): add comments for generators an formatters
  feat: add extra nesting level, make icons specific to non-anticonceal usage
  feat(concealer): add more icon generators
  feat(concealer): add numeric anticonceal if supported
  fix(concealer): record cursor upon init to fix first line conceal (nvim-neorg#924)
  feat: conceal the `{* }` parts of links
  fix(concealer): fix concealing in anchors, don't error on broken config (nvim-neorg#923)
  docs(todo_items): old keybinds in wiki
  docs: update `breaking-changes.norg`
  refactor!: remove the `core.news` module
  docs(README): make lazy.nvim install instructions more standard (nvim-neorg#905)
  refactor(docgen): remove unused variable
  fix(docgen): fix incorrect markdown indentation in wiki
  fix(docgen): don't fail on mixed-type tables (lists and dictionaries at the same time)
  fix(docgen): propagate docgen error exit code (nvim-neorg#917)
  refactor(promo): remove notify concealer (nvim-neorg#919)
  fix(concealer): do not listen vimleavepre (nvim-neorg#920)
  fix(concealer): minor fixes, plus wiki error fix (nvim-neorg#916)
  feat(concealer)!: rewrite for performance and stability (nvim-neorg#834)
  docs(wiki/Home.md): incorrect formatting in first paragraph
  refactor(core.highlights): don't halt execution when highlights cannot be applied
  fix(core.highlights): wrongly placed bracket
  fix(core.highlights): fix disappearing highlights when opening up norg files
  fix(highlights): attempt to reenable highlighting when none is found
  fix(todo_items): don't look at child if parent is todo (nvim-neorg#909)
  perf(core.promo): don't check `v.count`, use `v.count1` instead
  feat(promo): promote/demote prefix without following text (nvim-neorg#912)
  chore(highlights): add error message to assert for easier user debugging
  fix(highlights): assert on treesitter being enabled (nvim-neorg#914)
  feat(itero): don't start newline on empty line (nvim-neorg#911)
  refactor!(todo-items): since 5.0 do not warn about deprecated keybinds
  refactor!: since 5.0 do not longer warn about deprecated `core.norg.*` modules
  feat!: move to new/improved metadata parser, change highlight queries
  refactor(hop): add nicer error messages, format with stylua
  feat(esupports.hop): link jump to line + fixes + refactoring (nvim-neorg#903)
  refactor: remove `core.syntax` from the default module list
  chore(config.lua): update version variable
  chore(main): release 4.6.0 (nvim-neorg#900)
  feat(todo-items): add missing "need input" icon and action (nvim-neorg#896)
  fix(esupports): use structured api to avoid injection (nvim-neorg#899)
  fix(tempus): supply unprovided parameters from the current date when converting to `osdate` (supercedes nvim-neorg#897)
  chore(config.lua): update version variable
  chore(main): release 4.5.0 (nvim-neorg#883)
  fix: TSInstall issues on macOS, hopefully once and for good (nvim-neorg#891)
  docs(README): add treesitter fix for macos (nvim-neorg#887)
  feat: add colouring to TODO items
  docs: update ROADMAP.md
  fix(metagen): update generation to use user config for `updated` tag (nvim-neorg#882)
  chore(config.lua): update version variable
  chore(main): release 4.4.1 (nvim-neorg#880)
  docs(concealer): mention nerd font dependency for concealer (nvim-neorg#875)
  fix(tempus): properly handle conversions w.r.t Sun-Sat/Mon-Sun
  refactor: add `number_wrap()` function to `neorg.lib`
  fix(tempus): paste correct weekday from calendar
  chore(config.lua): update version variable
  chore(main): release 4.4.0
  fix(tempus): don't use the `re` module if it doesn't exist (nvim-neorg#872)
  feat(journal): allow `custom` to take in no arguments, in which case spawn a calendar
  fix(promo): don't add whitespace to empty lines (nvim-neorg#852)
  chore(config.lua): update version variable
  chore(main): release 4.3.0
  feat(calendar): add `t` command for "today"
  fix(hop): assume <current-day> when some parameters to dates are not supplied
  feat(hop): allow users to jump to timestamps
  fix(tempus): days like `4th`/`2nd` would not get parsed properly
  refactor(calendar): allow a target date to be supplied to the view
  chore(config.lua): update version variable
  chore(main): release 4.2.0
  fix: don't allow tempus to load unless the Neovim ver is at least 0.10.0
  feat(tempus): add insert mode `<M-d>` keybind to insert a date
  fix(tempus): do not assume `osdate` has all fields set
  feat(tempus): add `,id` (insert date) keybinding
  feat(tempus): allow dates to be converted to norg-compatible dates with `tostring()`
  chore(config.lua): update version variable
  chore(main): release 4.1.1
  fix: remove calendar as a dependency of `core.ui`, fix errors for people not on nightly
  chore(config.lua): update version variable
  chore(main): release 4.1.0
  refactor: remove `core.tempus` from `core.defaults`
  docs(tempus): add top documentation comment
  docs(calendar): add top documentation comment
  fix(calendar): allow the view to be written to on rerender
  feat(calendar): add `?` help page for custom input
  feat(calendar): implement basic `i` functionality
  feat(tempus): add `to_lua_date` function
  feat: add `core.tempus` module for date management
  feat(calendar): allow many simultaneous calendars
  fix(calendar): if another calendar is open then close it instead of erroring
  feat(calendar): add basic help popup when `?` is invoked
  refactor(core.ui): do not autoclose splits made via `create_split`
  fix(calendar): prevent the buffer from being modifiable after it has been filled
  fix(calendar): fix incorrect movement with `H` across boundaries of months with different lengths
  feat(calendar): add `$` and `0`/`_` navigation keybinds
  feat(calendar): add `m`/`M`, `L`/`H` and `y`/`Y` keybinds for the monthly view
  ref(calendar): implemented distance (monthly view) and run make format (nvim-neorg#858)
  ref(calendar): refactored view outside of calendar module (nvim-neorg#815)
  Fixed style with stylua
  Added standalone mode
  Fixed style with stylua
  Converted calendar into its own module
  Select range highlight hook is now more concise
  Mode integration (WIP)
  fix(calendar): properly display "today's day" in the calendar view
  chore: format with stylua, fix LLS warnings
  ref(calendar): refactored extmark creation, fixed single month view and added month limit (nvim-neorg#796)
  ref(calendar): extract rendering logic, add and improve keybinds (nvim-neorg#790)
  ref(calendar): extract logic, fix bug with time reformatting (nvim-neorg#788)
  fix(calendar): overlapping month names in the calendar view
  chore(calendar): initial setup for the screen update functionality
  ref: use numbers instead of strings for internal date structures
  feat: correctly handle year boundaries
  feat: add left-right cursor movement
  feat: place cursor over current day when creating calendar
  fix(calendar): make distance between each month uniform and support modifying the distance between each month
  feat(calendar): render as many months as is possible on screen
  feat(calendar): generalize functions even further, allow for offsets
  fix(calendar): fix rest of highlight groups
  fix(calendar): make month rendering work again
  fix(calendar): reversed namespace names
  fix(core.ui.calendar): wrong extmark being queried in month render routine
  feat: implement `render_month` function
  ref(core.ui.calendar): extract even more logic to `module.private`
  ref(core.ui.calendar): continue small refactors
  fix(core.ui.calendar): logic error when parsing virt_text length for `set_logical_extmark`
  ref(core.calendar.ui): begin code refactor (make the codebase ready for calendar logic)
  ref(core.ui.calendar): put rendered month extmark in decorational namespace
  feat(core.ui.calendar): highlight the current day differently
  ref(core.ui.calendar): move decorational namespace out of the `do .. end` block
  feat(core.ui.calendar): add day of the month rendering
  feat(core.ui.calendar): make the calendar display full month names
  feat(core.ui.calendar): implement more of the barebones UI
  feat(core.ui): let `create_split` take in a `height` variable
  feat(core.ui.calendar): add static calendar ui
  feat: add skeleton for the calendar UI element
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants