• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

MMM-CalendarExt3 add non-event content to weekday cell

Scheduled Pinned Locked Moved Solved Troubleshooting
10 Posts 3 Posters 361 Views 3 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Away
    sdetweil @redfishbluefish
    last edited by Dec 8, 2024, 4:15 PM

    @redfishbluefish I think you need to add a customHeader config section
    see
    https://github.com/MMRIZE/MMM-CalendarExt3?tab=readme-ov-file#customheader-since-190

    Sam

    How to add modules

    learning how to use browser developers window for css changes

    R 1 Reply Last reply Dec 8, 2024, 6:18 PM Reply Quote 0
    • R Offline
      redfishbluefish @sdetweil
      last edited by Dec 8, 2024, 6:18 PM

      @sdetweil thanks for the link but my understanding is that customHeader applies to the field “above” the calendar that usually defaults to something like Monday, Tuesday, etc.

      I’m looking for the section that is at the top of each date cell which I believe is contained within cellHeader and gets generated as part of the makeCellDom.

      https://github.com/MMRIZE/MMM-CalendarExt3/blob/dfe24253bba9befb000c443362f5d79db03354dc/MMM-CalendarExt3.js#L485

      M 1 Reply Last reply Dec 9, 2024, 2:15 AM Reply Quote 0
      • M Offline
        MMRIZE @redfishbluefish
        last edited by Dec 9, 2024, 2:15 AM

        @redfishbluefish
        Could you show me the sketches or drawing? I’m not sure what you want exactly.

        R 1 Reply Last reply Dec 15, 2024, 5:55 AM Reply Quote 0
        • R Offline
          redfishbluefish @MMRIZE
          last edited by Dec 15, 2024, 5:55 AM

          @MMRIZE Thanks for replying and sorry for not getting back sooner!

          I’m trying to do something like the following where I have added “Day 5” on Dec 9, “Day 1” on Dec 10, etc:

          MMM-CalendarExt3-mock-up.png

          Which I’ve mocked up by modifying this:

          <div class="cellHeader">
             <div class="">Day 5</div>
             <div class="cellDate">
               <span class="dateParts month seq_0">Dec</span>
               <span class="dateParts literal seq_1"> </span> 
               <span class="dateParts day seq_2">9</span>
             </div>
          </div>
          

          Would using manipulateDateCell allow me to do this? At the moment it appears to me that manipulateDateCell is for when there are events on the day but I won’t always have events in my case.

          M 2 Replies Last reply Dec 15, 2024, 11:49 AM Reply Quote 0
          • M Offline
            MMRIZE @redfishbluefish
            last edited by Dec 15, 2024, 11:49 AM

            @redfishbluefish
            First, please clearly explain the rules that determine how Day 1 to Day 5 are decided.

            It seems that the fundamental principle is: “Day 1 to Day 5 follow sequentially without interruption, excluding holidays.” While this appears to be a simple and straightforward rule, there might be hidden conditions that complicate its application.

            • Could there be exceptions where the Day 1 to Day 5 sequence is disrupted, even on regular weekdays? For instance, unexpected events like a school activity might occur, causing the rule to be temporarily suspended. In such cases, it’s unclear whether the sequence is skipped entirely or deferred to the next day. The handling of these exceptions could vary, and since such cases might not be planned in advance when running the schedule system (MM), they may need to be adjusted manually as they arise. While not impossible, this would be inefficient and impractical.

            • To apply this rule effectively, the start and end dates of the sequence must be clearly defined. In countries like Korea, where the academic year is typically divided into two semesters with fixed start and end dates and few extended breaks during the semester, applying this rule is relatively straightforward. However, in Western schools that follow a trimester system or have long breaks during the term (e.g., Easter break), creating a universally applicable calculation method becomes quite challenging. This is because periods during which the rule is inactive must be explicitly defined.

            Perhaps the most reliable approach would be to designate events for each applicable date within a calendar manually. By manually specifying the dates to which the rule applies, it’s possible to adapt to changes in schedules or rules. However, this method could be quite tedious.

            Alternatively, if there is already a schedule table in a digital format with these dates predefined, you could import it as a source and apply the rules automatically. (This would likely require creating a dedicated module to handle this task.)

            R 1 Reply Last reply Dec 16, 2024, 3:47 AM Reply Quote 0
            • M Offline
              MMRIZE @redfishbluefish
              last edited by Dec 15, 2024, 12:00 PM

              @redfishbluefish
              By the way, handling cell header would be possible with manipulateDateCell, You can refer this for your understanding.
              https://github.com/MMRIZE/MMM-CalendarExt3/discussions/178

              1 Reply Last reply Reply Quote 0
              • R Offline
                redfishbluefish @MMRIZE
                last edited by Dec 16, 2024, 3:47 AM

                @MMRIZE I threw together the following and put it in manipulateDateCell. It mostly works for what I want. My check of cellDom.dataset.date vs holidays fails as it seems I’m getting a local time vs current which seems to become a UTC time for me?

                // Calculate tumble days
                const startDate = "2024-09-02"
                const holidays = ["2024-09-02","2024-09-03","2024-10-14","2024-10-25","2024-11-22","2024-12-16"]
                let schoolDays = 0
                
                const cellHeader = cellDom.querySelector('.cellHeader') ?? null
                if(cellHeader) {
                	const end = new Date(+cellDom.dataset.date)
                	let current = new Date(startDate)
                	while (current <= end) {
                		const dayOfWeek = current.getDay();
                		
                		// Skip weekends (Saturday = 6, Sunday = 0)
                		if (dayOfWeek !== 0 && dayOfWeek !== 6) {
                			// Check if the current date is not a holiday
                			const isHoliday = holidays.some(holiday => {
                				return new Date(holiday).toDateString() === current.toDateString()
                			})
                			if (!isHoliday) {
                				schoolDays++;
                			}
                		}
                		// Move to the next day
                		current.setDate(current.getDate() + 1)
                	}
                	const cellTumbleDay = document.createElement('div')
                	cellTumbleDay.classList.add('cellTumbleDay')
                	if (schoolDays%5 == 4) {
                		cellTumbleDay.innerHTML = `Day ${(schoolDays % 5) + 1}.${((schoolDays % 20) + 1)/5}`	
                	} else {
                		cellTumbleDay.innerHTML = `Day ${(schoolDays % 5) + 1}`
                	}
                	cellHeader.insertBefore(cellTumbleDay, cellHeader.childNodes[1])
                }					
                

                Still need to cleanup stuff like skipping days and add more to manage the div with css.

                M 1 Reply Last reply Dec 17, 2024, 9:37 AM Reply Quote 0
                • M Offline
                  MMRIZE @redfishbluefish
                  last edited by Dec 17, 2024, 9:37 AM

                  @redfishbluefish
                  Consider to try Intl.dateTimeForamt.
                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat

                  R 1 Reply Last reply Dec 18, 2024, 3:01 AM Reply Quote 0
                  • R Offline
                    redfishbluefish @MMRIZE
                    last edited by Dec 18, 2024, 3:01 AM

                    @MMRIZE Thanks! Intl.dateTimeFormat worked once I realized what I was trying to compare against was wrong. Probably not actually portable for anyone else but works for me:

                    let isHoliday = holidays.some(holiday => {
                       return holiday === new Intl.DateTimeFormat('en-CA').format(current)
                    })
                    

                    Overall this isn’t the most efficient code I’ve written. Looping and counting days since a start date for every date cell is expensive. Tim to learn more javascript I guess.

                    1 Reply Last reply Reply Quote 0
                    • R redfishbluefish has marked this topic as solved on Dec 20, 2024, 3:19 AM
                    • 1 / 1
                    1 / 1
                    • First post
                      6/10
                      Last post
                    Enjoying MagicMirror? Please consider a donation!
                    MagicMirror created by Michael Teeuw.
                    Forum managed by Sam, technical setup by Karsten.
                    This forum is using NodeBB as its core | Contributors
                    Contact | Privacy Policy