Skip to content

JWebMP/FullCalendar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JWebMP FullCalendar Plugin

JWebMP component library that wraps the FullCalendar widget (Java 25 LTS, Maven). Provides server-rendered pages with FullCalendar options, events, and resources plus GuicedEE/JWebMP Angular bridge wiring.

⭐ Now Aligned with FullCalendar v6.1.19 + Official Angular Plugin (v12-20)

Quick Links

Need Document
Angular Integration Setup docs/ANGULAR_INTEGRATION_GUIDE.md
Technical Architecture docs/ANGULAR_ALIGNMENT_ANALYSIS.md
All Documentation docs/INDEX.md
Upgrading from v5 docs/FULLCALENDAR_V6_ALIGNMENT_CHANGES.md

What's New (v6.1.19)

Core Features:

  • String-based initialView ("dayGridMonth", "timeGridWeek", etc.)
  • Multi-language support: locale and locales options
  • Timezone handling: timeZone option (IANA format)
  • RTL support: direction option
  • Event defaults: defaultAllDay, defaultAllDayEventDuration, defaultTimedEventDuration
  • Dynamic time reference: now option

Angular Integration:

  • Full compatibility with @fullcalendar/angular (Angular 12-20)
  • Seamless JSON serialization via Jackson
  • Type-safe option chaining via CRTP fluent API
  • Perfect alignment with official FullCalendar Core API

Example Usage

Backend (Java/JWebMP)

@RestController
@RequestMapping("/api/calendar")
public class CalendarController {
  @GetMapping("/options")
  public FullCalendarOptions getCalendarOptions() {
    return new FullCalendarOptions()
        .setInitialView("dayGridMonth")
        .setLocale("en")
        .setTimeZone("UTC")
        .setEditable(true)
        .setEvents(eventService.getEvents());
  }
}

Frontend (Angular)

@Component({
  selector: 'app-calendar',
  template: `<full-calendar [options]="calendarOptions"></full-calendar>`
})
export class CalendarComponent implements OnInit {
  calendarOptions?: CalendarOptions;

  ngOnInit() {
    this.http.get<CalendarOptions>('/api/calendar/options')
      .subscribe(opts => {
        this.calendarOptions = {
          ...opts,
          plugins: [dayGridPlugin, timeGridPlugin, interactionPlugin],
          dateClick: (arg) => this.handleDateClick(arg)
        };
      });
  }
}

See docs/ANGULAR_INTEGRATION_GUIDE.md for complete setup and 5 real-world use cases.

Rules Repository Adoption

  • Rules submodule: rules/ (.gitmodules already configured); treat as read-only reference.
  • Key artifacts: PACT.md, RULES.md, GUIDES.md, IMPLEMENTATION.md, GLOSSARY.md, docs/PROMPT_REFERENCE.md.
  • Architecture sources: docs/architecture/README.md (context, container, component, sequence, ERD).
  • Stage gates follow documentation-first flow; blanket approval recorded in PACT.

Build and Test

  • Requirements: JDK 25, Maven 3.x.
  • Commands: mvn -B -ntp verify
  • CI: .github/workflows/build.yml runs Maven with submodules initialized.
  • Environment example: .env.example (align with rules/generative/platform/secrets-config/env-variables.md).

Usage

  • Add FullCalendar component to JWebMP pages; configure via option models under com.jwebmp.plugins.fullcalendar.options.
  • Events and views: see docs/architecture/sequence-event.md and component diagram docs/architecture/c4-component-fullcalendar.md.
  • Service bindings: module-info.java exports packages; META-INF/services/** registers configurators for script/css inclusion.
  • Angular binding: FullCalendarOptions automatically serializes to JSON via Jackson for Angular template binding.

Testing and Quality

  • Testing posture: Jacoco + Java Micro Harness; BrowserStack alignment retained from historical references.
  • Logging: Log4j2 by default; follow rules/generative/backend/logging/README.md.
  • Fluent API strategy: CRTP (no Lombok builders); JSpecify for nullness guidance.
  • Angular testing: See docs/ANGULAR_INTEGRATION_GUIDE.md#testing for Jest/Karma patterns.

Migration from v5 to v6

Breaking Changes:

  1. initialView: Now a String ("dayGridMonth") not an object
  2. eventLimit: Completely removed (use dayMaxEvents)
  3. Timezone handling: Enhanced with explicit timeZone option

Migration Guide: See docs/FULLCALENDAR_V6_ALIGNMENT_CHANGES.md

Framework Versions Supported

Framework Version Status
Java 25 LTS ✅ Current
Maven 3.x ✅ Current
FullCalendar 6.1.19 ✅ Latest
Angular 12-20 ✅ Aligned
JWebMP 2.x ✅ Aligned
GuicedEE Latest ✅ Integrated

Documentation Index

Complete documentation available in docs/:

  • docs/INDEX.md – Navigation hub for all documentation
  • docs/ANGULAR_INTEGRATION_GUIDE.md – Practical setup guide (START HERE for Angular)
  • docs/ANGULAR_ALIGNMENT_ANALYSIS.md – Technical architecture overview
  • docs/ANGULAR_ALIGNMENT_COMPLETION.md – Project summary & status
  • docs/FULLCALENDAR_V6_ALIGNMENT_CHANGES.md – Migration guide (v5 → v6)
  • docs/FULLCALENDAR_API_AUDIT.md – Complete API audit
  • docs/COMPLETION_SUMMARY.md – Phase 1 details
  • docs/architecture/ – Architecture diagrams & sequences

Project Links

Contributing

Follow the project's documentation-first, PACT-based workflow:

  1. Check RULES.md for forward-only policy
  2. Reference GUIDES.md for implementation patterns
  3. Update documentation before (or with) code changes
  4. Ensure FullCalendarOptions stays aligned with upstream FullCalendar Core API

License

See LICENSE file.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages