From 20080bb73ee2cafdb200230b456a2ae349aa99ea Mon Sep 17 00:00:00 2001 From: mu-aa Date: Thu, 13 Apr 2023 18:01:22 +0900 Subject: [PATCH 001/895] test --- src/main/resources/static/index.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/resources/static/index.html diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 00000000..fe82b787 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST + + \ No newline at end of file From 8aae06826e61c57170e966740c0ef16576be8135 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 13 Apr 2023 18:03:41 +0900 Subject: [PATCH 002/895] ddasass --- src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java index 5393a0d4..10a83c8f 100644 --- a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java +++ b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java @@ -8,6 +8,7 @@ class CalenkitApplicationTests { @Test void contextLoads() { + System.out.println("dddd"); } } From dacfd1d1d4ce5da5b91bf990df6739e13d4a6d6c Mon Sep 17 00:00:00 2001 From: mu-aa Date: Thu, 13 Apr 2023 18:07:15 +0900 Subject: [PATCH 003/895] test --- src/main/resources/static/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index fe82b787..5a9d5bc7 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -5,6 +5,6 @@ TEST - TEST + TEST! \ No newline at end of file From 177d1298bbcfa3861eadd9ea4a661e77a1291c3a Mon Sep 17 00:00:00 2001 From: mu-aa Date: Thu, 13 Apr 2023 18:26:33 +0900 Subject: [PATCH 004/895] Muaa (#4) * test * test --- src/main/resources/static/index.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/resources/static/index.html diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file From fc4d596e21fbb996a987c12db873ef284e8612a9 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 13 Apr 2023 18:00:23 +0900 Subject: [PATCH 005/895] ddas --- .../java/com/effourt/calenkit/CalenkitApplicationTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java index 10a83c8f..a50d2bdc 100644 --- a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java +++ b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java @@ -8,7 +8,7 @@ class CalenkitApplicationTests { @Test void contextLoads() { - System.out.println("dddd"); + System.out.println("확인"); } } From f0dae92fd0e403a9e2d5950397aeee3823c4ecce Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 17:59:58 +0900 Subject: [PATCH 006/895] Create README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 프로젝트와 팀에 관한 내용 --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..464a2f94 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# calenkit +## 팀 멤버 +- 김민재 +- 라재희 +- 이진규 +- 오세욱 + +## 프로젝트 개요 +- 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 + +### 사용한 기술 +- Spring Boot +- MyBatis +- MySql +- JSP + +## Git Policy + +## Naming Rule + From 84e3529fb210016992057283625911ed218f3fb7 Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:00:52 +0900 Subject: [PATCH 007/895] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 464a2f94..41089eec 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # calenkit -## 팀 멤버 +## Team Member - 김민재 - 라재희 - 이진규 - 오세욱 -## 프로젝트 개요 +## Project Summary - 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 -### 사용한 기술 +### - Spring Boot - MyBatis - MySql From 9ac5089ef7ffc8d84ea3b02de4da5c592ef4ef6f Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:01:13 +0900 Subject: [PATCH 008/895] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 41089eec..fcb20cdc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# calenkit +# Calenkit ## Team Member - 김민재 - 라재희 From 06697063d1e01b0f91a4ce2bdc002df44b461340 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 13 Apr 2023 18:02:30 +0900 Subject: [PATCH 009/895] ddasass --- .../java/com/effourt/calenkit/CalenkitApplicationTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java index a50d2bdc..2a802ddc 100644 --- a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java +++ b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java @@ -8,7 +8,7 @@ class CalenkitApplicationTests { @Test void contextLoads() { - System.out.println("확인"); + System.out.println("확인ss"); } } From 66f295eeda16267b009012c710234b6273eedf25 Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 17:59:58 +0900 Subject: [PATCH 010/895] Create README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 프로젝트와 팀에 관한 내용 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fcb20cdc..464a2f94 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -# Calenkit -## Team Member +# calenkit +## 팀 멤버 - 김민재 - 라재희 - 이진규 - 오세욱 -## Project Summary +## 프로젝트 개요 - 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 -### +### 사용한 기술 - Spring Boot - MyBatis - MySql From eee7490972178d28c7f6f26fb5a75a037890f13b Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:00:52 +0900 Subject: [PATCH 011/895] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 464a2f94..41089eec 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # calenkit -## 팀 멤버 +## Team Member - 김민재 - 라재희 - 이진규 - 오세욱 -## 프로젝트 개요 +## Project Summary - 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 -### 사용한 기술 +### - Spring Boot - MyBatis - MySql From 19bdf85c32cb4dc1e276e8b098910b1e02b15aa2 Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:01:13 +0900 Subject: [PATCH 012/895] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 41089eec..fcb20cdc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# calenkit +# Calenkit ## Team Member - 김민재 - 라재희 From c8ee52d6b0ab6402eb54933292dabe60c7fd7ea9 Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:02:31 +0900 Subject: [PATCH 013/895] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcb20cdc..3fc03d37 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ## Project Summary - 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 -### +### Skill - Spring Boot - MyBatis - MySql From 1f00fbabbd340fe109aeabc799140ccb9f52b683 Mon Sep 17 00:00:00 2001 From: Owner Date: Thu, 13 Apr 2023 18:03:07 +0900 Subject: [PATCH 014/895] Test Commit and Push --- src/main/java/com/effourt/calenkit/TestController.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/TestController.java diff --git a/src/main/java/com/effourt/calenkit/TestController.java b/src/main/java/com/effourt/calenkit/TestController.java new file mode 100644 index 00000000..0c7fdeb3 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/TestController.java @@ -0,0 +1,8 @@ +package com.effourt.calenkit; + +import org.springframework.stereotype.Controller; + +@Controller +public class TestController { + +} From 78e860287bada92d2fe002be8640c8afa7b195f1 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Thu, 13 Apr 2023 18:26:33 +0900 Subject: [PATCH 015/895] Muaa (#4) * test * test --- src/main/resources/static/index.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/resources/static/index.html diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file From 25eed8db7493205f8d1928ce8e5a6b0090cbaa9f Mon Sep 17 00:00:00 2001 From: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:02:31 +0900 Subject: [PATCH 016/895] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcb20cdc..3fc03d37 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ## Project Summary - 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 -### +### Skill - Spring Boot - MyBatis - MySql From 396fe3e28c68dcae7d228599bd37debba577e259 Mon Sep 17 00:00:00 2001 From: Owner Date: Thu, 13 Apr 2023 18:03:07 +0900 Subject: [PATCH 017/895] Test Commit and Push --- src/main/java/com/effourt/calenkit/TestController.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/TestController.java diff --git a/src/main/java/com/effourt/calenkit/TestController.java b/src/main/java/com/effourt/calenkit/TestController.java new file mode 100644 index 00000000..0c7fdeb3 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/TestController.java @@ -0,0 +1,8 @@ +package com.effourt.calenkit; + +import org.springframework.stereotype.Controller; + +@Controller +public class TestController { + +} From d07b2e30772895813972646ebb68fead226a2a29 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Thu, 13 Apr 2023 18:26:33 +0900 Subject: [PATCH 018/895] Muaa (#4) * test * test --- src/main/resources/static/index.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/resources/static/index.html diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file From 05ed110808c7ebabffffec29537af20f842c2d13 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Fri, 14 Apr 2023 14:10:13 +0900 Subject: [PATCH 019/895] test --- src/main/resources/static/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 5a9d5bc7..d802f9e0 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -5,6 +5,6 @@ TEST - TEST! + TEST!!!!!! \ No newline at end of file From 15cd11d70673df7560f182943966dee77764f023 Mon Sep 17 00:00:00 2001 From: Lee Date: Fri, 14 Apr 2023 17:02:05 +0900 Subject: [PATCH 020/895] =?UTF-8?q?docs/DTO(Alarm,Auth,Member,Schedule,Tea?= =?UTF-8?q?m)=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/domain/Alarm.java | 15 +++++++++++++++ .../java/com/effourt/calenkit/domain/Auth.java | 12 ++++++++++++ .../java/com/effourt/calenkit/domain/Member.java | 16 ++++++++++++++++ .../com/effourt/calenkit/domain/Schedule.java | 16 ++++++++++++++++ .../java/com/effourt/calenkit/domain/Team.java | 15 +++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/domain/Alarm.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Auth.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Member.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Schedule.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Team.java diff --git a/src/main/java/com/effourt/calenkit/domain/Alarm.java b/src/main/java/com/effourt/calenkit/domain/Alarm.java new file mode 100644 index 00000000..ec322b2d --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Alarm.java @@ -0,0 +1,15 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Alarm { + private Integer alNo; + private String alScNo; + private String alMid; + private Integer alStatus; + private String alTime; + private Integer alCate; +} diff --git a/src/main/java/com/effourt/calenkit/domain/Auth.java b/src/main/java/com/effourt/calenkit/domain/Auth.java new file mode 100644 index 00000000..bf7fe885 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Auth.java @@ -0,0 +1,12 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Auth { + private Integer authId; + private String authRefresh; + private String authAccess; +} diff --git a/src/main/java/com/effourt/calenkit/domain/Member.java b/src/main/java/com/effourt/calenkit/domain/Member.java new file mode 100644 index 00000000..53975a08 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Member.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Member { + private Integer memAuthId; + private String memId; + private String memImage; + private String memLogin; + private String memName; + private String memPw; + private Integer memStatus; +} \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/domain/Schedule.java b/src/main/java/com/effourt/calenkit/domain/Schedule.java new file mode 100644 index 00000000..68a554d9 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Schedule.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Schedule { + private Integer scNo; + private String scTitle; + private String scContent; + private String scSdate; + private String scEdate; + private Integer scStatus; + private Integer scProgress; +} diff --git a/src/main/java/com/effourt/calenkit/domain/Team.java b/src/main/java/com/effourt/calenkit/domain/Team.java new file mode 100644 index 00000000..144cd812 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Team.java @@ -0,0 +1,15 @@ +package com.effourt.calenkit.domain; + + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Team { + private Integer teamNo; + private String teamMid; + private Integer teamSno; + private Integer teamLevel; + private Integer teamBookmark; +} From 127d43614bc30b2d95f386c7dfd1aeba73b33a09 Mon Sep 17 00:00:00 2001 From: Lee Date: Fri, 14 Apr 2023 17:03:07 +0900 Subject: [PATCH 021/895] =?UTF-8?q?docs/DOMAIN(MySchedule)=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/dto/MySchedule.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/dto/MySchedule.java diff --git a/src/main/java/com/effourt/calenkit/dto/MySchedule.java b/src/main/java/com/effourt/calenkit/dto/MySchedule.java new file mode 100644 index 00000000..0770f4de --- /dev/null +++ b/src/main/java/com/effourt/calenkit/dto/MySchedule.java @@ -0,0 +1,14 @@ +package com.effourt.calenkit.dto; + + +import com.effourt.calenkit.domain.Schedule; +import com.effourt.calenkit.domain.Team; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MySchedule { + private Team team; + private Schedule schedule; +} \ No newline at end of file From 801f74c297b5c2e42eb850f2b20178804591d1a8 Mon Sep 17 00:00:00 2001 From: Lee Date: Fri, 14 Apr 2023 17:03:35 +0900 Subject: [PATCH 022/895] =?UTF-8?q?docs/MAPPER(Alarm,Auth,Member,Schedule,?= =?UTF-8?q?Team)=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/mapper/AlarmMapper.xml | 33 +++++ .../effourt/calenkit/mapper/AuthMapper.xml | 25 ++++ .../effourt/calenkit/mapper/MemberMapper.xml | 78 ++++++++++++ .../calenkit/mapper/ScheduleMapper.xml | 119 ++++++++++++++++++ .../effourt/calenkit/mapper/TeamMapper.xml | 72 +++++++++++ 5 files changed, 327 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml diff --git a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml new file mode 100644 index 00000000..735518fa --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -0,0 +1,33 @@ + + + + + + + INSERT INTO ALARM(AL_SCNO, AL_MID, AL_STATUS, AL_TIME, AL_CATE) VALUES(#{alScNo}, #{alMid}, 1, SYSDATE, #{alCate}) + + + + + + UPDATE ALARM SET AL_STATUS=#{alStatus} WHERE AL_NO=#{alNo} + + + + + + DELETE FROM ALARM WHERE AL_NO=#{alNo} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml b/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml new file mode 100644 index 00000000..4ddc84bb --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml @@ -0,0 +1,25 @@ + + + + + + + INSERT INTO Auth(AUTH_REFRESH, AUTH_ACCESS) VALUES(#{authRefresh},#{authAccess}) + + + + + + UPDATE AUTH SET AUTH_ACCESS=#{authAccess} WHERE AUTH_ID=#{authId} + + + + + + DELETE FROM AUTH WHERE AUTH_ID=#{authId} + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml b/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml new file mode 100644 index 00000000..042d62a6 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml @@ -0,0 +1,78 @@ + + + + + + + INSERT INTO MEMBER(MEM_ID, + MEM_PW, + MEM_NAME, MEM_IMAGE, MEM_STATUS, MEM_LOGIN, + MEM_AUTH_ID, + ) VALUES(#{memId}, + #{memPw}, + #{memName}, #{memImage}, 1, SYSDATE, + #{memAuthId}, + ) + + + + + + + UPDATE MEMBER SET MEM_PW=#{memPw} WHERE MEM_ID=#{memId} + + + + + + + UPDATE MEMBER + + + MEM_PW=#{memPw}, + + + MEM_NAME=#{memName}, + + + MEM_IMAGE=#{memImage}, + + + MEM_STATUS=#{memStatus}, + + + MEM_LOGIN=SYSDATE, + + + MEM_AUTH_ID=#{memAuthId} + + + WHERE MEM_ID=#{memId} + + + + + + DELETE FROM MEMBER WHERE MEM_ID=#{memId} + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml new file mode 100644 index 00000000..81b5bd8d --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml @@ -0,0 +1,119 @@ + + + + + + + INSERT INTO SCHEDULE VALUES( #{scTitle}, #{scContent}, #{scSdate}, #{scEdate}, #{scStatus}, #{scProgress}) + + + + + + UPDATE SCHEDULE + + + SC_TITLE=#{scTitle}, + + + SC_CONTENT=#{scContent}, + + + SC_SDATE=#{scSdate}, + + + SC_EDATE=#{scEdate}, + + + SC_STATUS=#{scStatus} + + + SC_PROGRESS=#{scProgress} + + + WHERE SC_NO=#{scNo} + + + + + + DELETE FROM SCHEDULE WHERE SC_NO=#{scNo} CASCADE + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml new file mode 100644 index 00000000..37fe70c4 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + INSERT INTO TEAM VALUES( #{teamMid}, #{teamSno}, #{teamLevel}, 0) + + + + + + UPDATE TEAM + + + TEAM_LEVEL=#{teamLevel}, + + + TEAM_BOOKMARK=#{teamBookmark}, + + + WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} + + + + + DELETE FROM TEAM WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From e9a59d2300c9dcca8a21cf172a4f62153e6f5e59 Mon Sep 17 00:00:00 2001 From: Ggggggaaq <119154503+Ggggggaaq@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:25:56 +0900 Subject: [PATCH 023/895] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ddasass * ddas * Create README.md 프로젝트와 팀에 관한 내용 * Update README.md * Update README.md * ddasass * Create README.md 프로젝트와 팀에 관한 내용 * Update README.md * Update README.md * Update README.md * Test Commit and Push * Muaa (#4) * test * test * docs/DTO(Alarm,Auth,Member,Schedule,Team) 파일 생성 * docs/DOMAIN(MySchedule) 파일 생성 * docs/MAPPER(Alarm,Auth,Member,Schedule,Team) 파일 생성 --------- Co-authored-by: BeefCutlet <77325024+BeefCutlet@users.noreply.github.com> Co-authored-by: Owner Co-authored-by: mu-aa --- .../com/effourt/calenkit/domain/Alarm.java | 15 +++ .../com/effourt/calenkit/domain/Auth.java | 12 ++ .../com/effourt/calenkit/domain/Member.java | 16 +++ .../com/effourt/calenkit/domain/Schedule.java | 16 +++ .../com/effourt/calenkit/domain/Team.java | 15 +++ .../com/effourt/calenkit/dto/MySchedule.java | 14 +++ .../effourt/calenkit/mapper/AlarmMapper.xml | 33 +++++ .../effourt/calenkit/mapper/AuthMapper.xml | 25 ++++ .../effourt/calenkit/mapper/MemberMapper.xml | 78 ++++++++++++ .../calenkit/mapper/ScheduleMapper.xml | 119 ++++++++++++++++++ .../effourt/calenkit/mapper/TeamMapper.xml | 72 +++++++++++ .../calenkit/CalenkitApplicationTests.java | 1 + 12 files changed, 416 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/domain/Alarm.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Auth.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Member.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Schedule.java create mode 100644 src/main/java/com/effourt/calenkit/domain/Team.java create mode 100644 src/main/java/com/effourt/calenkit/dto/MySchedule.java create mode 100644 src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml diff --git a/src/main/java/com/effourt/calenkit/domain/Alarm.java b/src/main/java/com/effourt/calenkit/domain/Alarm.java new file mode 100644 index 00000000..ec322b2d --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Alarm.java @@ -0,0 +1,15 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Alarm { + private Integer alNo; + private String alScNo; + private String alMid; + private Integer alStatus; + private String alTime; + private Integer alCate; +} diff --git a/src/main/java/com/effourt/calenkit/domain/Auth.java b/src/main/java/com/effourt/calenkit/domain/Auth.java new file mode 100644 index 00000000..bf7fe885 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Auth.java @@ -0,0 +1,12 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Auth { + private Integer authId; + private String authRefresh; + private String authAccess; +} diff --git a/src/main/java/com/effourt/calenkit/domain/Member.java b/src/main/java/com/effourt/calenkit/domain/Member.java new file mode 100644 index 00000000..53975a08 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Member.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Member { + private Integer memAuthId; + private String memId; + private String memImage; + private String memLogin; + private String memName; + private String memPw; + private Integer memStatus; +} \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/domain/Schedule.java b/src/main/java/com/effourt/calenkit/domain/Schedule.java new file mode 100644 index 00000000..68a554d9 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Schedule.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.domain; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Schedule { + private Integer scNo; + private String scTitle; + private String scContent; + private String scSdate; + private String scEdate; + private Integer scStatus; + private Integer scProgress; +} diff --git a/src/main/java/com/effourt/calenkit/domain/Team.java b/src/main/java/com/effourt/calenkit/domain/Team.java new file mode 100644 index 00000000..144cd812 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/domain/Team.java @@ -0,0 +1,15 @@ +package com.effourt.calenkit.domain; + + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Team { + private Integer teamNo; + private String teamMid; + private Integer teamSno; + private Integer teamLevel; + private Integer teamBookmark; +} diff --git a/src/main/java/com/effourt/calenkit/dto/MySchedule.java b/src/main/java/com/effourt/calenkit/dto/MySchedule.java new file mode 100644 index 00000000..0770f4de --- /dev/null +++ b/src/main/java/com/effourt/calenkit/dto/MySchedule.java @@ -0,0 +1,14 @@ +package com.effourt.calenkit.dto; + + +import com.effourt.calenkit.domain.Schedule; +import com.effourt.calenkit.domain.Team; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MySchedule { + private Team team; + private Schedule schedule; +} \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml new file mode 100644 index 00000000..735518fa --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -0,0 +1,33 @@ + + + + + + + INSERT INTO ALARM(AL_SCNO, AL_MID, AL_STATUS, AL_TIME, AL_CATE) VALUES(#{alScNo}, #{alMid}, 1, SYSDATE, #{alCate}) + + + + + + UPDATE ALARM SET AL_STATUS=#{alStatus} WHERE AL_NO=#{alNo} + + + + + + DELETE FROM ALARM WHERE AL_NO=#{alNo} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml b/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml new file mode 100644 index 00000000..4ddc84bb --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml @@ -0,0 +1,25 @@ + + + + + + + INSERT INTO Auth(AUTH_REFRESH, AUTH_ACCESS) VALUES(#{authRefresh},#{authAccess}) + + + + + + UPDATE AUTH SET AUTH_ACCESS=#{authAccess} WHERE AUTH_ID=#{authId} + + + + + + DELETE FROM AUTH WHERE AUTH_ID=#{authId} + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml b/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml new file mode 100644 index 00000000..042d62a6 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml @@ -0,0 +1,78 @@ + + + + + + + INSERT INTO MEMBER(MEM_ID, + MEM_PW, + MEM_NAME, MEM_IMAGE, MEM_STATUS, MEM_LOGIN, + MEM_AUTH_ID, + ) VALUES(#{memId}, + #{memPw}, + #{memName}, #{memImage}, 1, SYSDATE, + #{memAuthId}, + ) + + + + + + + UPDATE MEMBER SET MEM_PW=#{memPw} WHERE MEM_ID=#{memId} + + + + + + + UPDATE MEMBER + + + MEM_PW=#{memPw}, + + + MEM_NAME=#{memName}, + + + MEM_IMAGE=#{memImage}, + + + MEM_STATUS=#{memStatus}, + + + MEM_LOGIN=SYSDATE, + + + MEM_AUTH_ID=#{memAuthId} + + + WHERE MEM_ID=#{memId} + + + + + + DELETE FROM MEMBER WHERE MEM_ID=#{memId} + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml new file mode 100644 index 00000000..81b5bd8d --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml @@ -0,0 +1,119 @@ + + + + + + + INSERT INTO SCHEDULE VALUES( #{scTitle}, #{scContent}, #{scSdate}, #{scEdate}, #{scStatus}, #{scProgress}) + + + + + + UPDATE SCHEDULE + + + SC_TITLE=#{scTitle}, + + + SC_CONTENT=#{scContent}, + + + SC_SDATE=#{scSdate}, + + + SC_EDATE=#{scEdate}, + + + SC_STATUS=#{scStatus} + + + SC_PROGRESS=#{scProgress} + + + WHERE SC_NO=#{scNo} + + + + + + DELETE FROM SCHEDULE WHERE SC_NO=#{scNo} CASCADE + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml new file mode 100644 index 00000000..37fe70c4 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + INSERT INTO TEAM VALUES( #{teamMid}, #{teamSno}, #{teamLevel}, 0) + + + + + + UPDATE TEAM + + + TEAM_LEVEL=#{teamLevel}, + + + TEAM_BOOKMARK=#{teamBookmark}, + + + WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} + + + + + DELETE FROM TEAM WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java index 5393a0d4..2a802ddc 100644 --- a/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java +++ b/src/test/java/com/effourt/calenkit/CalenkitApplicationTests.java @@ -8,6 +8,7 @@ class CalenkitApplicationTests { @Test void contextLoads() { + System.out.println("확인ss"); } } From 4eed74055f817ca09285c0540f79102605656f74 Mon Sep 17 00:00:00 2001 From: Lee Date: Fri, 14 Apr 2023 17:48:01 +0900 Subject: [PATCH 024/895] =?UTF-8?q?Docs/Controller,Exception,Repository,Se?= =?UTF-8?q?rvice,Util=20=ED=8F=B4=EB=8D=94=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/controller/index.html | 10 ++++++++++ .../java/com/effourt/calenkit/exception/index.html | 10 ++++++++++ .../java/com/effourt/calenkit/repository/index.html | 10 ++++++++++ src/main/java/com/effourt/calenkit/service/index.html | 10 ++++++++++ src/main/java/com/effourt/calenkit/util/index.html | 10 ++++++++++ 5 files changed, 50 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/controller/index.html create mode 100644 src/main/java/com/effourt/calenkit/exception/index.html create mode 100644 src/main/java/com/effourt/calenkit/repository/index.html create mode 100644 src/main/java/com/effourt/calenkit/service/index.html create mode 100644 src/main/java/com/effourt/calenkit/util/index.html diff --git a/src/main/java/com/effourt/calenkit/controller/index.html b/src/main/java/com/effourt/calenkit/controller/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/controller/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/exception/index.html b/src/main/java/com/effourt/calenkit/exception/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/exception/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/repository/index.html b/src/main/java/com/effourt/calenkit/repository/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/repository/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/service/index.html b/src/main/java/com/effourt/calenkit/service/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/service/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/util/index.html b/src/main/java/com/effourt/calenkit/util/index.html new file mode 100644 index 00000000..5a9d5bc7 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/util/index.html @@ -0,0 +1,10 @@ + + + + + TEST + + + TEST! + + \ No newline at end of file From c2083b81f05f7d47ba5539337c0b0ec0c52585fb Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sun, 16 Apr 2023 20:50:09 +0900 Subject: [PATCH 025/895] =?UTF-8?q?[DOCS]=20Mybatis=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?,=20=EC=BA=98=EB=A6=B0=EB=8D=94=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EC=98=88=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 7 + .../calenkit/config/MybatisConfig.java | 28 + .../calenkit/controller/AuthController.java | 31 + .../com/effourt/calenkit/domain/Alarm.java | 2 +- .../effourt/calenkit/mapper/AlarmMapper.java | 16 + .../effourt/calenkit/mapper/AuthMapper.java | 14 + .../effourt/calenkit/mapper/MemberMapper.java | 16 + .../calenkit/mapper/ScheduleMapper.java | 12 + .../effourt/calenkit/mapper/TeamMapper.java | 13 + .../effourt/calenkit/mapper/TeamMapper.xml | 72 - .../calenkit/repository/AuthRepository.java | 13 + .../repository/AuthRepositoryImpl.java | 40 + .../effourt/calenkit/service/AuthService.java | 7 + .../calenkit/service/AuthServiceImpl.java | 28 + src/main/resources/application.properties | 6 + .../effourt/calenkit/mapper/AlarmMapper.xml | 4 +- .../effourt/calenkit/mapper/AuthMapper.xml | 10 +- .../effourt/calenkit/mapper/MemberMapper.xml | 2 +- .../calenkit/mapper/ScheduleMapper.xml | 36 +- .../effourt/calenkit/mapper/TeamMapper.xml | 71 + .../static/packages/bootstrap/LICENSE.txt | 20 + .../static/packages/bootstrap/README.md | 8 + .../static/packages/bootstrap/main.css | 36 + .../static/packages/bootstrap/main.d.ts | 12 + .../static/packages/bootstrap/main.esm.js | 83 + .../static/packages/bootstrap/main.js | 91 + .../static/packages/bootstrap/main.js.map | 1 + .../static/packages/bootstrap/main.min.css | 1 + .../static/packages/bootstrap/main.min.js | 6 + .../static/packages/bootstrap/package.json | 33 + .../static/packages/bundle/google-calendar.js | 156 + .../packages/bundle/google-calendar.js.map | 1 + .../packages/bundle/google-calendar.min.js | 6 + .../static/packages/bundle/locales-all.js | 1411 +++ .../static/packages/bundle/locales-all.min.js | 1 + .../static/packages/bundle/locales/af.js | 30 + .../static/packages/bundle/locales/ar-dz.js | 31 + .../static/packages/bundle/locales/ar-kw.js | 31 + .../static/packages/bundle/locales/ar-ly.js | 31 + .../static/packages/bundle/locales/ar-ma.js | 31 + .../static/packages/bundle/locales/ar-sa.js | 31 + .../static/packages/bundle/locales/ar-tn.js | 31 + .../static/packages/bundle/locales/ar.js | 31 + .../static/packages/bundle/locales/bg.js | 31 + .../static/packages/bundle/locales/bs.js | 32 + .../static/packages/bundle/locales/ca.js | 30 + .../static/packages/bundle/locales/cs.js | 32 + .../static/packages/bundle/locales/da.js | 30 + .../static/packages/bundle/locales/de.js | 33 + .../static/packages/bundle/locales/el.js | 30 + .../static/packages/bundle/locales/en-au.js | 17 + .../static/packages/bundle/locales/en-gb.js | 17 + .../static/packages/bundle/locales/en-nz.js | 17 + .../static/packages/bundle/locales/es-us.js | 30 + .../static/packages/bundle/locales/es.js | 30 + .../static/packages/bundle/locales/et.js | 32 + .../static/packages/bundle/locales/eu.js | 30 + .../static/packages/bundle/locales/fa.js | 33 + .../static/packages/bundle/locales/fi.js | 30 + .../static/packages/bundle/locales/fr-ca.js | 27 + .../static/packages/bundle/locales/fr-ch.js | 31 + .../static/packages/bundle/locales/fr.js | 31 + .../static/packages/bundle/locales/gl.js | 30 + .../static/packages/bundle/locales/he.js | 27 + .../static/packages/bundle/locales/hi.js | 32 + .../static/packages/bundle/locales/hr.js | 32 + .../static/packages/bundle/locales/hu.js | 30 + .../static/packages/bundle/locales/id.js | 30 + .../static/packages/bundle/locales/is.js | 30 + .../static/packages/bundle/locales/it.js | 32 + .../static/packages/bundle/locales/ja.js | 28 + .../static/packages/bundle/locales/ka.js | 32 + .../static/packages/bundle/locales/kk.js | 32 + .../static/packages/bundle/locales/ko.js | 26 + .../static/packages/bundle/locales/lb.js | 30 + .../static/packages/bundle/locales/lt.js | 30 + .../static/packages/bundle/locales/lv.js | 32 + .../static/packages/bundle/locales/mk.js | 28 + .../static/packages/bundle/locales/ms.js | 32 + .../static/packages/bundle/locales/nb.js | 30 + .../static/packages/bundle/locales/nl.js | 30 + .../static/packages/bundle/locales/nn.js | 30 + .../static/packages/bundle/locales/pl.js | 30 + .../static/packages/bundle/locales/pt-br.js | 28 + .../static/packages/bundle/locales/pt.js | 30 + .../static/packages/bundle/locales/ro.js | 32 + .../static/packages/bundle/locales/ru.js | 32 + .../static/packages/bundle/locales/sk.js | 32 + .../static/packages/bundle/locales/sl.js | 30 + .../static/packages/bundle/locales/sq.js | 32 + .../static/packages/bundle/locales/sr-cyrl.js | 32 + .../static/packages/bundle/locales/sr.js | 32 + .../static/packages/bundle/locales/sv.js | 30 + .../static/packages/bundle/locales/th.js | 33 + .../static/packages/bundle/locales/tr.js | 30 + .../static/packages/bundle/locales/uk.js | 32 + .../static/packages/bundle/locales/vi.js | 32 + .../static/packages/bundle/locales/zh-cn.js | 33 + .../static/packages/bundle/locales/zh-tw.js | 26 + .../resources/static/packages/bundle/luxon.js | 159 + .../static/packages/bundle/luxon.js.map | 1 + .../static/packages/bundle/luxon.min.js | 6 + .../static/packages/bundle/moment-timezone.js | 54 + .../packages/bundle/moment-timezone.js.map | 1 + .../packages/bundle/moment-timezone.min.js | 6 + .../static/packages/bundle/moment.js | 117 + .../static/packages/bundle/moment.js.map | 1 + .../static/packages/bundle/moment.min.js | 6 + .../resources/static/packages/bundle/rrule.js | 117 + .../static/packages/bundle/rrule.js.map | 1 + .../static/packages/bundle/rrule.min.js | 6 + .../static/packages/core/LICENSE.txt | 20 + .../resources/static/packages/core/README.md | 8 + .../static/packages/core/locales-all.js | 1405 +++ .../static/packages/core/locales-all.min.js | 1 + .../static/packages/core/locales/af.js | 30 + .../static/packages/core/locales/ar-dz.js | 31 + .../static/packages/core/locales/ar-kw.js | 31 + .../static/packages/core/locales/ar-ly.js | 31 + .../static/packages/core/locales/ar-ma.js | 31 + .../static/packages/core/locales/ar-sa.js | 31 + .../static/packages/core/locales/ar-tn.js | 31 + .../static/packages/core/locales/ar.js | 31 + .../static/packages/core/locales/az.js | 32 + .../static/packages/core/locales/bg.js | 31 + .../static/packages/core/locales/bs.js | 32 + .../static/packages/core/locales/ca.js | 30 + .../static/packages/core/locales/cs.js | 32 + .../static/packages/core/locales/da.js | 30 + .../static/packages/core/locales/de.js | 33 + .../static/packages/core/locales/el.js | 30 + .../static/packages/core/locales/en-au.js | 17 + .../static/packages/core/locales/en-gb.js | 17 + .../static/packages/core/locales/en-nz.js | 17 + .../static/packages/core/locales/es-us.js | 30 + .../static/packages/core/locales/es.js | 30 + .../static/packages/core/locales/et.js | 32 + .../static/packages/core/locales/eu.js | 30 + .../static/packages/core/locales/fa.js | 33 + .../static/packages/core/locales/fi.js | 30 + .../static/packages/core/locales/fr-ca.js | 27 + .../static/packages/core/locales/fr-ch.js | 31 + .../static/packages/core/locales/fr.js | 31 + .../static/packages/core/locales/gl.js | 30 + .../static/packages/core/locales/he.js | 27 + .../static/packages/core/locales/hi.js | 32 + .../static/packages/core/locales/hr.js | 32 + .../static/packages/core/locales/hu.js | 30 + .../static/packages/core/locales/id.js | 30 + .../static/packages/core/locales/is.js | 30 + .../static/packages/core/locales/it.js | 32 + .../static/packages/core/locales/ja.js | 28 + .../static/packages/core/locales/ka.js | 32 + .../static/packages/core/locales/kk.js | 32 + .../static/packages/core/locales/ko.js | 26 + .../static/packages/core/locales/lb.js | 30 + .../static/packages/core/locales/lt.js | 30 + .../static/packages/core/locales/lv.js | 32 + .../static/packages/core/locales/mk.js | 28 + .../static/packages/core/locales/ms.js | 32 + .../static/packages/core/locales/nb.js | 30 + .../static/packages/core/locales/nl.js | 30 + .../static/packages/core/locales/nn.js | 30 + .../static/packages/core/locales/pl.js | 30 + .../static/packages/core/locales/pt-br.js | 28 + .../static/packages/core/locales/pt.js | 30 + .../static/packages/core/locales/ro.js | 32 + .../static/packages/core/locales/ru.js | 32 + .../static/packages/core/locales/sk.js | 32 + .../static/packages/core/locales/sl.js | 30 + .../static/packages/core/locales/sq.js | 32 + .../static/packages/core/locales/sr-cyrl.js | 32 + .../static/packages/core/locales/sr.js | 32 + .../static/packages/core/locales/sv.js | 30 + .../static/packages/core/locales/th.js | 33 + .../static/packages/core/locales/tr.js | 30 + .../static/packages/core/locales/ug.js | 20 + .../static/packages/core/locales/uk.js | 32 + .../static/packages/core/locales/uz.js | 24 + .../static/packages/core/locales/vi.js | 32 + .../static/packages/core/locales/zh-cn.js | 33 + .../static/packages/core/locales/zh-tw.js | 26 + .../resources/static/packages/core/main.css | 1052 ++ .../resources/static/packages/core/main.d.ts | 2734 ++++++ .../static/packages/core/main.esm.js | 8577 ++++++++++++++++ .../resources/static/packages/core/main.js | 8740 +++++++++++++++++ .../static/packages/core/main.js.map | 1 + .../static/packages/core/main.min.css | 1 + .../static/packages/core/main.min.js | 6 + .../static/packages/core/package.json | 30 + .../static/packages/daygrid/LICENSE.txt | 20 + .../static/packages/daygrid/README.md | 8 + .../static/packages/daygrid/main.css | 78 + .../static/packages/daygrid/main.d.ts | 316 + .../static/packages/daygrid/main.esm.js | 1654 ++++ .../resources/static/packages/daygrid/main.js | 1668 ++++ .../static/packages/daygrid/main.js.map | 1 + .../static/packages/daygrid/main.min.css | 1 + .../static/packages/daygrid/main.min.js | 6 + .../static/packages/daygrid/package.json | 33 + .../packages/google-calendar/LICENSE.txt | 20 + .../static/packages/google-calendar/README.md | 8 + .../static/packages/google-calendar/main.d.ts | 21 + .../packages/google-calendar/main.esm.js | 167 + .../static/packages/google-calendar/main.js | 175 + .../packages/google-calendar/main.js.map | 1 + .../packages/google-calendar/main.min.js | 6 + .../packages/google-calendar/package.json | 33 + .../static/packages/interaction/LICENSE.txt | 20 + .../static/packages/interaction/README.md | 8 + .../static/packages/interaction/main.d.ts | 323 + .../static/packages/interaction/main.esm.js | 2141 ++++ .../static/packages/interaction/main.js | 2152 ++++ .../static/packages/interaction/main.js.map | 1 + .../static/packages/interaction/main.min.js | 6 + .../static/packages/interaction/package.json | 33 + .../static/packages/list/LICENSE.txt | 20 + .../resources/static/packages/list/README.md | 8 + .../resources/static/packages/list/main.css | 118 + .../resources/static/packages/list/main.d.ts | 36 + .../static/packages/list/main.esm.js | 348 + .../resources/static/packages/list/main.js | 356 + .../static/packages/list/main.js.map | 1 + .../static/packages/list/main.min.css | 1 + .../static/packages/list/main.min.js | 6 + .../static/packages/list/package.json | 33 + .../static/packages/luxon/LICENSE.txt | 20 + .../resources/static/packages/luxon/README.md | 8 + .../resources/static/packages/luxon/main.d.ts | 14 + .../static/packages/luxon/main.esm.js | 162 + .../resources/static/packages/luxon/main.js | 170 + .../static/packages/luxon/main.js.map | 1 + .../static/packages/luxon/main.min.js | 6 + .../static/packages/luxon/package.json | 34 + .../packages/moment-timezone/LICENSE.txt | 20 + .../static/packages/moment-timezone/README.md | 8 + .../static/packages/moment-timezone/main.d.ts | 11 + .../packages/moment-timezone/main.esm.js | 58 + .../static/packages/moment-timezone/main.js | 64 + .../packages/moment-timezone/main.js.map | 1 + .../packages/moment-timezone/main.min.js | 6 + .../packages/moment-timezone/package.json | 35 + .../static/packages/moment/LICENSE.txt | 20 + .../static/packages/moment/README.md | 8 + .../static/packages/moment/main.d.ts | 14 + .../static/packages/moment/main.esm.js | 102 + .../resources/static/packages/moment/main.js | 110 + .../static/packages/moment/main.js.map | 1 + .../static/packages/moment/main.min.js | 6 + .../static/packages/moment/package.json | 34 + .../static/packages/rrule/LICENSE.txt | 20 + .../resources/static/packages/rrule/README.md | 8 + .../resources/static/packages/rrule/main.d.ts | 9 + .../static/packages/rrule/main.esm.js | 121 + .../resources/static/packages/rrule/main.js | 128 + .../static/packages/rrule/main.js.map | 1 + .../static/packages/rrule/main.min.js | 6 + .../static/packages/rrule/package.json | 34 + .../static/packages/timegrid/LICENSE.txt | 20 + .../static/packages/timegrid/README.md | 8 + .../static/packages/timegrid/main.css | 309 + .../static/packages/timegrid/main.d.ts | 224 + .../static/packages/timegrid/main.esm.js | 1389 +++ .../static/packages/timegrid/main.js | 1401 +++ .../static/packages/timegrid/main.js.map | 1 + .../static/packages/timegrid/main.min.css | 1 + .../static/packages/timegrid/main.min.js | 6 + .../static/packages/timegrid/package.json | 36 + src/main/resources/templates/index.html | 128 + .../calenkit/service/AuthServiceImplTest.java | 35 + src/test/resources/application.properties | 8 + 271 files changed, 43792 insertions(+), 99 deletions(-) create mode 100644 src/main/java/com/effourt/calenkit/config/MybatisConfig.java create mode 100644 src/main/java/com/effourt/calenkit/controller/AuthController.java create mode 100644 src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java create mode 100644 src/main/java/com/effourt/calenkit/mapper/AuthMapper.java create mode 100644 src/main/java/com/effourt/calenkit/mapper/MemberMapper.java create mode 100644 src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java create mode 100644 src/main/java/com/effourt/calenkit/mapper/TeamMapper.java delete mode 100644 src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml create mode 100644 src/main/java/com/effourt/calenkit/repository/AuthRepository.java create mode 100644 src/main/java/com/effourt/calenkit/repository/AuthRepositoryImpl.java create mode 100644 src/main/java/com/effourt/calenkit/service/AuthService.java create mode 100644 src/main/java/com/effourt/calenkit/service/AuthServiceImpl.java rename src/main/{java => resources}/com/effourt/calenkit/mapper/AlarmMapper.xml (89%) rename src/main/{java => resources}/com/effourt/calenkit/mapper/AuthMapper.xml (64%) rename src/main/{java => resources}/com/effourt/calenkit/mapper/MemberMapper.xml (97%) rename src/main/{java => resources}/com/effourt/calenkit/mapper/ScheduleMapper.xml (75%) create mode 100644 src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml create mode 100644 src/main/resources/static/packages/bootstrap/LICENSE.txt create mode 100644 src/main/resources/static/packages/bootstrap/README.md create mode 100644 src/main/resources/static/packages/bootstrap/main.css create mode 100644 src/main/resources/static/packages/bootstrap/main.d.ts create mode 100644 src/main/resources/static/packages/bootstrap/main.esm.js create mode 100644 src/main/resources/static/packages/bootstrap/main.js create mode 100644 src/main/resources/static/packages/bootstrap/main.js.map create mode 100644 src/main/resources/static/packages/bootstrap/main.min.css create mode 100644 src/main/resources/static/packages/bootstrap/main.min.js create mode 100644 src/main/resources/static/packages/bootstrap/package.json create mode 100644 src/main/resources/static/packages/bundle/google-calendar.js create mode 100644 src/main/resources/static/packages/bundle/google-calendar.js.map create mode 100644 src/main/resources/static/packages/bundle/google-calendar.min.js create mode 100644 src/main/resources/static/packages/bundle/locales-all.js create mode 100644 src/main/resources/static/packages/bundle/locales-all.min.js create mode 100644 src/main/resources/static/packages/bundle/locales/af.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar-dz.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar-kw.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar-ly.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar-ma.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar-sa.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar-tn.js create mode 100644 src/main/resources/static/packages/bundle/locales/ar.js create mode 100644 src/main/resources/static/packages/bundle/locales/bg.js create mode 100644 src/main/resources/static/packages/bundle/locales/bs.js create mode 100644 src/main/resources/static/packages/bundle/locales/ca.js create mode 100644 src/main/resources/static/packages/bundle/locales/cs.js create mode 100644 src/main/resources/static/packages/bundle/locales/da.js create mode 100644 src/main/resources/static/packages/bundle/locales/de.js create mode 100644 src/main/resources/static/packages/bundle/locales/el.js create mode 100644 src/main/resources/static/packages/bundle/locales/en-au.js create mode 100644 src/main/resources/static/packages/bundle/locales/en-gb.js create mode 100644 src/main/resources/static/packages/bundle/locales/en-nz.js create mode 100644 src/main/resources/static/packages/bundle/locales/es-us.js create mode 100644 src/main/resources/static/packages/bundle/locales/es.js create mode 100644 src/main/resources/static/packages/bundle/locales/et.js create mode 100644 src/main/resources/static/packages/bundle/locales/eu.js create mode 100644 src/main/resources/static/packages/bundle/locales/fa.js create mode 100644 src/main/resources/static/packages/bundle/locales/fi.js create mode 100644 src/main/resources/static/packages/bundle/locales/fr-ca.js create mode 100644 src/main/resources/static/packages/bundle/locales/fr-ch.js create mode 100644 src/main/resources/static/packages/bundle/locales/fr.js create mode 100644 src/main/resources/static/packages/bundle/locales/gl.js create mode 100644 src/main/resources/static/packages/bundle/locales/he.js create mode 100644 src/main/resources/static/packages/bundle/locales/hi.js create mode 100644 src/main/resources/static/packages/bundle/locales/hr.js create mode 100644 src/main/resources/static/packages/bundle/locales/hu.js create mode 100644 src/main/resources/static/packages/bundle/locales/id.js create mode 100644 src/main/resources/static/packages/bundle/locales/is.js create mode 100644 src/main/resources/static/packages/bundle/locales/it.js create mode 100644 src/main/resources/static/packages/bundle/locales/ja.js create mode 100644 src/main/resources/static/packages/bundle/locales/ka.js create mode 100644 src/main/resources/static/packages/bundle/locales/kk.js create mode 100644 src/main/resources/static/packages/bundle/locales/ko.js create mode 100644 src/main/resources/static/packages/bundle/locales/lb.js create mode 100644 src/main/resources/static/packages/bundle/locales/lt.js create mode 100644 src/main/resources/static/packages/bundle/locales/lv.js create mode 100644 src/main/resources/static/packages/bundle/locales/mk.js create mode 100644 src/main/resources/static/packages/bundle/locales/ms.js create mode 100644 src/main/resources/static/packages/bundle/locales/nb.js create mode 100644 src/main/resources/static/packages/bundle/locales/nl.js create mode 100644 src/main/resources/static/packages/bundle/locales/nn.js create mode 100644 src/main/resources/static/packages/bundle/locales/pl.js create mode 100644 src/main/resources/static/packages/bundle/locales/pt-br.js create mode 100644 src/main/resources/static/packages/bundle/locales/pt.js create mode 100644 src/main/resources/static/packages/bundle/locales/ro.js create mode 100644 src/main/resources/static/packages/bundle/locales/ru.js create mode 100644 src/main/resources/static/packages/bundle/locales/sk.js create mode 100644 src/main/resources/static/packages/bundle/locales/sl.js create mode 100644 src/main/resources/static/packages/bundle/locales/sq.js create mode 100644 src/main/resources/static/packages/bundle/locales/sr-cyrl.js create mode 100644 src/main/resources/static/packages/bundle/locales/sr.js create mode 100644 src/main/resources/static/packages/bundle/locales/sv.js create mode 100644 src/main/resources/static/packages/bundle/locales/th.js create mode 100644 src/main/resources/static/packages/bundle/locales/tr.js create mode 100644 src/main/resources/static/packages/bundle/locales/uk.js create mode 100644 src/main/resources/static/packages/bundle/locales/vi.js create mode 100644 src/main/resources/static/packages/bundle/locales/zh-cn.js create mode 100644 src/main/resources/static/packages/bundle/locales/zh-tw.js create mode 100644 src/main/resources/static/packages/bundle/luxon.js create mode 100644 src/main/resources/static/packages/bundle/luxon.js.map create mode 100644 src/main/resources/static/packages/bundle/luxon.min.js create mode 100644 src/main/resources/static/packages/bundle/moment-timezone.js create mode 100644 src/main/resources/static/packages/bundle/moment-timezone.js.map create mode 100644 src/main/resources/static/packages/bundle/moment-timezone.min.js create mode 100644 src/main/resources/static/packages/bundle/moment.js create mode 100644 src/main/resources/static/packages/bundle/moment.js.map create mode 100644 src/main/resources/static/packages/bundle/moment.min.js create mode 100644 src/main/resources/static/packages/bundle/rrule.js create mode 100644 src/main/resources/static/packages/bundle/rrule.js.map create mode 100644 src/main/resources/static/packages/bundle/rrule.min.js create mode 100644 src/main/resources/static/packages/core/LICENSE.txt create mode 100644 src/main/resources/static/packages/core/README.md create mode 100644 src/main/resources/static/packages/core/locales-all.js create mode 100644 src/main/resources/static/packages/core/locales-all.min.js create mode 100644 src/main/resources/static/packages/core/locales/af.js create mode 100644 src/main/resources/static/packages/core/locales/ar-dz.js create mode 100644 src/main/resources/static/packages/core/locales/ar-kw.js create mode 100644 src/main/resources/static/packages/core/locales/ar-ly.js create mode 100644 src/main/resources/static/packages/core/locales/ar-ma.js create mode 100644 src/main/resources/static/packages/core/locales/ar-sa.js create mode 100644 src/main/resources/static/packages/core/locales/ar-tn.js create mode 100644 src/main/resources/static/packages/core/locales/ar.js create mode 100644 src/main/resources/static/packages/core/locales/az.js create mode 100644 src/main/resources/static/packages/core/locales/bg.js create mode 100644 src/main/resources/static/packages/core/locales/bs.js create mode 100644 src/main/resources/static/packages/core/locales/ca.js create mode 100644 src/main/resources/static/packages/core/locales/cs.js create mode 100644 src/main/resources/static/packages/core/locales/da.js create mode 100644 src/main/resources/static/packages/core/locales/de.js create mode 100644 src/main/resources/static/packages/core/locales/el.js create mode 100644 src/main/resources/static/packages/core/locales/en-au.js create mode 100644 src/main/resources/static/packages/core/locales/en-gb.js create mode 100644 src/main/resources/static/packages/core/locales/en-nz.js create mode 100644 src/main/resources/static/packages/core/locales/es-us.js create mode 100644 src/main/resources/static/packages/core/locales/es.js create mode 100644 src/main/resources/static/packages/core/locales/et.js create mode 100644 src/main/resources/static/packages/core/locales/eu.js create mode 100644 src/main/resources/static/packages/core/locales/fa.js create mode 100644 src/main/resources/static/packages/core/locales/fi.js create mode 100644 src/main/resources/static/packages/core/locales/fr-ca.js create mode 100644 src/main/resources/static/packages/core/locales/fr-ch.js create mode 100644 src/main/resources/static/packages/core/locales/fr.js create mode 100644 src/main/resources/static/packages/core/locales/gl.js create mode 100644 src/main/resources/static/packages/core/locales/he.js create mode 100644 src/main/resources/static/packages/core/locales/hi.js create mode 100644 src/main/resources/static/packages/core/locales/hr.js create mode 100644 src/main/resources/static/packages/core/locales/hu.js create mode 100644 src/main/resources/static/packages/core/locales/id.js create mode 100644 src/main/resources/static/packages/core/locales/is.js create mode 100644 src/main/resources/static/packages/core/locales/it.js create mode 100644 src/main/resources/static/packages/core/locales/ja.js create mode 100644 src/main/resources/static/packages/core/locales/ka.js create mode 100644 src/main/resources/static/packages/core/locales/kk.js create mode 100644 src/main/resources/static/packages/core/locales/ko.js create mode 100644 src/main/resources/static/packages/core/locales/lb.js create mode 100644 src/main/resources/static/packages/core/locales/lt.js create mode 100644 src/main/resources/static/packages/core/locales/lv.js create mode 100644 src/main/resources/static/packages/core/locales/mk.js create mode 100644 src/main/resources/static/packages/core/locales/ms.js create mode 100644 src/main/resources/static/packages/core/locales/nb.js create mode 100644 src/main/resources/static/packages/core/locales/nl.js create mode 100644 src/main/resources/static/packages/core/locales/nn.js create mode 100644 src/main/resources/static/packages/core/locales/pl.js create mode 100644 src/main/resources/static/packages/core/locales/pt-br.js create mode 100644 src/main/resources/static/packages/core/locales/pt.js create mode 100644 src/main/resources/static/packages/core/locales/ro.js create mode 100644 src/main/resources/static/packages/core/locales/ru.js create mode 100644 src/main/resources/static/packages/core/locales/sk.js create mode 100644 src/main/resources/static/packages/core/locales/sl.js create mode 100644 src/main/resources/static/packages/core/locales/sq.js create mode 100644 src/main/resources/static/packages/core/locales/sr-cyrl.js create mode 100644 src/main/resources/static/packages/core/locales/sr.js create mode 100644 src/main/resources/static/packages/core/locales/sv.js create mode 100644 src/main/resources/static/packages/core/locales/th.js create mode 100644 src/main/resources/static/packages/core/locales/tr.js create mode 100644 src/main/resources/static/packages/core/locales/ug.js create mode 100644 src/main/resources/static/packages/core/locales/uk.js create mode 100644 src/main/resources/static/packages/core/locales/uz.js create mode 100644 src/main/resources/static/packages/core/locales/vi.js create mode 100644 src/main/resources/static/packages/core/locales/zh-cn.js create mode 100644 src/main/resources/static/packages/core/locales/zh-tw.js create mode 100644 src/main/resources/static/packages/core/main.css create mode 100644 src/main/resources/static/packages/core/main.d.ts create mode 100644 src/main/resources/static/packages/core/main.esm.js create mode 100644 src/main/resources/static/packages/core/main.js create mode 100644 src/main/resources/static/packages/core/main.js.map create mode 100644 src/main/resources/static/packages/core/main.min.css create mode 100644 src/main/resources/static/packages/core/main.min.js create mode 100644 src/main/resources/static/packages/core/package.json create mode 100644 src/main/resources/static/packages/daygrid/LICENSE.txt create mode 100644 src/main/resources/static/packages/daygrid/README.md create mode 100644 src/main/resources/static/packages/daygrid/main.css create mode 100644 src/main/resources/static/packages/daygrid/main.d.ts create mode 100644 src/main/resources/static/packages/daygrid/main.esm.js create mode 100644 src/main/resources/static/packages/daygrid/main.js create mode 100644 src/main/resources/static/packages/daygrid/main.js.map create mode 100644 src/main/resources/static/packages/daygrid/main.min.css create mode 100644 src/main/resources/static/packages/daygrid/main.min.js create mode 100644 src/main/resources/static/packages/daygrid/package.json create mode 100644 src/main/resources/static/packages/google-calendar/LICENSE.txt create mode 100644 src/main/resources/static/packages/google-calendar/README.md create mode 100644 src/main/resources/static/packages/google-calendar/main.d.ts create mode 100644 src/main/resources/static/packages/google-calendar/main.esm.js create mode 100644 src/main/resources/static/packages/google-calendar/main.js create mode 100644 src/main/resources/static/packages/google-calendar/main.js.map create mode 100644 src/main/resources/static/packages/google-calendar/main.min.js create mode 100644 src/main/resources/static/packages/google-calendar/package.json create mode 100644 src/main/resources/static/packages/interaction/LICENSE.txt create mode 100644 src/main/resources/static/packages/interaction/README.md create mode 100644 src/main/resources/static/packages/interaction/main.d.ts create mode 100644 src/main/resources/static/packages/interaction/main.esm.js create mode 100644 src/main/resources/static/packages/interaction/main.js create mode 100644 src/main/resources/static/packages/interaction/main.js.map create mode 100644 src/main/resources/static/packages/interaction/main.min.js create mode 100644 src/main/resources/static/packages/interaction/package.json create mode 100644 src/main/resources/static/packages/list/LICENSE.txt create mode 100644 src/main/resources/static/packages/list/README.md create mode 100644 src/main/resources/static/packages/list/main.css create mode 100644 src/main/resources/static/packages/list/main.d.ts create mode 100644 src/main/resources/static/packages/list/main.esm.js create mode 100644 src/main/resources/static/packages/list/main.js create mode 100644 src/main/resources/static/packages/list/main.js.map create mode 100644 src/main/resources/static/packages/list/main.min.css create mode 100644 src/main/resources/static/packages/list/main.min.js create mode 100644 src/main/resources/static/packages/list/package.json create mode 100644 src/main/resources/static/packages/luxon/LICENSE.txt create mode 100644 src/main/resources/static/packages/luxon/README.md create mode 100644 src/main/resources/static/packages/luxon/main.d.ts create mode 100644 src/main/resources/static/packages/luxon/main.esm.js create mode 100644 src/main/resources/static/packages/luxon/main.js create mode 100644 src/main/resources/static/packages/luxon/main.js.map create mode 100644 src/main/resources/static/packages/luxon/main.min.js create mode 100644 src/main/resources/static/packages/luxon/package.json create mode 100644 src/main/resources/static/packages/moment-timezone/LICENSE.txt create mode 100644 src/main/resources/static/packages/moment-timezone/README.md create mode 100644 src/main/resources/static/packages/moment-timezone/main.d.ts create mode 100644 src/main/resources/static/packages/moment-timezone/main.esm.js create mode 100644 src/main/resources/static/packages/moment-timezone/main.js create mode 100644 src/main/resources/static/packages/moment-timezone/main.js.map create mode 100644 src/main/resources/static/packages/moment-timezone/main.min.js create mode 100644 src/main/resources/static/packages/moment-timezone/package.json create mode 100644 src/main/resources/static/packages/moment/LICENSE.txt create mode 100644 src/main/resources/static/packages/moment/README.md create mode 100644 src/main/resources/static/packages/moment/main.d.ts create mode 100644 src/main/resources/static/packages/moment/main.esm.js create mode 100644 src/main/resources/static/packages/moment/main.js create mode 100644 src/main/resources/static/packages/moment/main.js.map create mode 100644 src/main/resources/static/packages/moment/main.min.js create mode 100644 src/main/resources/static/packages/moment/package.json create mode 100644 src/main/resources/static/packages/rrule/LICENSE.txt create mode 100644 src/main/resources/static/packages/rrule/README.md create mode 100644 src/main/resources/static/packages/rrule/main.d.ts create mode 100644 src/main/resources/static/packages/rrule/main.esm.js create mode 100644 src/main/resources/static/packages/rrule/main.js create mode 100644 src/main/resources/static/packages/rrule/main.js.map create mode 100644 src/main/resources/static/packages/rrule/main.min.js create mode 100644 src/main/resources/static/packages/rrule/package.json create mode 100644 src/main/resources/static/packages/timegrid/LICENSE.txt create mode 100644 src/main/resources/static/packages/timegrid/README.md create mode 100644 src/main/resources/static/packages/timegrid/main.css create mode 100644 src/main/resources/static/packages/timegrid/main.d.ts create mode 100644 src/main/resources/static/packages/timegrid/main.esm.js create mode 100644 src/main/resources/static/packages/timegrid/main.js create mode 100644 src/main/resources/static/packages/timegrid/main.js.map create mode 100644 src/main/resources/static/packages/timegrid/main.min.css create mode 100644 src/main/resources/static/packages/timegrid/main.min.js create mode 100644 src/main/resources/static/packages/timegrid/package.json create mode 100644 src/main/resources/templates/index.html create mode 100644 src/test/java/com/effourt/calenkit/service/AuthServiceImplTest.java create mode 100644 src/test/resources/application.properties diff --git a/build.gradle b/build.gradle index b4179d03..871309aa 100644 --- a/build.gradle +++ b/build.gradle @@ -21,9 +21,16 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + runtimeOnly 'mysql:mysql-connector-java:8.0.28' + + testImplementation 'org.projectlombok:lombok:1.18.22' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testCompileOnly 'org.projectlombok:lombok' + testAnnotationProcessor 'org.projectlombok:lombok' } tasks.named('test') { diff --git a/src/main/java/com/effourt/calenkit/config/MybatisConfig.java b/src/main/java/com/effourt/calenkit/config/MybatisConfig.java new file mode 100644 index 00000000..7ed23fb7 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/config/MybatisConfig.java @@ -0,0 +1,28 @@ +package com.effourt.calenkit.config; + +import com.effourt.calenkit.repository.AuthRepository; +import com.effourt.calenkit.repository.AuthRepositoryImpl; +import com.effourt.calenkit.service.AuthService; +import com.effourt.calenkit.service.AuthServiceImpl; +import lombok.RequiredArgsConstructor; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class MybatisConfig { + + private final SqlSessionTemplate sqlSessionTemplate; + + @Bean + public AuthRepository authRepository() { + return new AuthRepositoryImpl(sqlSessionTemplate); + } + + @Bean + public AuthService authService() { + return new AuthServiceImpl(authRepository()); + } + +} diff --git a/src/main/java/com/effourt/calenkit/controller/AuthController.java b/src/main/java/com/effourt/calenkit/controller/AuthController.java new file mode 100644 index 00000000..b7d3826b --- /dev/null +++ b/src/main/java/com/effourt/calenkit/controller/AuthController.java @@ -0,0 +1,31 @@ +package com.effourt.calenkit.controller; + +import com.effourt.calenkit.domain.Auth; +import com.effourt.calenkit.service.AuthService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +@RequiredArgsConstructor +public class AuthController { + + private final AuthService authService; + + @GetMapping("/") + public String test() { + return "index"; + } + + @GetMapping("/test") + public String test2(Model model) { + Auth auth = new Auth(); + auth.setAuthRefresh("AAAA"); + auth.setAuthAccess("BBBB"); + Auth savedToken = authService.saveToken(auth); + model.addAttribute("refresh", savedToken.getAuthRefresh()); + model.addAttribute("access", savedToken.getAuthAccess()); + return "index"; + } +} diff --git a/src/main/java/com/effourt/calenkit/domain/Alarm.java b/src/main/java/com/effourt/calenkit/domain/Alarm.java index ec322b2d..18a94abd 100644 --- a/src/main/java/com/effourt/calenkit/domain/Alarm.java +++ b/src/main/java/com/effourt/calenkit/domain/Alarm.java @@ -7,7 +7,7 @@ @Setter public class Alarm { private Integer alNo; - private String alScNo; + private String alScno; private String alMid; private Integer alStatus; private String alTime; diff --git a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java new file mode 100644 index 00000000..5eb42528 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.mapper; + +import com.effourt.calenkit.domain.Alarm; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface AlarmMapper { + + Integer save(Alarm alarm); + Integer update(Alarm alarm); + Integer delete(Integer alNo); + Alarm findByAlNo(Integer alNo); + List findByAlMid(String alMid); +} diff --git a/src/main/java/com/effourt/calenkit/mapper/AuthMapper.java b/src/main/java/com/effourt/calenkit/mapper/AuthMapper.java new file mode 100644 index 00000000..24019496 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/AuthMapper.java @@ -0,0 +1,14 @@ +package com.effourt.calenkit.mapper; + +import com.effourt.calenkit.domain.Auth; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AuthMapper { + + Auth save(Auth auth); + Integer update(Auth auth); + Integer delete(Integer authId); + Auth findByAuthId(Integer authId); + +} diff --git a/src/main/java/com/effourt/calenkit/mapper/MemberMapper.java b/src/main/java/com/effourt/calenkit/mapper/MemberMapper.java new file mode 100644 index 00000000..d561204a --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/MemberMapper.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.mapper; + +import com.effourt.calenkit.domain.Member; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface MemberMapper { + + Integer save(Member member); + Integer updatePassword(Member member); + Integer update(Member member); + Integer delete(Integer memId); + List findAll(Integer memId); +} diff --git a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java new file mode 100644 index 00000000..dfb38b04 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java @@ -0,0 +1,12 @@ +package com.effourt.calenkit.mapper; + +import com.effourt.calenkit.domain.Schedule; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ScheduleMapper { + + Integer save(Schedule schedule); + Integer update(Schedule schedule); + Integer delete(Integer scNo); +} diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java new file mode 100644 index 00000000..c4ee47b5 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java @@ -0,0 +1,13 @@ +package com.effourt.calenkit.mapper; + +import com.effourt.calenkit.domain.Team; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TeamMapper { + + Integer save(Team team); + Integer update(Team team); + Integer delete(Integer teamSno, String teamMid); + +} diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml deleted file mode 100644 index 37fe70c4..00000000 --- a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - INSERT INTO TEAM VALUES( #{teamMid}, #{teamSno}, #{teamLevel}, 0) - - - - - - UPDATE TEAM - - - TEAM_LEVEL=#{teamLevel}, - - - TEAM_BOOKMARK=#{teamBookmark}, - - - WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} - - - - - DELETE FROM TEAM WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/repository/AuthRepository.java b/src/main/java/com/effourt/calenkit/repository/AuthRepository.java new file mode 100644 index 00000000..f12da218 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/repository/AuthRepository.java @@ -0,0 +1,13 @@ +package com.effourt.calenkit.repository; + +import com.effourt.calenkit.domain.Auth; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AuthRepository { + + Auth save(Auth auth); + Integer update(Auth auth); + Integer delete(Integer authId); + Auth findByAuthId(Integer authId); +} diff --git a/src/main/java/com/effourt/calenkit/repository/AuthRepositoryImpl.java b/src/main/java/com/effourt/calenkit/repository/AuthRepositoryImpl.java new file mode 100644 index 00000000..37306750 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/repository/AuthRepositoryImpl.java @@ -0,0 +1,40 @@ +package com.effourt.calenkit.repository; + +import com.effourt.calenkit.domain.Auth; +import com.effourt.calenkit.mapper.AuthMapper; +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.stereotype.Repository; + +@Slf4j +@Repository +public class AuthRepositoryImpl implements AuthRepository { + + private SqlSessionTemplate sqlSessionTemplate; + + public AuthRepositoryImpl(SqlSessionTemplate sqlSessionTemplate) { + this.sqlSessionTemplate = sqlSessionTemplate; + } + + @Override + public Auth save(Auth auth) { + log.info("refresh={}", auth.getAuthRefresh()); + log.info("access={}", auth.getAuthAccess()); + return sqlSessionTemplate.getMapper(AuthMapper.class).save(auth); + } + + @Override + public Integer update(Auth auth) { + return sqlSessionTemplate.getMapper(AuthMapper.class).update(auth); + } + + @Override + public Integer delete(Integer authId) { + return sqlSessionTemplate.getMapper(AuthMapper.class).delete(authId); + } + + @Override + public Auth findByAuthId(Integer authId) { + return sqlSessionTemplate.getMapper(AuthMapper.class).findByAuthId(authId); + } +} diff --git a/src/main/java/com/effourt/calenkit/service/AuthService.java b/src/main/java/com/effourt/calenkit/service/AuthService.java new file mode 100644 index 00000000..33081c00 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/service/AuthService.java @@ -0,0 +1,7 @@ +package com.effourt.calenkit.service; + +import com.effourt.calenkit.domain.Auth; + +public interface AuthService { + Auth saveToken(Auth auth); +} diff --git a/src/main/java/com/effourt/calenkit/service/AuthServiceImpl.java b/src/main/java/com/effourt/calenkit/service/AuthServiceImpl.java new file mode 100644 index 00000000..198455bf --- /dev/null +++ b/src/main/java/com/effourt/calenkit/service/AuthServiceImpl.java @@ -0,0 +1,28 @@ +package com.effourt.calenkit.service; + +import com.effourt.calenkit.domain.Auth; +import com.effourt.calenkit.repository.AuthRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class AuthServiceImpl implements AuthService { + + private AuthRepository authRepository; + + public AuthServiceImpl(AuthRepository authRepository) { + this.authRepository = authRepository; + } + + @Override + public Auth saveToken(Auth auth) { + log.info("AuthService.saveToken refresh={}", auth.getAuthRefresh()); + log.info("AuthService.saveToken access={}", auth.getAuthAccess()); + Auth savedAuth = authRepository.save(auth); + log.info("AuthService.authId={}", savedAuth.getAuthId()); + log.info("AuthService.refresh={}", savedAuth.getAuthRefresh()); + log.info("AuthService.access={}", savedAuth.getAuthAccess()); + return savedAuth; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b137891..3ef98886 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,7 @@ +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://calendar-project.ceadvcckvdvf.ap-northeast-2.rds.amazonaws.com:3306/SCHEDULING +spring.datasource.username=admin +spring.datasource.password=zofflsej +mybatis.type-aliases-package=com.effourt.calenkit.domain +mybatis.configuration.map-underscore-to-camel-case=true \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml similarity index 89% rename from src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml rename to src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml index 735518fa..3c0645ff 100644 --- a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -1,10 +1,10 @@ - + - INSERT INTO ALARM(AL_SCNO, AL_MID, AL_STATUS, AL_TIME, AL_CATE) VALUES(#{alScNo}, #{alMid}, 1, SYSDATE, #{alCate}) + INSERT INTO ALARM(AL_SCNO, AL_MID, AL_STATUS, AL_TIME, AL_CATE) VALUES(#{alScno}, #{alMid}, 1, SYSDATE, #{alCate}) diff --git a/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/AuthMapper.xml similarity index 64% rename from src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml rename to src/main/resources/com/effourt/calenkit/mapper/AuthMapper.xml index 4ddc84bb..5266f3b0 100644 --- a/src/main/java/com/effourt/calenkit/mapper/AuthMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/AuthMapper.xml @@ -1,10 +1,10 @@ - + - - INSERT INTO Auth(AUTH_REFRESH, AUTH_ACCESS) VALUES(#{authRefresh},#{authAccess}) + + INSERT INTO AUTH(AUTH_REFRESH, AUTH_ACCESS) VALUES(#{authRefresh}, #{authAccess}) @@ -19,7 +19,7 @@ DELETE FROM AUTH WHERE AUTH_ID=#{authId} - + SELECT AUTH_ID, AUTH_REFRESH, AUTH_ACCESS FROM AUTH WHERE AUTH_ID=#{authId} \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml similarity index 97% rename from src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml rename to src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml index 042d62a6..e56ee2de 100644 --- a/src/main/java/com/effourt/calenkit/mapper/MemberMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml @@ -1,7 +1,7 @@ - + INSERT INTO MEMBER(MEM_ID, diff --git a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml similarity index 75% rename from src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml rename to src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml index 81b5bd8d..0fe9e4f2 100644 --- a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml @@ -1,6 +1,6 @@ - + @@ -42,10 +42,10 @@ - + + + + @@ -96,19 +96,19 @@ - + + + + + + + + + + + + + diff --git a/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml new file mode 100644 index 00000000..122dd0ea --- /dev/null +++ b/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml @@ -0,0 +1,71 @@ + + + + + + + INSERT INTO TEAM VALUES( #{teamMid}, #{teamSno}, #{teamLevel}, 0) + + + + + + UPDATE TEAM + + + TEAM_LEVEL=#{teamLevel}, + + + TEAM_BOOKMARK=#{teamBookmark}, + + + WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} + + + + + DELETE FROM TEAM WHERE TEAM_SNO=#{teamSno} AND TEAM_MID=#{teamMid} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/packages/bootstrap/LICENSE.txt b/src/main/resources/static/packages/bootstrap/LICENSE.txt new file mode 100644 index 00000000..2149cfbe --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2019 Adam Shaw + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/resources/static/packages/bootstrap/README.md b/src/main/resources/static/packages/bootstrap/README.md new file mode 100644 index 00000000..1da7990c --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/README.md @@ -0,0 +1,8 @@ + +# FullCalendar Bootstrap Plugin + +Bootstrap 4 theming for your calendar + +[View the docs »](https://fullcalendar.io/docs/bootstrap-theme) + +This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar) diff --git a/src/main/resources/static/packages/bootstrap/main.css b/src/main/resources/static/packages/bootstrap/main.css new file mode 100644 index 00000000..22b33f56 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.css @@ -0,0 +1,36 @@ +.fc.fc-bootstrap a { + text-decoration: none; +} + +.fc.fc-bootstrap a[data-goto]:hover { + text-decoration: underline; +} + +.fc-bootstrap hr.fc-divider { + border-color: inherit; +} + +.fc-bootstrap .fc-today.alert { + border-radius: 0; +} + +.fc-bootstrap a.fc-event:not([href]):not([tabindex]) { + color: #fff; +} + +.fc-bootstrap .fc-popover.card { + position: absolute; +} + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-bootstrap .fc-popover .card-body { + padding: 0; +} + +/* TimeGrid Slats (lines that run horizontally) +--------------------------------------------------------------------------------------------------*/ +.fc-bootstrap .fc-time-grid .fc-slats table { + /* some themes have background color. see through to slats */ + background: none; +} \ No newline at end of file diff --git a/src/main/resources/static/packages/bootstrap/main.d.ts b/src/main/resources/static/packages/bootstrap/main.d.ts new file mode 100644 index 00000000..4aa91f33 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.d.ts @@ -0,0 +1,12 @@ +// Generated by dts-bundle v0.7.3-fork.1 +// Dependencies for this module: +// ../../../../../@fullcalendar/core + +declare module '@fullcalendar/bootstrap' { + import { Theme } from '@fullcalendar/core'; + export class BootstrapTheme extends Theme { + } + const _default: import("@fullcalendar/core").PluginDef; + export default _default; +} + diff --git a/src/main/resources/static/packages/bootstrap/main.esm.js b/src/main/resources/static/packages/bootstrap/main.esm.js new file mode 100644 index 00000000..3afdc67c --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.esm.js @@ -0,0 +1,83 @@ +/*! +FullCalendar Bootstrap Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +import { createPlugin, Theme } from '@fullcalendar/core'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var BootstrapTheme = /** @class */ (function (_super) { + __extends(BootstrapTheme, _super); + function BootstrapTheme() { + return _super !== null && _super.apply(this, arguments) || this; + } + return BootstrapTheme; +}(Theme)); +BootstrapTheme.prototype.classes = { + widget: 'fc-bootstrap', + tableGrid: 'table-bordered', + tableList: 'table', + tableListHeading: 'table-active', + buttonGroup: 'btn-group', + button: 'btn btn-primary', + buttonActive: 'active', + today: 'alert alert-info', + popover: 'card card-primary', + popoverHeader: 'card-header', + popoverContent: 'card-body', + // day grid + // for left/right border color when border is inset from edges (all-day in timeGrid view) + // avoid `table` class b/c don't want margins/padding/structure. only border color. + headerRow: 'table-bordered', + dayRow: 'table-bordered', + // list view + listView: 'card card-primary' +}; +BootstrapTheme.prototype.baseIconClass = 'fa'; +BootstrapTheme.prototype.iconClasses = { + close: 'fa-times', + prev: 'fa-chevron-left', + next: 'fa-chevron-right', + prevYear: 'fa-angle-double-left', + nextYear: 'fa-angle-double-right' +}; +BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome'; +BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome'; +BootstrapTheme.prototype.iconOverridePrefix = 'fa-'; +var main = createPlugin({ + themeClasses: { + bootstrap: BootstrapTheme + } +}); + +export default main; +export { BootstrapTheme }; diff --git a/src/main/resources/static/packages/bootstrap/main.js b/src/main/resources/static/packages/bootstrap/main.js new file mode 100644 index 00000000..c830d0c9 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.js @@ -0,0 +1,91 @@ +/*! +FullCalendar Bootstrap Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : + typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) : + (global = global || self, factory(global.FullCalendarBootstrap = {}, global.FullCalendar)); +}(this, function (exports, core) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var BootstrapTheme = /** @class */ (function (_super) { + __extends(BootstrapTheme, _super); + function BootstrapTheme() { + return _super !== null && _super.apply(this, arguments) || this; + } + return BootstrapTheme; + }(core.Theme)); + BootstrapTheme.prototype.classes = { + widget: 'fc-bootstrap', + tableGrid: 'table-bordered', + tableList: 'table', + tableListHeading: 'table-active', + buttonGroup: 'btn-group', + button: 'btn btn-primary', + buttonActive: 'active', + today: 'alert alert-info', + popover: 'card card-primary', + popoverHeader: 'card-header', + popoverContent: 'card-body', + // day grid + // for left/right border color when border is inset from edges (all-day in timeGrid view) + // avoid `table` class b/c don't want margins/padding/structure. only border color. + headerRow: 'table-bordered', + dayRow: 'table-bordered', + // list view + listView: 'card card-primary' + }; + BootstrapTheme.prototype.baseIconClass = 'fa'; + BootstrapTheme.prototype.iconClasses = { + close: 'fa-times', + prev: 'fa-chevron-left', + next: 'fa-chevron-right', + prevYear: 'fa-angle-double-left', + nextYear: 'fa-angle-double-right' + }; + BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome'; + BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome'; + BootstrapTheme.prototype.iconOverridePrefix = 'fa-'; + var main = core.createPlugin({ + themeClasses: { + bootstrap: BootstrapTheme + } + }); + + exports.BootstrapTheme = BootstrapTheme; + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/main/resources/static/packages/bootstrap/main.js.map b/src/main/resources/static/packages/bootstrap/main.js.map new file mode 100644 index 00000000..01507b55 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sources":["../../../tmp/tsc-output/packages/bootstrap/src/main.js"],"sourcesContent":["import * as tslib_1 from \"tslib\";\nimport { Theme, createPlugin } from '@fullcalendar/core';\nvar BootstrapTheme = /** @class */ (function (_super) {\n tslib_1.__extends(BootstrapTheme, _super);\n function BootstrapTheme() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return BootstrapTheme;\n}(Theme));\nexport { BootstrapTheme };\nBootstrapTheme.prototype.classes = {\n widget: 'fc-bootstrap',\n tableGrid: 'table-bordered',\n tableList: 'table',\n tableListHeading: 'table-active',\n buttonGroup: 'btn-group',\n button: 'btn btn-primary',\n buttonActive: 'active',\n today: 'alert alert-info',\n popover: 'card card-primary',\n popoverHeader: 'card-header',\n popoverContent: 'card-body',\n // day grid\n // for left/right border color when border is inset from edges (all-day in timeGrid view)\n // avoid `table` class b/c don't want margins/padding/structure. only border color.\n headerRow: 'table-bordered',\n dayRow: 'table-bordered',\n // list view\n listView: 'card card-primary'\n};\nBootstrapTheme.prototype.baseIconClass = 'fa';\nBootstrapTheme.prototype.iconClasses = {\n close: 'fa-times',\n prev: 'fa-chevron-left',\n next: 'fa-chevron-right',\n prevYear: 'fa-angle-double-left',\n nextYear: 'fa-angle-double-right'\n};\nBootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\nBootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\nBootstrapTheme.prototype.iconOverridePrefix = 'fa-';\nexport default createPlugin({\n themeClasses: {\n bootstrap: BootstrapTheme\n }\n});\n"],"names":["tslib_1.__extends"],"mappings":";;;;;;;;;;;AAEG,IAAC,cAAc,KAAkB,UAAU,MAAM,EAAE;AACtD,IAAIA,SAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAC9C,IAAI,SAAS,cAAc,GAAG;AAC9B,QAAQ,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;AACxE,KAAK;AACL,IAAI,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC,KAAK,CAAC,EAAE;AAEV,cAAc,CAAC,SAAS,CAAC,OAAO,GAAG;AACnC,IAAI,MAAM,EAAE,cAAc;AAC1B,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,SAAS,EAAE,OAAO;AACtB,IAAI,gBAAgB,EAAE,cAAc;AACpC,IAAI,WAAW,EAAE,WAAW;AAC5B,IAAI,MAAM,EAAE,iBAAiB;AAC7B,IAAI,YAAY,EAAE,QAAQ;AAC1B,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,OAAO,EAAE,mBAAmB;AAChC,IAAI,aAAa,EAAE,aAAa;AAChC,IAAI,cAAc,EAAE,WAAW;AAI/B,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,MAAM,EAAE,gBAAgB;AAE5B,IAAI,QAAQ,EAAE,mBAAmB;AACjC,CAAC,CAAC;AACF,cAAc,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9C,cAAc,CAAC,SAAS,CAAC,WAAW,GAAG;AACvC,IAAI,KAAK,EAAE,UAAU;AACrB,IAAI,IAAI,EAAE,iBAAiB;AAC3B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,QAAQ,EAAE,sBAAsB;AACpC,IAAI,QAAQ,EAAE,uBAAuB;AACrC,CAAC,CAAC;AACF,cAAc,CAAC,SAAS,CAAC,kBAAkB,GAAG,sBAAsB,CAAC;AACrE,cAAc,CAAC,SAAS,CAAC,8BAA8B,GAAG,sBAAsB,CAAC;AACjF,cAAc,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACpD,WAAe,YAAY,CAAC;AAC5B,IAAI,YAAY,EAAE;AAClB,QAAQ,SAAS,EAAE,cAAc;AACjC,KAAK;AACL,CAAC,CAAC;;;;;"} \ No newline at end of file diff --git a/src/main/resources/static/packages/bootstrap/main.min.css b/src/main/resources/static/packages/bootstrap/main.min.css new file mode 100644 index 00000000..e9249b56 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.min.css @@ -0,0 +1 @@ +.fc.fc-bootstrap a{text-decoration:none}.fc.fc-bootstrap a[data-goto]:hover{text-decoration:underline}.fc-bootstrap hr.fc-divider{border-color:inherit}.fc-bootstrap .fc-today.alert{border-radius:0}.fc-bootstrap a.fc-event:not([href]):not([tabindex]){color:#fff}.fc-bootstrap .fc-popover.card{position:absolute}.fc-bootstrap .fc-popover .card-body{padding:0}.fc-bootstrap .fc-time-grid .fc-slats table{background:0 0} \ No newline at end of file diff --git a/src/main/resources/static/packages/bootstrap/main.min.js b/src/main/resources/static/packages/bootstrap/main.min.js new file mode 100644 index 00000000..b875bee4 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/main.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Bootstrap Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarBootstrap={},e.FullCalendar)}(this,function(e,t){"use strict";var o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};var r=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return function(e,t){function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}(t,e),t}(t.Theme);r.prototype.classes={widget:"fc-bootstrap",tableGrid:"table-bordered",tableList:"table",tableListHeading:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",today:"alert alert-info",popover:"card card-primary",popoverHeader:"card-header",popoverContent:"card-body",headerRow:"table-bordered",dayRow:"table-bordered",listView:"card card-primary"},r.prototype.baseIconClass="fa",r.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},r.prototype.iconOverrideOption="bootstrapFontAwesome",r.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",r.prototype.iconOverridePrefix="fa-";var a=t.createPlugin({themeClasses:{bootstrap:r}});e.BootstrapTheme=r,e.default=a,Object.defineProperty(e,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/src/main/resources/static/packages/bootstrap/package.json b/src/main/resources/static/packages/bootstrap/package.json new file mode 100644 index 00000000..25ea9579 --- /dev/null +++ b/src/main/resources/static/packages/bootstrap/package.json @@ -0,0 +1,33 @@ +{ + "name": "@fullcalendar/bootstrap", + "version": "4.4.0", + "title": "FullCalendar Bootstrap Plugin", + "description": "Bootstrap 4 theming for your calendar", + "keywords": [ + "calendar", + "event", + "full-sized" + ], + "homepage": "https://fullcalendar.io/", + "docs": "https://fullcalendar.io/docs/bootstrap-theme", + "bugs": "https://fullcalendar.io/reporting-bugs", + "repository": { + "type": "git", + "url": "https://github.com/fullcalendar/fullcalendar.git", + "homepage": "https://github.com/fullcalendar/fullcalendar" + }, + "license": "MIT", + "author": { + "name": "Adam Shaw", + "email": "arshaw@arshaw.com", + "url": "http://arshaw.com/" + }, + "copyright": "2019 Adam Shaw", + "peerDependencies": { + "@fullcalendar/core": "~4.4.0" + }, + "main": "main.js", + "module": "main.esm.js", + "unpkg": "main.min.js", + "types": "main.d.ts" +} diff --git a/src/main/resources/static/packages/bundle/google-calendar.js b/src/main/resources/static/packages/bundle/google-calendar.js new file mode 100644 index 00000000..c322f667 --- /dev/null +++ b/src/main/resources/static/packages/bundle/google-calendar.js @@ -0,0 +1,156 @@ +/*! +FullCalendar Google Calendar Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('fullcalendar')) : + typeof define === 'function' && define.amd ? define(['exports', 'fullcalendar'], factory) : + (global = global || self, factory(global.FullCalendar = global.FullCalendar || {}, global.FullCalendar)); +}(this, (function (exports, fullcalendar) { 'use strict'; + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars'; + var STANDARD_PROPS = { + url: String, + googleCalendarApiKey: String, + googleCalendarId: String, + googleCalendarApiBase: String, + data: null + }; + var eventSourceDef = { + parseMeta: function (raw) { + if (typeof raw === 'string') { + raw = { url: raw }; + } + if (typeof raw === 'object') { + var standardProps = fullcalendar.refineProps(raw, STANDARD_PROPS); + if (!standardProps.googleCalendarId && standardProps.url) { + standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url); + } + delete standardProps.url; + if (standardProps.googleCalendarId) { + return standardProps; + } + } + return null; + }, + fetch: function (arg, onSuccess, onFailure) { + var calendar = arg.calendar; + var meta = arg.eventSource.meta; + var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey'); + if (!apiKey) { + onFailure({ + message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/' + }); + } + else { + var url = buildUrl(meta); + var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv); + fullcalendar.requestJson('GET', url, requestParams_1, function (body, xhr) { + if (body.error) { + onFailure({ + message: 'Google Calendar API: ' + body.error.message, + errors: body.error.errors, + xhr: xhr + }); + } + else { + onSuccess({ + rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone), + xhr: xhr + }); + } + }, function (message, xhr) { + onFailure({ message: message, xhr: xhr }); + }); + } + } + }; + function parseGoogleCalendarId(url) { + var match; + if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) { + return url; + } + else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) || + (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) { + return decodeURIComponent(match[1]); + } + } + function buildUrl(meta) { + var apiBase = meta.googleCalendarApiBase; + if (!apiBase) { + apiBase = API_BASE; + } + return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events'; + } + function buildRequestParams(range, apiKey, extraParams, dateEnv) { + var params; + var startStr; + var endStr; + if (dateEnv.canComputeOffset) { + startStr = dateEnv.formatIso(range.start); + endStr = dateEnv.formatIso(range.end); + } + else { + startStr = fullcalendar.addDays(range.start, -1).toISOString(); + endStr = fullcalendar.addDays(range.end, 1).toISOString(); + } + params = __assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 }); + if (dateEnv.timeZone !== 'local') { + params.timeZone = dateEnv.timeZone; + } + return params; + } + function gcalItemsToRawEventDefs(items, gcalTimezone) { + return items.map(function (item) { + return gcalItemToRawEventDef(item, gcalTimezone); + }); + } + function gcalItemToRawEventDef(item, gcalTimezone) { + var url = item.htmlLink || null; + if (url && gcalTimezone) { + url = injectQsComponent(url, 'ctz=' + gcalTimezone); + } + return { + id: item.id, + title: item.summary, + start: item.start.dateTime || item.start.date, + end: item.end.dateTime || item.end.date, + url: url, + location: item.location, + description: item.description + }; + } + function injectQsComponent(url, component) { + return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) { + return (qs ? qs + '&' : '?') + component + hash; + }); + } + var main = fullcalendar.createPlugin({ + eventSourceDefs: [eventSourceDef] + }); + + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + + + if (exports.globalPlugins) { + exports.globalPlugins.push(exports.default) + delete exports.default + } + +}))); +//# sourceMappingURL=google-calendar.js.map diff --git a/src/main/resources/static/packages/bundle/google-calendar.js.map b/src/main/resources/static/packages/bundle/google-calendar.js.map new file mode 100644 index 00000000..fe404364 --- /dev/null +++ b/src/main/resources/static/packages/bundle/google-calendar.js.map @@ -0,0 +1 @@ +{"version":3,"file":"google-calendar.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../tmp/tsc-output/packages/google-calendar/src/main.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nimport { createPlugin, refineProps, addDays, requestJson } from '@fullcalendar/core';\n// TODO: expose somehow\nvar API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';\nvar STANDARD_PROPS = {\n url: String,\n googleCalendarApiKey: String,\n googleCalendarId: String,\n googleCalendarApiBase: String,\n data: null\n};\nvar eventSourceDef = {\n parseMeta: function (raw) {\n if (typeof raw === 'string') {\n raw = { url: raw };\n }\n if (typeof raw === 'object') {\n var standardProps = refineProps(raw, STANDARD_PROPS);\n if (!standardProps.googleCalendarId && standardProps.url) {\n standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url);\n }\n delete standardProps.url;\n if (standardProps.googleCalendarId) {\n return standardProps;\n }\n }\n return null;\n },\n fetch: function (arg, onSuccess, onFailure) {\n var calendar = arg.calendar;\n var meta = arg.eventSource.meta;\n var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey');\n if (!apiKey) {\n onFailure({\n message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/'\n });\n }\n else {\n var url = buildUrl(meta);\n var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv);\n requestJson('GET', url, requestParams_1, function (body, xhr) {\n if (body.error) {\n onFailure({\n message: 'Google Calendar API: ' + body.error.message,\n errors: body.error.errors,\n xhr: xhr\n });\n }\n else {\n onSuccess({\n rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone),\n xhr: xhr\n });\n }\n }, function (message, xhr) {\n onFailure({ message: message, xhr: xhr });\n });\n }\n }\n};\nfunction parseGoogleCalendarId(url) {\n var match;\n // detect if the ID was specified as a single string.\n // will match calendars like \"asdf1234@calendar.google.com\" in addition to person email calendars.\n if (/^[^\\/]+@([^\\/\\.]+\\.)*(google|googlemail|gmail)\\.com$/.test(url)) {\n return url;\n }\n else if ((match = /^https:\\/\\/www.googleapis.com\\/calendar\\/v3\\/calendars\\/([^\\/]*)/.exec(url)) ||\n (match = /^https?:\\/\\/www.google.com\\/calendar\\/feeds\\/([^\\/]*)/.exec(url))) {\n return decodeURIComponent(match[1]);\n }\n}\nfunction buildUrl(meta) {\n var apiBase = meta.googleCalendarApiBase;\n if (!apiBase) {\n apiBase = API_BASE;\n }\n return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events';\n}\nfunction buildRequestParams(range, apiKey, extraParams, dateEnv) {\n var params;\n var startStr;\n var endStr;\n if (dateEnv.canComputeOffset) {\n // strings will naturally have offsets, which GCal needs\n startStr = dateEnv.formatIso(range.start);\n endStr = dateEnv.formatIso(range.end);\n }\n else {\n // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day\n // from the UTC day-start to guarantee we're getting all the events\n // (start/end will be UTC-coerced dates, so toISOString is okay)\n startStr = addDays(range.start, -1).toISOString();\n endStr = addDays(range.end, 1).toISOString();\n }\n params = tslib_1.__assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 });\n if (dateEnv.timeZone !== 'local') {\n params.timeZone = dateEnv.timeZone;\n }\n return params;\n}\nfunction gcalItemsToRawEventDefs(items, gcalTimezone) {\n return items.map(function (item) {\n return gcalItemToRawEventDef(item, gcalTimezone);\n });\n}\nfunction gcalItemToRawEventDef(item, gcalTimezone) {\n var url = item.htmlLink || null;\n // make the URLs for each event show times in the correct timezone\n if (url && gcalTimezone) {\n url = injectQsComponent(url, 'ctz=' + gcalTimezone);\n }\n return {\n id: item.id,\n title: item.summary,\n start: item.start.dateTime || item.start.date,\n end: item.end.dateTime || item.end.date,\n url: url,\n location: item.location,\n description: item.description\n };\n}\n// Injects a string like \"arg=value\" into the querystring of a URL\n// TODO: move to a general util file?\nfunction injectQsComponent(url, component) {\n // inject it after the querystring but before the fragment\n return url.replace(/(\\?.*?)?(#|$)/, function (whole, qs, hash) {\n return (qs ? qs + '&' : '?') + component + hash;\n });\n}\nexport default createPlugin({\n eventSourceDefs: [eventSourceDef]\n});\n"],"names":["refineProps","requestJson","addDays","tslib_1.__assign","createPlugin"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/google-calendar.min.js b/src/main/resources/static/packages/bundle/google-calendar.min.js new file mode 100644 index 00000000..adc162bd --- /dev/null +++ b/src/main/resources/static/packages/bundle/google-calendar.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Google Calendar Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("fullcalendar")):"function"==typeof define&&define.amd?define(["exports","fullcalendar"],r):r((e=e||self).FullCalendar=e.FullCalendar||{},e.FullCalendar)}(this,function(e,r){"use strict";var t=function(){return(t=Object.assign||function(e){for(var r,t=1,n=arguments.length;tel día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + var _m20 = { + code: "es", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Sig", + today: "Hoy", + month: "Mes", + week: "Semana", + day: "Día", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
el día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + var _m21 = { + code: "et", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Eelnev", + next: "Järgnev", + today: "Täna", + month: "Kuu", + week: "Nädal", + day: "Päev", + list: "Päevakord" + }, + weekLabel: "näd", + allDayText: "Kogu päev", + eventLimitText: function (n) { + return "+ veel " + n; + }, + noEventsMessage: "Kuvamiseks puuduvad sündmused" + }; + + var _m22 = { + code: "eu", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Aur", + next: "Hur", + today: "Gaur", + month: "Hilabetea", + week: "Astea", + day: "Eguna", + list: "Agenda" + }, + weekLabel: "As", + allDayHtml: "Egun
osoa", + eventLimitText: "gehiago", + noEventsMessage: "Ez dago ekitaldirik erakusteko" + }; + + var _m23 = { + code: "fa", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "قبلی", + next: "بعدی", + today: "امروز", + month: "ماه", + week: "هفته", + day: "روز", + list: "برنامه" + }, + weekLabel: "هف", + allDayText: "تمام روز", + eventLimitText: function (n) { + return "بیش از " + n; + }, + noEventsMessage: "هیچ رویدادی به نمایش" + }; + + var _m24 = { + code: "fi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Edellinen", + next: "Seuraava", + today: "Tänään", + month: "Kuukausi", + week: "Viikko", + day: "Päivä", + list: "Tapahtumat" + }, + weekLabel: "Vk", + allDayText: "Koko päivä", + eventLimitText: "lisää", + noEventsMessage: "Ei näytettäviä tapahtumia" + }; + + var _m25 = { + code: "fr", + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + var _m26 = { + code: "fr-ch", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Courant", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sm", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + var _m27 = { + code: "fr", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + var _m28 = { + code: "gl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Seg", + today: "Hoxe", + month: "Mes", + week: "Semana", + day: "Día", + list: "Axenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
o día", + eventLimitText: "máis", + noEventsMessage: "Non hai eventos para amosar" + }; + + var _m29 = { + code: "he", + dir: 'rtl', + buttonText: { + prev: "הקודם", + next: "הבא", + today: "היום", + month: "חודש", + week: "שבוע", + day: "יום", + list: "סדר יום" + }, + allDayText: "כל היום", + eventLimitText: "אחר", + noEventsMessage: "אין אירועים להצגה", + weekLabel: "שבוע" + }; + + var _m30 = { + code: "hi", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "पिछला", + next: "अगला", + today: "आज", + month: "महीना", + week: "सप्ताह", + day: "दिन", + list: "कार्यसूची" + }, + weekLabel: "हफ्ता", + allDayText: "सभी दिन", + eventLimitText: function (n) { + return "+अधिक " + n; + }, + noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए" + }; + + var _m31 = { + code: "hr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prijašnji", + next: "Sljedeći", + today: "Danas", + month: "Mjesec", + week: "Tjedan", + day: "Dan", + list: "Raspored" + }, + weekLabel: "Tje", + allDayText: "Cijeli dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nema događaja za prikaz" + }; + + var _m32 = { + code: "hu", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "vissza", + next: "előre", + today: "ma", + month: "Hónap", + week: "Hét", + day: "Nap", + list: "Napló" + }, + weekLabel: "Hét", + allDayText: "Egész nap", + eventLimitText: "további", + noEventsMessage: "Nincs megjeleníthető esemény" + }; + + var _m33 = { + code: "id", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "mundur", + next: "maju", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayHtml: "Sehari
penuh", + eventLimitText: "lebih", + noEventsMessage: "Tidak ada acara untuk ditampilkan" + }; + + var _m34 = { + code: "is", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Fyrri", + next: "Næsti", + today: "Í dag", + month: "Mánuður", + week: "Vika", + day: "Dagur", + list: "Dagskrá" + }, + weekLabel: "Vika", + allDayHtml: "Allan
daginn", + eventLimitText: "meira", + noEventsMessage: "Engir viðburðir til að sýna" + }; + + var _m35 = { + code: "it", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Prec", + next: "Succ", + today: "Oggi", + month: "Mese", + week: "Settimana", + day: "Giorno", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Tutto il
giorno", + eventLimitText: function (n) { + return "+altri " + n; + }, + noEventsMessage: "Non ci sono eventi da visualizzare" + }; + + var _m36 = { + code: "ja", + buttonText: { + prev: "前", + next: "次", + today: "今日", + month: "月", + week: "週", + day: "日", + list: "予定リスト" + }, + weekLabel: "週", + allDayText: "終日", + eventLimitText: function (n) { + return "他 " + n + " 件"; + }, + noEventsMessage: "表示する予定はありません" + }; + + var _m37 = { + code: "ka", + week: { + dow: 1, + doy: 7 + }, + buttonText: { + prev: "წინა", + next: "შემდეგი", + today: "დღეს", + month: "თვე", + week: "კვირა", + day: "დღე", + list: "დღის წესრიგი" + }, + weekLabel: "კვ", + allDayText: "მთელი დღე", + eventLimitText: function (n) { + return "+ კიდევ " + n; + }, + noEventsMessage: "ღონისძიებები არ არის" + }; + + var _m38 = { + code: "kk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Алдыңғы", + next: "Келесі", + today: "Бүгін", + month: "Ай", + week: "Апта", + day: "Күн", + list: "Күн тәртібі" + }, + weekLabel: "Не", + allDayText: "Күні бойы", + eventLimitText: function (n) { + return "+ тағы " + n; + }, + noEventsMessage: "Көрсету үшін оқиғалар жоқ" + }; + + var _m39 = { + code: "ko", + buttonText: { + prev: "이전달", + next: "다음달", + today: "오늘", + month: "월", + week: "주", + day: "일", + list: "일정목록" + }, + weekLabel: "주", + allDayText: "종일", + eventLimitText: "개", + noEventsMessage: "일정이 없습니다" + }; + + var _m40 = { + code: "lb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Zréck", + next: "Weider", + today: "Haut", + month: "Mount", + week: "Woch", + day: "Dag", + list: "Terminiwwersiicht" + }, + weekLabel: "W", + allDayText: "Ganzen Dag", + eventLimitText: "méi", + noEventsMessage: "Nee Evenementer ze affichéieren" + }; + + var _m41 = { + code: "lt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Atgal", + next: "Pirmyn", + today: "Šiandien", + month: "Mėnuo", + week: "Savaitė", + day: "Diena", + list: "Darbotvarkė" + }, + weekLabel: "SAV", + allDayText: "Visą dieną", + eventLimitText: "daugiau", + noEventsMessage: "Nėra įvykių rodyti" + }; + + var _m42 = { + code: "lv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Iepr.", + next: "Nāk.", + today: "Šodien", + month: "Mēnesis", + week: "Nedēļa", + day: "Diena", + list: "Dienas kārtība" + }, + weekLabel: "Ned.", + allDayText: "Visu dienu", + eventLimitText: function (n) { + return "+vēl " + n; + }, + noEventsMessage: "Nav notikumu" + }; + + var _m43 = { + code: "mk", + buttonText: { + prev: "претходно", + next: "следно", + today: "Денес", + month: "Месец", + week: "Недела", + day: "Ден", + list: "График" + }, + weekLabel: "Сед", + allDayText: "Цел ден", + eventLimitText: function (n) { + return "+повеќе " + n; + }, + noEventsMessage: "Нема настани за прикажување" + }; + + var _m44 = { + code: "ms", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Sebelum", + next: "Selepas", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayText: "Sepanjang hari", + eventLimitText: function (n) { + return "masih ada " + n + " acara"; + }, + noEventsMessage: "Tiada peristiwa untuk dipaparkan" + }; + + var _m45 = { + code: "nb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Forrige", + next: "Neste", + today: "I dag", + month: "Måned", + week: "Uke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Uke", + allDayText: "Hele dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + var _m46 = { + code: "nl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Voorgaand", + next: "Volgende", + today: "Vandaag", + year: "Jaar", + month: "Maand", + week: "Week", + day: "Dag", + list: "Agenda" + }, + allDayText: "Hele dag", + eventLimitText: "extra", + noEventsMessage: "Geen evenementen om te laten zien" + }; + + var _m47 = { + code: "nn", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Førre", + next: "Neste", + today: "I dag", + month: "Månad", + week: "Veke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Veke", + allDayText: "Heile dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + var _m48 = { + code: "pl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Poprzedni", + next: "Następny", + today: "Dziś", + month: "Miesiąc", + week: "Tydzień", + day: "Dzień", + list: "Plan dnia" + }, + weekLabel: "Tydz", + allDayText: "Cały dzień", + eventLimitText: "więcej", + noEventsMessage: "Brak wydarzeń do wyświetlenia" + }; + + var _m49 = { + code: "pt-br", + buttonText: { + prev: "Anterior", + next: "Próximo", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Lista" + }, + weekLabel: "Sm", + allDayText: "dia inteiro", + eventLimitText: function (n) { + return "mais +" + n; + }, + noEventsMessage: "Não há eventos para mostrar" + }; + + var _m50 = { + code: "pt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Anterior", + next: "Seguinte", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Agenda" + }, + weekLabel: "Sem", + allDayText: "Todo o dia", + eventLimitText: "mais", + noEventsMessage: "Não há eventos para mostrar" + }; + + var _m51 = { + code: "ro", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "precedentă", + next: "următoare", + today: "Azi", + month: "Lună", + week: "Săptămână", + day: "Zi", + list: "Agendă" + }, + weekLabel: "Săpt", + allDayText: "Toată ziua", + eventLimitText: function (n) { + return "+alte " + n; + }, + noEventsMessage: "Nu există evenimente de afișat" + }; + + var _m52 = { + code: "ru", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Пред", + next: "След", + today: "Сегодня", + month: "Месяц", + week: "Неделя", + day: "День", + list: "Повестка дня" + }, + weekLabel: "Нед", + allDayText: "Весь день", + eventLimitText: function (n) { + return "+ ещё " + n; + }, + noEventsMessage: "Нет событий для отображения" + }; + + var _m53 = { + code: "sk", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Predchádzajúci", + next: "Nasledujúci", + today: "Dnes", + month: "Mesiac", + week: "Týždeň", + day: "Deň", + list: "Rozvrh" + }, + weekLabel: "Ty", + allDayText: "Celý deň", + eventLimitText: function (n) { + return "+ďalšie: " + n; + }, + noEventsMessage: "Žiadne akcie na zobrazenie" + }; + + var _m54 = { + code: "sl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prejšnji", + next: "Naslednji", + today: "Trenutni", + month: "Mesec", + week: "Teden", + day: "Dan", + list: "Dnevni red" + }, + weekLabel: "Teden", + allDayText: "Ves dan", + eventLimitText: "več", + noEventsMessage: "Ni dogodkov za prikaz" + }; + + var _m55 = { + code: "sq", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "mbrapa", + next: "Përpara", + today: "sot", + month: "Muaj", + week: "Javë", + day: "Ditë", + list: "Listë" + }, + weekLabel: "Ja", + allDayHtml: "Gjithë
ditën", + eventLimitText: function (n) { + return "+më tepër " + n; + }, + noEventsMessage: "Nuk ka evente për të shfaqur" + }; + + var _m56 = { + code: "sr-cyrl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Претходна", + next: "следећи", + today: "Данас", + month: "Месец", + week: "Недеља", + day: "Дан", + list: "Планер" + }, + weekLabel: "Сед", + allDayText: "Цео дан", + eventLimitText: function (n) { + return "+ још " + n; + }, + noEventsMessage: "Нема догађаја за приказ" + }; + + var _m57 = { + code: "sr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prethodna", + next: "Sledeći", + today: "Danas", + month: "Mеsеc", + week: "Nеdеlja", + day: "Dan", + list: "Planеr" + }, + weekLabel: "Sed", + allDayText: "Cеo dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nеma događaja za prikaz" + }; + + var _m58 = { + code: "sv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Förra", + next: "Nästa", + today: "Idag", + month: "Månad", + week: "Vecka", + day: "Dag", + list: "Program" + }, + weekLabel: "v.", + allDayText: "Heldag", + eventLimitText: "till", + noEventsMessage: "Inga händelser att visa" + }; + + var _m59 = { + code: "th", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "ก่อนหน้า", + next: "ถัดไป", + prevYear: 'ปีก่อนหน้า', + nextYear: 'ปีถัดไป', + year: 'ปี', + today: "วันนี้", + month: "เดือน", + week: "สัปดาห์", + day: "วัน", + list: "กำหนดการ" + }, + weekLabel: "สัปดาห์", + allDayText: "ตลอดวัน", + eventLimitText: "เพิ่มเติม", + noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง" + }; + + var _m60 = { + code: "tr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "geri", + next: "ileri", + today: "bugün", + month: "Ay", + week: "Hafta", + day: "Gün", + list: "Ajanda" + }, + weekLabel: "Hf", + allDayText: "Tüm gün", + eventLimitText: "daha fazla", + noEventsMessage: "Gösterilecek etkinlik yok" + }; + + var _m61 = { + code: "ug", + buttonText: { + month: "ئاي", + week: "ھەپتە", + day: "كۈن", + list: "كۈنتەرتىپ" + }, + allDayText: "پۈتۈن كۈن" + }; + + var _m62 = { + code: "uk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Попередній", + next: "далі", + today: "Сьогодні", + month: "Місяць", + week: "Тиждень", + day: "День", + list: "Порядок денний" + }, + weekLabel: "Тиж", + allDayText: "Увесь день", + eventLimitText: function (n) { + return "+ще " + n + "..."; + }, + noEventsMessage: "Немає подій для відображення" + }; + + var _m63 = { + code: "uz", + buttonText: { + month: "Oy", + week: "Xafta", + day: "Kun", + list: "Kun tartibi" + }, + allDayText: "Kun bo'yi", + eventLimitText: function (n) { + return "+ yana " + n; + }, + noEventsMessage: "Ko'rsatish uchun voqealar yo'q" + }; + + var _m64 = { + code: "vi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Trước", + next: "Tiếp", + today: "Hôm nay", + month: "Tháng", + week: "Tuần", + day: "Ngày", + list: "Lịch biểu" + }, + weekLabel: "Tu", + allDayText: "Cả ngày", + eventLimitText: function (n) { + return "+ thêm " + n; + }, + noEventsMessage: "Không có sự kiện để hiển thị" + }; + + var _m65 = { + code: "zh-cn", + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "周", + day: "日", + list: "日程" + }, + weekLabel: "周", + allDayText: "全天", + eventLimitText: function (n) { + return "另外 " + n + " 个"; + }, + noEventsMessage: "没有事件显示" + }; + + var _m66 = { + code: "zh-tw", + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "週", + day: "天", + list: "活動列表" + }, + weekLabel: "周", + allDayText: "整天", + eventLimitText: '顯示更多', + noEventsMessage: "没有任何活動" + }; + + var _rollupPluginMultiEntry_entryPoint = [ + _m0, _m1, _m2, _m3, _m4, _m5, _m6, _m7, _m8, _m9, _m10, _m11, _m12, _m13, _m14, _m15, _m16, _m17, _m18, _m19, _m20, _m21, _m22, _m23, _m24, _m25, _m26, _m27, _m28, _m29, _m30, _m31, _m32, _m33, _m34, _m35, _m36, _m37, _m38, _m39, _m40, _m41, _m42, _m43, _m44, _m45, _m46, _m47, _m48, _m49, _m50, _m51, _m52, _m53, _m54, _m55, _m56, _m57, _m58, _m59, _m60, _m61, _m62, _m63, _m64, _m65, _m66 + ]; + + return _rollupPluginMultiEntry_entryPoint; + + })); + +}))); diff --git a/src/main/resources/static/packages/bundle/locales-all.min.js b/src/main/resources/static/packages/bundle/locales-all.min.js new file mode 100644 index 00000000..c65dbd8b --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales-all.min.js @@ -0,0 +1 @@ +!function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";var e,t;e=void 0,t=function(){return[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekLabel:"Həftə",allDayText:"Bütün Gün",eventLimitText:function(e){return"+ daha çox "+e},noEventsMessage:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egun
osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todo
o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"},{code:"he",dir:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekLabel:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekLabel:"हफ्ता",allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekLabel:"Tje",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekLabel:"Hét",allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayHtml:"Sehari
penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allan
daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto il
giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithë
ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekLabel:"สัปดาห์",allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",eventLimitText:function(e){return"+ yana "+e},noEventsMessage:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"}]},"object"==typeof exports&&"undefined"!=typeof module?module.exports=[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekLabel:"Həftə",allDayText:"Bütün Gün",eventLimitText:function(e){return"+ daha çox "+e},noEventsMessage:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egun
osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todo
o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"},{code:"he",dir:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekLabel:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekLabel:"हफ्ता",allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekLabel:"Tje",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekLabel:"Hét",allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayHtml:"Sehari
penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allan
daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto il
giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithë
ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekLabel:"สัปดาห์",allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",eventLimitText:function(e){return"+ yana "+e},noEventsMessage:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"}]:"function"==typeof define&&define.amd?define(t):(e=e||self).FullCalendarLocalesAll=[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekLabel:"Həftə",allDayText:"Bütün Gün",eventLimitText:function(e){return"+ daha çox "+e},noEventsMessage:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egun
osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todo
o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"},{code:"he",dir:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekLabel:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekLabel:"हफ्ता",allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekLabel:"Tje",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekLabel:"Hét",allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayHtml:"Sehari
penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allan
daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto il
giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithë
ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekLabel:"สัปดาห์",allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",eventLimitText:function(e){return"+ yana "+e},noEventsMessage:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"}]}); \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/locales/af.js b/src/main/resources/static/packages/bundle/locales/af.js new file mode 100644 index 00000000..6b26935e --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/af.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.af = factory())); +}(this, (function () { 'use strict'; + + var af = { + code: "af", + week: { + dow: 1, + doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + }, + buttonText: { + prev: "Vorige", + next: "Volgende", + today: "Vandag", + year: "Jaar", + month: "Maand", + week: "Week", + day: "Dag", + list: "Agenda" + }, + allDayHtml: "Heeldag", + eventLimitText: "Addisionele", + noEventsMessage: "Daar is geen gebeurtenisse nie" + }; + + return af; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar-dz.js b/src/main/resources/static/packages/bundle/locales/ar-dz.js new file mode 100644 index 00000000..dd84de02 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar-dz.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-dz'] = factory())); +}(this, (function () { 'use strict'; + + var arDz = { + code: "ar-dz", + week: { + dow: 0, + doy: 4 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arDz; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar-kw.js b/src/main/resources/static/packages/bundle/locales/ar-kw.js new file mode 100644 index 00000000..284a7aa2 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar-kw.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-kw'] = factory())); +}(this, (function () { 'use strict'; + + var arKw = { + code: "ar-kw", + week: { + dow: 0, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arKw; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar-ly.js b/src/main/resources/static/packages/bundle/locales/ar-ly.js new file mode 100644 index 00000000..d90853e3 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar-ly.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ly'] = factory())); +}(this, (function () { 'use strict'; + + var arLy = { + code: "ar-ly", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arLy; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar-ma.js b/src/main/resources/static/packages/bundle/locales/ar-ma.js new file mode 100644 index 00000000..72e77131 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar-ma.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ma'] = factory())); +}(this, (function () { 'use strict'; + + var arMa = { + code: "ar-ma", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arMa; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar-sa.js b/src/main/resources/static/packages/bundle/locales/ar-sa.js new file mode 100644 index 00000000..819ffcf1 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar-sa.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-sa'] = factory())); +}(this, (function () { 'use strict'; + + var arSa = { + code: "ar-sa", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arSa; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar-tn.js b/src/main/resources/static/packages/bundle/locales/ar-tn.js new file mode 100644 index 00000000..dab807e4 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar-tn.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-tn'] = factory())); +}(this, (function () { 'use strict'; + + var arTn = { + code: "ar-tn", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arTn; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ar.js b/src/main/resources/static/packages/bundle/locales/ar.js new file mode 100644 index 00000000..f7e8d593 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ar.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ar = factory())); +}(this, (function () { 'use strict'; + + var ar = { + code: "ar", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return ar; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/bg.js b/src/main/resources/static/packages/bundle/locales/bg.js new file mode 100644 index 00000000..05d20595 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/bg.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bg = factory())); +}(this, (function () { 'use strict'; + + var bg = { + code: "bg", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "назад", + next: "напред", + today: "днес", + month: "Месец", + week: "Седмица", + day: "Ден", + list: "График" + }, + allDayText: "Цял ден", + eventLimitText: function (n) { + return "+още " + n; + }, + noEventsMessage: "Няма събития за показване" + }; + + return bg; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/bs.js b/src/main/resources/static/packages/bundle/locales/bs.js new file mode 100644 index 00000000..ff210aa1 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/bs.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bs = factory())); +}(this, (function () { 'use strict'; + + var bs = { + code: "bs", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prošli", + next: "Sljedeći", + today: "Danas", + month: "Mjesec", + week: "Sedmica", + day: "Dan", + list: "Raspored" + }, + weekLabel: "Sed", + allDayText: "Cijeli dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nema događaja za prikazivanje" + }; + + return bs; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ca.js b/src/main/resources/static/packages/bundle/locales/ca.js new file mode 100644 index 00000000..efc24ed3 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ca.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ca = factory())); +}(this, (function () { 'use strict'; + + var ca = { + code: "ca", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Anterior", + next: "Següent", + today: "Avui", + month: "Mes", + week: "Setmana", + day: "Dia", + list: "Agenda" + }, + weekLabel: "Set", + allDayText: "Tot el dia", + eventLimitText: "més", + noEventsMessage: "No hi ha esdeveniments per mostrar" + }; + + return ca; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/cs.js b/src/main/resources/static/packages/bundle/locales/cs.js new file mode 100644 index 00000000..7e717284 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/cs.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.cs = factory())); +}(this, (function () { 'use strict'; + + var cs = { + code: "cs", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Dříve", + next: "Později", + today: "Nyní", + month: "Měsíc", + week: "Týden", + day: "Den", + list: "Agenda" + }, + weekLabel: "Týd", + allDayText: "Celý den", + eventLimitText: function (n) { + return "+další: " + n; + }, + noEventsMessage: "Žádné akce k zobrazení" + }; + + return cs; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/da.js b/src/main/resources/static/packages/bundle/locales/da.js new file mode 100644 index 00000000..a29727ee --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/da.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.da = factory())); +}(this, (function () { 'use strict'; + + var da = { + code: "da", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Forrige", + next: "Næste", + today: "I dag", + month: "Måned", + week: "Uge", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Uge", + allDayText: "Hele dagen", + eventLimitText: "flere", + noEventsMessage: "Ingen arrangementer at vise" + }; + + return da; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/de.js b/src/main/resources/static/packages/bundle/locales/de.js new file mode 100644 index 00000000..63b1f5a4 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/de.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.de = factory())); +}(this, (function () { 'use strict'; + + var de = { + code: "de", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Zurück", + next: "Vor", + today: "Heute", + year: "Jahr", + month: "Monat", + week: "Woche", + day: "Tag", + list: "Terminübersicht" + }, + weekLabel: "KW", + allDayText: "Ganztägig", + eventLimitText: function (n) { + return "+ weitere " + n; + }, + noEventsMessage: "Keine Ereignisse anzuzeigen" + }; + + return de; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/el.js b/src/main/resources/static/packages/bundle/locales/el.js new file mode 100644 index 00000000..337edde2 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/el.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.el = factory())); +}(this, (function () { 'use strict'; + + var el = { + code: "el", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4st is the first week of the year. + }, + buttonText: { + prev: "Προηγούμενος", + next: "Επόμενος", + today: "Σήμερα", + month: "Μήνας", + week: "Εβδομάδα", + day: "Ημέρα", + list: "Ατζέντα" + }, + weekLabel: "Εβδ", + allDayText: "Ολοήμερο", + eventLimitText: "περισσότερα", + noEventsMessage: "Δεν υπάρχουν γεγονότα προς εμφάνιση" + }; + + return el; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/en-au.js b/src/main/resources/static/packages/bundle/locales/en-au.js new file mode 100644 index 00000000..2328aef2 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/en-au.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-au'] = factory())); +}(this, (function () { 'use strict'; + + var enAu = { + code: "en-au", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + } + }; + + return enAu; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/en-gb.js b/src/main/resources/static/packages/bundle/locales/en-gb.js new file mode 100644 index 00000000..3d21fcdf --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/en-gb.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-gb'] = factory())); +}(this, (function () { 'use strict'; + + var enGb = { + code: "en-gb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + } + }; + + return enGb; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/en-nz.js b/src/main/resources/static/packages/bundle/locales/en-nz.js new file mode 100644 index 00000000..34dc0547 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/en-nz.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-nz'] = factory())); +}(this, (function () { 'use strict'; + + var enNz = { + code: "en-nz", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + } + }; + + return enNz; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/es-us.js b/src/main/resources/static/packages/bundle/locales/es-us.js new file mode 100644 index 00000000..a89c8a1c --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/es-us.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['es-us'] = factory())); +}(this, (function () { 'use strict'; + + var esUs = { + code: "es", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Sig", + today: "Hoy", + month: "Mes", + week: "Semana", + day: "Día", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
el día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + return esUs; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/es.js b/src/main/resources/static/packages/bundle/locales/es.js new file mode 100644 index 00000000..a560d8ee --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/es.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.es = factory())); +}(this, (function () { 'use strict'; + + var es = { + code: "es", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Sig", + today: "Hoy", + month: "Mes", + week: "Semana", + day: "Día", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
el día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + return es; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/et.js b/src/main/resources/static/packages/bundle/locales/et.js new file mode 100644 index 00000000..4210ea73 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/et.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.et = factory())); +}(this, (function () { 'use strict'; + + var et = { + code: "et", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Eelnev", + next: "Järgnev", + today: "Täna", + month: "Kuu", + week: "Nädal", + day: "Päev", + list: "Päevakord" + }, + weekLabel: "näd", + allDayText: "Kogu päev", + eventLimitText: function (n) { + return "+ veel " + n; + }, + noEventsMessage: "Kuvamiseks puuduvad sündmused" + }; + + return et; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/eu.js b/src/main/resources/static/packages/bundle/locales/eu.js new file mode 100644 index 00000000..26e1fc6f --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/eu.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.eu = factory())); +}(this, (function () { 'use strict'; + + var eu = { + code: "eu", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Aur", + next: "Hur", + today: "Gaur", + month: "Hilabetea", + week: "Astea", + day: "Eguna", + list: "Agenda" + }, + weekLabel: "As", + allDayHtml: "Egun
osoa", + eventLimitText: "gehiago", + noEventsMessage: "Ez dago ekitaldirik erakusteko" + }; + + return eu; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/fa.js b/src/main/resources/static/packages/bundle/locales/fa.js new file mode 100644 index 00000000..8e8de04c --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/fa.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fa = factory())); +}(this, (function () { 'use strict'; + + var fa = { + code: "fa", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "قبلی", + next: "بعدی", + today: "امروز", + month: "ماه", + week: "هفته", + day: "روز", + list: "برنامه" + }, + weekLabel: "هف", + allDayText: "تمام روز", + eventLimitText: function (n) { + return "بیش از " + n; + }, + noEventsMessage: "هیچ رویدادی به نمایش" + }; + + return fa; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/fi.js b/src/main/resources/static/packages/bundle/locales/fi.js new file mode 100644 index 00000000..49471915 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/fi.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fi = factory())); +}(this, (function () { 'use strict'; + + var fi = { + code: "fi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Edellinen", + next: "Seuraava", + today: "Tänään", + month: "Kuukausi", + week: "Viikko", + day: "Päivä", + list: "Tapahtumat" + }, + weekLabel: "Vk", + allDayText: "Koko päivä", + eventLimitText: "lisää", + noEventsMessage: "Ei näytettäviä tapahtumia" + }; + + return fi; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/fr-ca.js b/src/main/resources/static/packages/bundle/locales/fr-ca.js new file mode 100644 index 00000000..f55589c7 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/fr-ca.js @@ -0,0 +1,27 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ca'] = factory())); +}(this, (function () { 'use strict'; + + var frCa = { + code: "fr", + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + return frCa; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/fr-ch.js b/src/main/resources/static/packages/bundle/locales/fr-ch.js new file mode 100644 index 00000000..dcc6f62b --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/fr-ch.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ch'] = factory())); +}(this, (function () { 'use strict'; + + var frCh = { + code: "fr-ch", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Courant", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sm", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + return frCh; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/fr.js b/src/main/resources/static/packages/bundle/locales/fr.js new file mode 100644 index 00000000..816dfa19 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/fr.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fr = factory())); +}(this, (function () { 'use strict'; + + var fr = { + code: "fr", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + return fr; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/gl.js b/src/main/resources/static/packages/bundle/locales/gl.js new file mode 100644 index 00000000..30eb8273 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/gl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.gl = factory())); +}(this, (function () { 'use strict'; + + var gl = { + code: "gl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Seg", + today: "Hoxe", + month: "Mes", + week: "Semana", + day: "Día", + list: "Axenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
o día", + eventLimitText: "máis", + noEventsMessage: "Non hai eventos para amosar" + }; + + return gl; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/he.js b/src/main/resources/static/packages/bundle/locales/he.js new file mode 100644 index 00000000..1d993f09 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/he.js @@ -0,0 +1,27 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.he = factory())); +}(this, (function () { 'use strict'; + + var he = { + code: "he", + dir: 'rtl', + buttonText: { + prev: "הקודם", + next: "הבא", + today: "היום", + month: "חודש", + week: "שבוע", + day: "יום", + list: "סדר יום" + }, + allDayText: "כל היום", + eventLimitText: "אחר", + noEventsMessage: "אין אירועים להצגה", + weekLabel: "שבוע" + }; + + return he; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/hi.js b/src/main/resources/static/packages/bundle/locales/hi.js new file mode 100644 index 00000000..0931e0c6 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/hi.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hi = factory())); +}(this, (function () { 'use strict'; + + var hi = { + code: "hi", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "पिछला", + next: "अगला", + today: "आज", + month: "महीना", + week: "सप्ताह", + day: "दिन", + list: "कार्यसूची" + }, + weekLabel: "हफ्ता", + allDayText: "सभी दिन", + eventLimitText: function (n) { + return "+अधिक " + n; + }, + noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए" + }; + + return hi; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/hr.js b/src/main/resources/static/packages/bundle/locales/hr.js new file mode 100644 index 00000000..8cbf3743 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/hr.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hr = factory())); +}(this, (function () { 'use strict'; + + var hr = { + code: "hr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prijašnji", + next: "Sljedeći", + today: "Danas", + month: "Mjesec", + week: "Tjedan", + day: "Dan", + list: "Raspored" + }, + weekLabel: "Tje", + allDayText: "Cijeli dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nema događaja za prikaz" + }; + + return hr; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/hu.js b/src/main/resources/static/packages/bundle/locales/hu.js new file mode 100644 index 00000000..fd41f53d --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/hu.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hu = factory())); +}(this, (function () { 'use strict'; + + var hu = { + code: "hu", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "vissza", + next: "előre", + today: "ma", + month: "Hónap", + week: "Hét", + day: "Nap", + list: "Napló" + }, + weekLabel: "Hét", + allDayText: "Egész nap", + eventLimitText: "további", + noEventsMessage: "Nincs megjeleníthető esemény" + }; + + return hu; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/id.js b/src/main/resources/static/packages/bundle/locales/id.js new file mode 100644 index 00000000..e2480d6f --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/id.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.id = factory())); +}(this, (function () { 'use strict'; + + var id = { + code: "id", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "mundur", + next: "maju", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayHtml: "Sehari
penuh", + eventLimitText: "lebih", + noEventsMessage: "Tidak ada acara untuk ditampilkan" + }; + + return id; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/is.js b/src/main/resources/static/packages/bundle/locales/is.js new file mode 100644 index 00000000..f0d9b9a4 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/is.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.is = factory())); +}(this, (function () { 'use strict'; + + var is = { + code: "is", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Fyrri", + next: "Næsti", + today: "Í dag", + month: "Mánuður", + week: "Vika", + day: "Dagur", + list: "Dagskrá" + }, + weekLabel: "Vika", + allDayHtml: "Allan
daginn", + eventLimitText: "meira", + noEventsMessage: "Engir viðburðir til að sýna" + }; + + return is; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/it.js b/src/main/resources/static/packages/bundle/locales/it.js new file mode 100644 index 00000000..a4a4911d --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/it.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.it = factory())); +}(this, (function () { 'use strict'; + + var it = { + code: "it", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Prec", + next: "Succ", + today: "Oggi", + month: "Mese", + week: "Settimana", + day: "Giorno", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Tutto il
giorno", + eventLimitText: function (n) { + return "+altri " + n; + }, + noEventsMessage: "Non ci sono eventi da visualizzare" + }; + + return it; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ja.js b/src/main/resources/static/packages/bundle/locales/ja.js new file mode 100644 index 00000000..e732da2c --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ja.js @@ -0,0 +1,28 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ja = factory())); +}(this, (function () { 'use strict'; + + var ja = { + code: "ja", + buttonText: { + prev: "前", + next: "次", + today: "今日", + month: "月", + week: "週", + day: "日", + list: "予定リスト" + }, + weekLabel: "週", + allDayText: "終日", + eventLimitText: function (n) { + return "他 " + n + " 件"; + }, + noEventsMessage: "表示する予定はありません" + }; + + return ja; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ka.js b/src/main/resources/static/packages/bundle/locales/ka.js new file mode 100644 index 00000000..65d99ee5 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ka.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ka = factory())); +}(this, (function () { 'use strict'; + + var ka = { + code: "ka", + week: { + dow: 1, + doy: 7 + }, + buttonText: { + prev: "წინა", + next: "შემდეგი", + today: "დღეს", + month: "თვე", + week: "კვირა", + day: "დღე", + list: "დღის წესრიგი" + }, + weekLabel: "კვ", + allDayText: "მთელი დღე", + eventLimitText: function (n) { + return "+ კიდევ " + n; + }, + noEventsMessage: "ღონისძიებები არ არის" + }; + + return ka; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/kk.js b/src/main/resources/static/packages/bundle/locales/kk.js new file mode 100644 index 00000000..527bc635 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/kk.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.kk = factory())); +}(this, (function () { 'use strict'; + + var kk = { + code: "kk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Алдыңғы", + next: "Келесі", + today: "Бүгін", + month: "Ай", + week: "Апта", + day: "Күн", + list: "Күн тәртібі" + }, + weekLabel: "Не", + allDayText: "Күні бойы", + eventLimitText: function (n) { + return "+ тағы " + n; + }, + noEventsMessage: "Көрсету үшін оқиғалар жоқ" + }; + + return kk; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ko.js b/src/main/resources/static/packages/bundle/locales/ko.js new file mode 100644 index 00000000..6545b881 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ko.js @@ -0,0 +1,26 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ko = factory())); +}(this, (function () { 'use strict'; + + var ko = { + code: "ko", + buttonText: { + prev: "이전달", + next: "다음달", + today: "오늘", + month: "월", + week: "주", + day: "일", + list: "일정목록" + }, + weekLabel: "주", + allDayText: "종일", + eventLimitText: "개", + noEventsMessage: "일정이 없습니다" + }; + + return ko; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/lb.js b/src/main/resources/static/packages/bundle/locales/lb.js new file mode 100644 index 00000000..4964a716 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/lb.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lb = factory())); +}(this, (function () { 'use strict'; + + var lb = { + code: "lb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Zréck", + next: "Weider", + today: "Haut", + month: "Mount", + week: "Woch", + day: "Dag", + list: "Terminiwwersiicht" + }, + weekLabel: "W", + allDayText: "Ganzen Dag", + eventLimitText: "méi", + noEventsMessage: "Nee Evenementer ze affichéieren" + }; + + return lb; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/lt.js b/src/main/resources/static/packages/bundle/locales/lt.js new file mode 100644 index 00000000..fcf6e921 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/lt.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lt = factory())); +}(this, (function () { 'use strict'; + + var lt = { + code: "lt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Atgal", + next: "Pirmyn", + today: "Šiandien", + month: "Mėnuo", + week: "Savaitė", + day: "Diena", + list: "Darbotvarkė" + }, + weekLabel: "SAV", + allDayText: "Visą dieną", + eventLimitText: "daugiau", + noEventsMessage: "Nėra įvykių rodyti" + }; + + return lt; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/lv.js b/src/main/resources/static/packages/bundle/locales/lv.js new file mode 100644 index 00000000..6cfffe6e --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/lv.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lv = factory())); +}(this, (function () { 'use strict'; + + var lv = { + code: "lv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Iepr.", + next: "Nāk.", + today: "Šodien", + month: "Mēnesis", + week: "Nedēļa", + day: "Diena", + list: "Dienas kārtība" + }, + weekLabel: "Ned.", + allDayText: "Visu dienu", + eventLimitText: function (n) { + return "+vēl " + n; + }, + noEventsMessage: "Nav notikumu" + }; + + return lv; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/mk.js b/src/main/resources/static/packages/bundle/locales/mk.js new file mode 100644 index 00000000..a918fed1 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/mk.js @@ -0,0 +1,28 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.mk = factory())); +}(this, (function () { 'use strict'; + + var mk = { + code: "mk", + buttonText: { + prev: "претходно", + next: "следно", + today: "Денес", + month: "Месец", + week: "Недела", + day: "Ден", + list: "График" + }, + weekLabel: "Сед", + allDayText: "Цел ден", + eventLimitText: function (n) { + return "+повеќе " + n; + }, + noEventsMessage: "Нема настани за прикажување" + }; + + return mk; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ms.js b/src/main/resources/static/packages/bundle/locales/ms.js new file mode 100644 index 00000000..38a19877 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ms.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ms = factory())); +}(this, (function () { 'use strict'; + + var ms = { + code: "ms", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Sebelum", + next: "Selepas", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayText: "Sepanjang hari", + eventLimitText: function (n) { + return "masih ada " + n + " acara"; + }, + noEventsMessage: "Tiada peristiwa untuk dipaparkan" + }; + + return ms; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/nb.js b/src/main/resources/static/packages/bundle/locales/nb.js new file mode 100644 index 00000000..e8b2c78c --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/nb.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nb = factory())); +}(this, (function () { 'use strict'; + + var nb = { + code: "nb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Forrige", + next: "Neste", + today: "I dag", + month: "Måned", + week: "Uke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Uke", + allDayText: "Hele dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + return nb; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/nl.js b/src/main/resources/static/packages/bundle/locales/nl.js new file mode 100644 index 00000000..b11713bc --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/nl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nl = factory())); +}(this, (function () { 'use strict'; + + var nl = { + code: "nl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Voorgaand", + next: "Volgende", + today: "Vandaag", + year: "Jaar", + month: "Maand", + week: "Week", + day: "Dag", + list: "Agenda" + }, + allDayText: "Hele dag", + eventLimitText: "extra", + noEventsMessage: "Geen evenementen om te laten zien" + }; + + return nl; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/nn.js b/src/main/resources/static/packages/bundle/locales/nn.js new file mode 100644 index 00000000..52059255 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/nn.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nn = factory())); +}(this, (function () { 'use strict'; + + var nn = { + code: "nn", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Førre", + next: "Neste", + today: "I dag", + month: "Månad", + week: "Veke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Veke", + allDayText: "Heile dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + return nn; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/pl.js b/src/main/resources/static/packages/bundle/locales/pl.js new file mode 100644 index 00000000..a722481e --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/pl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pl = factory())); +}(this, (function () { 'use strict'; + + var pl = { + code: "pl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Poprzedni", + next: "Następny", + today: "Dziś", + month: "Miesiąc", + week: "Tydzień", + day: "Dzień", + list: "Plan dnia" + }, + weekLabel: "Tydz", + allDayText: "Cały dzień", + eventLimitText: "więcej", + noEventsMessage: "Brak wydarzeń do wyświetlenia" + }; + + return pl; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/pt-br.js b/src/main/resources/static/packages/bundle/locales/pt-br.js new file mode 100644 index 00000000..dad2ea9a --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/pt-br.js @@ -0,0 +1,28 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['pt-br'] = factory())); +}(this, (function () { 'use strict'; + + var ptBr = { + code: "pt-br", + buttonText: { + prev: "Anterior", + next: "Próximo", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Lista" + }, + weekLabel: "Sm", + allDayText: "dia inteiro", + eventLimitText: function (n) { + return "mais +" + n; + }, + noEventsMessage: "Não há eventos para mostrar" + }; + + return ptBr; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/pt.js b/src/main/resources/static/packages/bundle/locales/pt.js new file mode 100644 index 00000000..13d934d6 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/pt.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pt = factory())); +}(this, (function () { 'use strict'; + + var pt = { + code: "pt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Anterior", + next: "Seguinte", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Agenda" + }, + weekLabel: "Sem", + allDayText: "Todo o dia", + eventLimitText: "mais", + noEventsMessage: "Não há eventos para mostrar" + }; + + return pt; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ro.js b/src/main/resources/static/packages/bundle/locales/ro.js new file mode 100644 index 00000000..97aba529 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ro.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ro = factory())); +}(this, (function () { 'use strict'; + + var ro = { + code: "ro", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "precedentă", + next: "următoare", + today: "Azi", + month: "Lună", + week: "Săptămână", + day: "Zi", + list: "Agendă" + }, + weekLabel: "Săpt", + allDayText: "Toată ziua", + eventLimitText: function (n) { + return "+alte " + n; + }, + noEventsMessage: "Nu există evenimente de afișat" + }; + + return ro; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/ru.js b/src/main/resources/static/packages/bundle/locales/ru.js new file mode 100644 index 00000000..009c24fb --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/ru.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ru = factory())); +}(this, (function () { 'use strict'; + + var ru = { + code: "ru", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Пред", + next: "След", + today: "Сегодня", + month: "Месяц", + week: "Неделя", + day: "День", + list: "Повестка дня" + }, + weekLabel: "Нед", + allDayText: "Весь день", + eventLimitText: function (n) { + return "+ ещё " + n; + }, + noEventsMessage: "Нет событий для отображения" + }; + + return ru; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/sk.js b/src/main/resources/static/packages/bundle/locales/sk.js new file mode 100644 index 00000000..8cb3c8f4 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/sk.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sk = factory())); +}(this, (function () { 'use strict'; + + var sk = { + code: "sk", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Predchádzajúci", + next: "Nasledujúci", + today: "Dnes", + month: "Mesiac", + week: "Týždeň", + day: "Deň", + list: "Rozvrh" + }, + weekLabel: "Ty", + allDayText: "Celý deň", + eventLimitText: function (n) { + return "+ďalšie: " + n; + }, + noEventsMessage: "Žiadne akcie na zobrazenie" + }; + + return sk; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/sl.js b/src/main/resources/static/packages/bundle/locales/sl.js new file mode 100644 index 00000000..6a9a7df9 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/sl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sl = factory())); +}(this, (function () { 'use strict'; + + var sl = { + code: "sl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prejšnji", + next: "Naslednji", + today: "Trenutni", + month: "Mesec", + week: "Teden", + day: "Dan", + list: "Dnevni red" + }, + weekLabel: "Teden", + allDayText: "Ves dan", + eventLimitText: "več", + noEventsMessage: "Ni dogodkov za prikaz" + }; + + return sl; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/sq.js b/src/main/resources/static/packages/bundle/locales/sq.js new file mode 100644 index 00000000..393b4904 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/sq.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sq = factory())); +}(this, (function () { 'use strict'; + + var sq = { + code: "sq", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "mbrapa", + next: "Përpara", + today: "sot", + month: "Muaj", + week: "Javë", + day: "Ditë", + list: "Listë" + }, + weekLabel: "Ja", + allDayHtml: "Gjithë
ditën", + eventLimitText: function (n) { + return "+më tepër " + n; + }, + noEventsMessage: "Nuk ka evente për të shfaqur" + }; + + return sq; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/sr-cyrl.js b/src/main/resources/static/packages/bundle/locales/sr-cyrl.js new file mode 100644 index 00000000..85aa814b --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/sr-cyrl.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['sr-cyrl'] = factory())); +}(this, (function () { 'use strict'; + + var srCyrl = { + code: "sr-cyrl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Претходна", + next: "следећи", + today: "Данас", + month: "Месец", + week: "Недеља", + day: "Дан", + list: "Планер" + }, + weekLabel: "Сед", + allDayText: "Цео дан", + eventLimitText: function (n) { + return "+ још " + n; + }, + noEventsMessage: "Нема догађаја за приказ" + }; + + return srCyrl; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/sr.js b/src/main/resources/static/packages/bundle/locales/sr.js new file mode 100644 index 00000000..74fb61b1 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/sr.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sr = factory())); +}(this, (function () { 'use strict'; + + var sr = { + code: "sr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prethodna", + next: "Sledeći", + today: "Danas", + month: "Mеsеc", + week: "Nеdеlja", + day: "Dan", + list: "Planеr" + }, + weekLabel: "Sed", + allDayText: "Cеo dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nеma događaja za prikaz" + }; + + return sr; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/sv.js b/src/main/resources/static/packages/bundle/locales/sv.js new file mode 100644 index 00000000..4fa67810 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/sv.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sv = factory())); +}(this, (function () { 'use strict'; + + var sv = { + code: "sv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Förra", + next: "Nästa", + today: "Idag", + month: "Månad", + week: "Vecka", + day: "Dag", + list: "Program" + }, + weekLabel: "v.", + allDayText: "Heldag", + eventLimitText: "till", + noEventsMessage: "Inga händelser att visa" + }; + + return sv; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/th.js b/src/main/resources/static/packages/bundle/locales/th.js new file mode 100644 index 00000000..14adb16a --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/th.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.th = factory())); +}(this, (function () { 'use strict'; + + var th = { + code: "th", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "ก่อนหน้า", + next: "ถัดไป", + prevYear: 'ปีก่อนหน้า', + nextYear: 'ปีถัดไป', + year: 'ปี', + today: "วันนี้", + month: "เดือน", + week: "สัปดาห์", + day: "วัน", + list: "กำหนดการ" + }, + weekLabel: "สัปดาห์", + allDayText: "ตลอดวัน", + eventLimitText: "เพิ่มเติม", + noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง" + }; + + return th; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/tr.js b/src/main/resources/static/packages/bundle/locales/tr.js new file mode 100644 index 00000000..4c0e0d7e --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/tr.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.tr = factory())); +}(this, (function () { 'use strict'; + + var tr = { + code: "tr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "geri", + next: "ileri", + today: "bugün", + month: "Ay", + week: "Hafta", + day: "Gün", + list: "Ajanda" + }, + weekLabel: "Hf", + allDayText: "Tüm gün", + eventLimitText: "daha fazla", + noEventsMessage: "Gösterilecek etkinlik yok" + }; + + return tr; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/uk.js b/src/main/resources/static/packages/bundle/locales/uk.js new file mode 100644 index 00000000..7e18f0b7 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/uk.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uk = factory())); +}(this, (function () { 'use strict'; + + var uk = { + code: "uk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Попередній", + next: "далі", + today: "Сьогодні", + month: "Місяць", + week: "Тиждень", + day: "День", + list: "Порядок денний" + }, + weekLabel: "Тиж", + allDayText: "Увесь день", + eventLimitText: function (n) { + return "+ще " + n + "..."; + }, + noEventsMessage: "Немає подій для відображення" + }; + + return uk; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/vi.js b/src/main/resources/static/packages/bundle/locales/vi.js new file mode 100644 index 00000000..d3c7c251 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/vi.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.vi = factory())); +}(this, (function () { 'use strict'; + + var vi = { + code: "vi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Trước", + next: "Tiếp", + today: "Hôm nay", + month: "Tháng", + week: "Tuần", + day: "Ngày", + list: "Lịch biểu" + }, + weekLabel: "Tu", + allDayText: "Cả ngày", + eventLimitText: function (n) { + return "+ thêm " + n; + }, + noEventsMessage: "Không có sự kiện để hiển thị" + }; + + return vi; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/zh-cn.js b/src/main/resources/static/packages/bundle/locales/zh-cn.js new file mode 100644 index 00000000..01c588db --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/zh-cn.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-cn'] = factory())); +}(this, (function () { 'use strict'; + + var zhCn = { + code: "zh-cn", + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "周", + day: "日", + list: "日程" + }, + weekLabel: "周", + allDayText: "全天", + eventLimitText: function (n) { + return "另外 " + n + " 个"; + }, + noEventsMessage: "没有事件显示" + }; + + return zhCn; + +}))); diff --git a/src/main/resources/static/packages/bundle/locales/zh-tw.js b/src/main/resources/static/packages/bundle/locales/zh-tw.js new file mode 100644 index 00000000..3a626d63 --- /dev/null +++ b/src/main/resources/static/packages/bundle/locales/zh-tw.js @@ -0,0 +1,26 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-tw'] = factory())); +}(this, (function () { 'use strict'; + + var zhTw = { + code: "zh-tw", + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "週", + day: "天", + list: "活動列表" + }, + weekLabel: "周", + allDayText: "整天", + eventLimitText: '顯示更多', + noEventsMessage: "没有任何活動" + }; + + return zhTw; + +}))); diff --git a/src/main/resources/static/packages/bundle/luxon.js b/src/main/resources/static/packages/bundle/luxon.js new file mode 100644 index 00000000..9c90313d --- /dev/null +++ b/src/main/resources/static/packages/bundle/luxon.js @@ -0,0 +1,159 @@ +/*! +FullCalendar Luxon Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('luxon'), require('fullcalendar')) : + typeof define === 'function' && define.amd ? define(['exports', 'luxon', 'fullcalendar'], factory) : + (global = global || self, factory(global.FullCalendar = global.FullCalendar || {}, global.luxon, global.FullCalendar)); +}(this, (function (exports, luxon, fullcalendar) { 'use strict'; + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function toDateTime(date, calendar) { + if (!(calendar instanceof fullcalendar.Calendar)) { + throw new Error('must supply a Calendar instance'); + } + return luxon.DateTime.fromJSDate(date, { + zone: calendar.dateEnv.timeZone, + locale: calendar.dateEnv.locale.codes[0] + }); + } + function toDuration(duration, calendar) { + if (!(calendar instanceof fullcalendar.Calendar)) { + throw new Error('must supply a Calendar instance'); + } + return luxon.Duration.fromObject(__assign({}, duration, { locale: calendar.dateEnv.locale.codes[0] })); + } + var LuxonNamedTimeZone = (function (_super) { + __extends(LuxonNamedTimeZone, _super); + function LuxonNamedTimeZone() { + return _super !== null && _super.apply(this, arguments) || this; + } + LuxonNamedTimeZone.prototype.offsetForArray = function (a) { + return arrayToLuxon(a, this.timeZoneName).offset; + }; + LuxonNamedTimeZone.prototype.timestampToArray = function (ms) { + return luxonToArray(luxon.DateTime.fromMillis(ms, { + zone: this.timeZoneName + })); + }; + return LuxonNamedTimeZone; + }(fullcalendar.NamedTimeZoneImpl)); + function formatWithCmdStr(cmdStr, arg) { + var cmd = parseCmdStr(cmdStr); + if (arg.end) { + var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]); + var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]); + return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.separator); + } + return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole); + } + var main = fullcalendar.createPlugin({ + cmdFormatter: formatWithCmdStr, + namedTimeZonedImpl: LuxonNamedTimeZone + }); + function luxonToArray(datetime) { + return [ + datetime.year, + datetime.month - 1, + datetime.day, + datetime.hour, + datetime.minute, + datetime.second, + datetime.millisecond + ]; + } + function arrayToLuxon(arr, timeZone, locale) { + return luxon.DateTime.fromObject({ + zone: timeZone, + locale: locale, + year: arr[0], + month: arr[1] + 1, + day: arr[2], + hour: arr[3], + minute: arr[4], + second: arr[5], + millisecond: arr[6] + }); + } + function parseCmdStr(cmdStr) { + var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); + if (parts) { + var middle = parseCmdStr(parts[2]); + return { + head: parts[1], + middle: middle, + tail: parts[3], + whole: parts[1] + middle.whole + parts[3] + }; + } + else { + return { + head: null, + middle: null, + tail: null, + whole: cmdStr + }; + } + } + function formatRange(cmd, formatStart, formatEnd, separator) { + if (cmd.middle) { + var startHead = formatStart(cmd.head); + var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator); + var startTail = formatStart(cmd.tail); + var endHead = formatEnd(cmd.head); + var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator); + var endTail = formatEnd(cmd.tail); + if (startHead === endHead && startTail === endTail) { + return startHead + + (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) + + startTail; + } + } + var startWhole = formatStart(cmd.whole); + var endWhole = formatEnd(cmd.whole); + if (startWhole === endWhole) { + return startWhole; + } + else { + return startWhole + separator + endWhole; + } + } + + exports.default = main; + exports.toDateTime = toDateTime; + exports.toDuration = toDuration; + + Object.defineProperty(exports, '__esModule', { value: true }); + + + if (exports.globalPlugins) { + exports.globalPlugins.push(exports.default) + delete exports.default + } + +}))); +//# sourceMappingURL=luxon.js.map diff --git a/src/main/resources/static/packages/bundle/luxon.js.map b/src/main/resources/static/packages/bundle/luxon.js.map new file mode 100644 index 00000000..f665ebc3 --- /dev/null +++ b/src/main/resources/static/packages/bundle/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../tmp/tsc-output/packages/luxon/src/main.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nimport { DateTime as LuxonDateTime, Duration as LuxonDuration } from 'luxon';\nimport { Calendar, NamedTimeZoneImpl, createPlugin } from '@fullcalendar/core';\nexport function toDateTime(date, calendar) {\n if (!(calendar instanceof Calendar)) {\n throw new Error('must supply a Calendar instance');\n }\n return LuxonDateTime.fromJSDate(date, {\n zone: calendar.dateEnv.timeZone,\n locale: calendar.dateEnv.locale.codes[0]\n });\n}\nexport function toDuration(duration, calendar) {\n if (!(calendar instanceof Calendar)) {\n throw new Error('must supply a Calendar instance');\n }\n return LuxonDuration.fromObject(tslib_1.__assign({}, duration, { locale: calendar.dateEnv.locale.codes[0] }));\n}\nvar LuxonNamedTimeZone = /** @class */ (function (_super) {\n tslib_1.__extends(LuxonNamedTimeZone, _super);\n function LuxonNamedTimeZone() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n LuxonNamedTimeZone.prototype.offsetForArray = function (a) {\n return arrayToLuxon(a, this.timeZoneName).offset;\n };\n LuxonNamedTimeZone.prototype.timestampToArray = function (ms) {\n return luxonToArray(LuxonDateTime.fromMillis(ms, {\n zone: this.timeZoneName\n }));\n };\n return LuxonNamedTimeZone;\n}(NamedTimeZoneImpl));\nfunction formatWithCmdStr(cmdStr, arg) {\n var cmd = parseCmdStr(cmdStr);\n if (arg.end) {\n var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);\n var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);\n return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.separator);\n }\n return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);\n}\nexport default createPlugin({\n cmdFormatter: formatWithCmdStr,\n namedTimeZonedImpl: LuxonNamedTimeZone\n});\nfunction luxonToArray(datetime) {\n return [\n datetime.year,\n datetime.month - 1,\n datetime.day,\n datetime.hour,\n datetime.minute,\n datetime.second,\n datetime.millisecond\n ];\n}\nfunction arrayToLuxon(arr, timeZone, locale) {\n return LuxonDateTime.fromObject({\n zone: timeZone,\n locale: locale,\n year: arr[0],\n month: arr[1] + 1,\n day: arr[2],\n hour: arr[3],\n minute: arr[4],\n second: arr[5],\n millisecond: arr[6]\n });\n}\nfunction parseCmdStr(cmdStr) {\n var parts = cmdStr.match(/^(.*?)\\{(.*)\\}(.*)$/); // TODO: lookbehinds for escape characters\n if (parts) {\n var middle = parseCmdStr(parts[2]);\n return {\n head: parts[1],\n middle: middle,\n tail: parts[3],\n whole: parts[1] + middle.whole + parts[3]\n };\n }\n else {\n return {\n head: null,\n middle: null,\n tail: null,\n whole: cmdStr\n };\n }\n}\nfunction formatRange(cmd, formatStart, formatEnd, separator) {\n if (cmd.middle) {\n var startHead = formatStart(cmd.head);\n var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);\n var startTail = formatStart(cmd.tail);\n var endHead = formatEnd(cmd.head);\n var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);\n var endTail = formatEnd(cmd.tail);\n if (startHead === endHead && startTail === endTail) {\n return startHead +\n (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +\n startTail;\n }\n }\n var startWhole = formatStart(cmd.whole);\n var endWhole = formatEnd(cmd.whole);\n if (startWhole === endWhole) {\n return startWhole;\n }\n else {\n return startWhole + separator + endWhole;\n }\n}\n"],"names":["Calendar","LuxonDateTime","LuxonDuration","tslib_1.__assign","tslib_1.__extends","NamedTimeZoneImpl","createPlugin"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/luxon.min.js b/src/main/resources/static/packages/bundle/luxon.min.js new file mode 100644 index 00000000..6ad6ca35 --- /dev/null +++ b/src/main/resources/static/packages/bundle/luxon.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Luxon Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("luxon"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["exports","luxon","fullcalendar"],t):t((e=e||self).FullCalendar=e.FullCalendar||{},e.luxon,e.FullCalendar)}(this,function(e,t,n){"use strict";var o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};var r=function(){return(r=Object.assign||function(e){for(var t,n=1,o=arguments.length;n= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nimport * as momentNs from 'moment';\nvar moment = momentNs; // the directly callable function\n// can't simply import 'moment-timezone' because it attempts to load a JSON file,\n// which the end-programmer might not have a loader setup for.\n// the file we are importing is pre-built to have the lib + timezone data.\nimport 'moment-timezone/builds/moment-timezone-with-data';\nimport { NamedTimeZoneImpl, createPlugin } from '@fullcalendar/core';\nvar MomentNamedTimeZone = /** @class */ (function (_super) {\n tslib_1.__extends(MomentNamedTimeZone, _super);\n function MomentNamedTimeZone() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MomentNamedTimeZone.prototype.offsetForArray = function (a) {\n return moment.tz(a, this.timeZoneName).utcOffset();\n };\n MomentNamedTimeZone.prototype.timestampToArray = function (ms) {\n return moment.tz(ms, this.timeZoneName).toArray();\n };\n return MomentNamedTimeZone;\n}(NamedTimeZoneImpl));\nexport default createPlugin({\n namedTimeZonedImpl: MomentNamedTimeZone\n});\n"],"names":["tslib_1.__extends","NamedTimeZoneImpl","createPlugin"],"mappings":";;;;;;;;;;;;IAgBA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;IACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;IACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEK,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;IAChC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;IAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF;;ICzBA,IAAI,MAAM,GAAG,QAAQ,CAAC;AAItB,IAEA,IAAI,mBAAmB,KAAkB,UAAU,MAAM,EAAE;IAC3D,IAAIA,SAAiB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;IACxE,KAAK;IACL,IAAI,mBAAmB,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE;IAChE,QAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3D,KAAK,CAAC;IACN,IAAI,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,EAAE,EAAE;IACnE,QAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1D,KAAK,CAAC;IACN,IAAI,OAAO,mBAAmB,CAAC;IAC/B,CAAC,CAACC,8BAAiB,CAAC,CAAC,CAAC;AACtB,eAAeC,yBAAY,CAAC;IAC5B,IAAI,kBAAkB,EAAE,mBAAmB;IAC3C,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/moment-timezone.min.js b/src/main/resources/static/packages/bundle/moment-timezone.min.js new file mode 100644 index 00000000..7412a767 --- /dev/null +++ b/src/main/resources/static/packages/bundle/moment-timezone.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Moment Timezone Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("moment"),require("moment-timezone/builds/moment-timezone-with-data"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["exports","moment","moment-timezone/builds/moment-timezone-with-data","fullcalendar"],t):t((e=e||self).FullCalendar=e.FullCalendar||{},e.moment,e.moment,e.FullCalendar)}(this,function(e,t,n,o){"use strict";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};var i=t,u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,e),t.prototype.offsetForArray=function(e){return i.tz(e,this.timeZoneName).utcOffset()},t.prototype.timestampToArray=function(e){return i.tz(e,this.timeZoneName).toArray()},t}(o.NamedTimeZoneImpl),l=o.createPlugin({namedTimeZonedImpl:u});e.default=l,Object.defineProperty(e,"__esModule",{value:!0}),e.globalPlugins&&(e.globalPlugins.push(e.default),delete e.default)}); \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/moment.js b/src/main/resources/static/packages/bundle/moment.js new file mode 100644 index 00000000..5de5c75f --- /dev/null +++ b/src/main/resources/static/packages/bundle/moment.js @@ -0,0 +1,117 @@ +/*! +FullCalendar Moment Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('moment'), require('fullcalendar')) : + typeof define === 'function' && define.amd ? define(['exports', 'moment', 'fullcalendar'], factory) : + (global = global || self, factory(global.FullCalendar = global.FullCalendar || {}, global.moment, global.FullCalendar)); +}(this, (function (exports, momentNs, fullcalendar) { 'use strict'; + + var moment = momentNs; + function toMoment(date, calendar) { + if (!(calendar instanceof fullcalendar.Calendar)) { + throw new Error('must supply a Calendar instance'); + } + return convertToMoment(date, calendar.dateEnv.timeZone, null, calendar.dateEnv.locale.codes[0]); + } + function toDuration(fcDuration) { + return moment.duration(fcDuration); + } + function formatWithCmdStr(cmdStr, arg) { + var cmd = parseCmdStr(cmdStr); + if (arg.end) { + var startMom = convertToMoment(arg.start.array, arg.timeZone, arg.start.timeZoneOffset, arg.localeCodes[0]); + var endMom = convertToMoment(arg.end.array, arg.timeZone, arg.end.timeZoneOffset, arg.localeCodes[0]); + return formatRange(cmd, createMomentFormatFunc(startMom), createMomentFormatFunc(endMom), arg.separator); + } + return convertToMoment(arg.date.array, arg.timeZone, arg.date.timeZoneOffset, arg.localeCodes[0]).format(cmd.whole); + } + var main = fullcalendar.createPlugin({ + cmdFormatter: formatWithCmdStr + }); + function createMomentFormatFunc(mom) { + return function (cmdStr) { + return cmdStr ? mom.format(cmdStr) : ''; + }; + } + function convertToMoment(input, timeZone, timeZoneOffset, locale) { + var mom; + if (timeZone === 'local') { + mom = moment(input); + } + else if (timeZone === 'UTC') { + mom = moment.utc(input); + } + else if (moment.tz) { + mom = moment.tz(input, timeZone); + } + else { + mom = moment.utc(input); + if (timeZoneOffset != null) { + mom.utcOffset(timeZoneOffset); + } + } + mom.locale(locale); + return mom; + } + function parseCmdStr(cmdStr) { + var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); + if (parts) { + var middle = parseCmdStr(parts[2]); + return { + head: parts[1], + middle: middle, + tail: parts[3], + whole: parts[1] + middle.whole + parts[3] + }; + } + else { + return { + head: null, + middle: null, + tail: null, + whole: cmdStr + }; + } + } + function formatRange(cmd, formatStart, formatEnd, separator) { + if (cmd.middle) { + var startHead = formatStart(cmd.head); + var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator); + var startTail = formatStart(cmd.tail); + var endHead = formatEnd(cmd.head); + var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator); + var endTail = formatEnd(cmd.tail); + if (startHead === endHead && startTail === endTail) { + return startHead + + (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) + + startTail; + } + } + var startWhole = formatStart(cmd.whole); + var endWhole = formatEnd(cmd.whole); + if (startWhole === endWhole) { + return startWhole; + } + else { + return startWhole + separator + endWhole; + } + } + + exports.default = main; + exports.toDuration = toDuration; + exports.toMoment = toMoment; + + Object.defineProperty(exports, '__esModule', { value: true }); + + + if (exports.globalPlugins) { + exports.globalPlugins.push(exports.default) + delete exports.default + } + +}))); +//# sourceMappingURL=moment.js.map diff --git a/src/main/resources/static/packages/bundle/moment.js.map b/src/main/resources/static/packages/bundle/moment.js.map new file mode 100644 index 00000000..4382d3bc --- /dev/null +++ b/src/main/resources/static/packages/bundle/moment.js.map @@ -0,0 +1 @@ +{"version":3,"file":"moment.js","sources":["../../../tmp/tsc-output/packages/moment/src/main.js"],"sourcesContent":["import * as momentNs from 'moment';\nvar moment = momentNs; // the directly callable function\nimport { Calendar, createPlugin } from '@fullcalendar/core';\nexport function toMoment(date, calendar) {\n if (!(calendar instanceof Calendar)) {\n throw new Error('must supply a Calendar instance');\n }\n return convertToMoment(date, calendar.dateEnv.timeZone, null, calendar.dateEnv.locale.codes[0]);\n}\nexport function toDuration(fcDuration) {\n return moment.duration(fcDuration); // moment accepts all the props that fc.Duration already has!\n}\nfunction formatWithCmdStr(cmdStr, arg) {\n var cmd = parseCmdStr(cmdStr);\n if (arg.end) {\n var startMom = convertToMoment(arg.start.array, arg.timeZone, arg.start.timeZoneOffset, arg.localeCodes[0]);\n var endMom = convertToMoment(arg.end.array, arg.timeZone, arg.end.timeZoneOffset, arg.localeCodes[0]);\n return formatRange(cmd, createMomentFormatFunc(startMom), createMomentFormatFunc(endMom), arg.separator);\n }\n return convertToMoment(arg.date.array, arg.timeZone, arg.date.timeZoneOffset, arg.localeCodes[0]).format(cmd.whole); // TODO: test for this\n}\nexport default createPlugin({\n cmdFormatter: formatWithCmdStr\n});\nfunction createMomentFormatFunc(mom) {\n return function (cmdStr) {\n return cmdStr ? mom.format(cmdStr) : ''; // because calling with blank string results in ISO8601 :(\n };\n}\nfunction convertToMoment(input, timeZone, timeZoneOffset, locale) {\n var mom;\n if (timeZone === 'local') {\n mom = moment(input);\n }\n else if (timeZone === 'UTC') {\n mom = moment.utc(input);\n }\n else if (moment.tz) {\n mom = moment.tz(input, timeZone);\n }\n else {\n mom = moment.utc(input);\n if (timeZoneOffset != null) {\n mom.utcOffset(timeZoneOffset);\n }\n }\n mom.locale(locale);\n return mom;\n}\nfunction parseCmdStr(cmdStr) {\n var parts = cmdStr.match(/^(.*?)\\{(.*)\\}(.*)$/); // TODO: lookbehinds for escape characters\n if (parts) {\n var middle = parseCmdStr(parts[2]);\n return {\n head: parts[1],\n middle: middle,\n tail: parts[3],\n whole: parts[1] + middle.whole + parts[3]\n };\n }\n else {\n return {\n head: null,\n middle: null,\n tail: null,\n whole: cmdStr\n };\n }\n}\nfunction formatRange(cmd, formatStart, formatEnd, separator) {\n if (cmd.middle) {\n var startHead = formatStart(cmd.head);\n var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);\n var startTail = formatStart(cmd.tail);\n var endHead = formatEnd(cmd.head);\n var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);\n var endTail = formatEnd(cmd.tail);\n if (startHead === endHead && startTail === endTail) {\n return startHead +\n (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +\n startTail;\n }\n }\n var startWhole = formatStart(cmd.whole);\n var endWhole = formatEnd(cmd.whole);\n if (startWhole === endWhole) {\n return startWhole;\n }\n else {\n return startWhole + separator + endWhole;\n }\n}\n"],"names":["Calendar","createPlugin"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/moment.min.js b/src/main/resources/static/packages/bundle/moment.min.js new file mode 100644 index 00000000..ae69762d --- /dev/null +++ b/src/main/resources/static/packages/bundle/moment.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Moment Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["exports","moment","fullcalendar"],t):t((e=e||self).FullCalendar=e.FullCalendar||{},e.moment,e.FullCalendar)}(this,function(e,t,n){"use strict";var l=t;var r=n.createPlugin({cmdFormatter:function(e,t){var n=function e(t){var n=t.match(/^(.*?)\{(.*)\}(.*)$/);if(n){var l=e(n[2]);return{head:n[1],middle:l,tail:n[3],whole:n[1]+l.whole+n[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){var l=o(t.start.array,t.timeZone,t.start.timeZoneOffset,t.localeCodes[0]),r=o(t.end.array,t.timeZone,t.end.timeZoneOffset,t.localeCodes[0]);return function e(t,n,l,r){if(t.middle){var a=n(t.head),o=e(t.middle,n,l,r),u=n(t.tail),i=l(t.head),d=e(t.middle,n,l,r),f=l(t.tail);if(a===i&&u===f)return a+(o===d?o:o+r+d)+u}var c=n(t.whole),m=l(t.whole);return c===m?c:c+r+m}(n,a(l),a(r),t.separator)}return o(t.date.array,t.timeZone,t.date.timeZoneOffset,t.localeCodes[0]).format(n.whole)}});function a(e){return function(t){return t?e.format(t):""}}function o(e,t,n,r){var a;return"local"===t?a=l(e):"UTC"===t?a=l.utc(e):l.tz?a=l.tz(e,t):(a=l.utc(e),null!=n&&a.utcOffset(n)),a.locale(r),a}e.default=r,e.toDuration=function(e){return l.duration(e)},e.toMoment=function(e,t){if(!(t instanceof n.Calendar))throw new Error("must supply a Calendar instance");return o(e,t.dateEnv.timeZone,null,t.dateEnv.locale.codes[0])},Object.defineProperty(e,"__esModule",{value:!0}),e.globalPlugins&&(e.globalPlugins.push(e.default),delete e.default)}); \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/rrule.js b/src/main/resources/static/packages/bundle/rrule.js new file mode 100644 index 00000000..74638f52 --- /dev/null +++ b/src/main/resources/static/packages/bundle/rrule.js @@ -0,0 +1,117 @@ +/*! +FullCalendar RRule Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rrule'), require('fullcalendar')) : + typeof define === 'function' && define.amd ? define(['exports', 'rrule', 'fullcalendar'], factory) : + (global = global || self, factory(global.FullCalendar = global.FullCalendar || {}, global.rrule, global.FullCalendar)); +}(this, (function (exports, rrule, fullcalendar) { 'use strict'; + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + var EVENT_DEF_PROPS = { + rrule: null, + duration: fullcalendar.createDuration + }; + var recurring = { + parse: function (rawEvent, leftoverProps, dateEnv) { + if (rawEvent.rrule != null) { + var props = fullcalendar.refineProps(rawEvent, EVENT_DEF_PROPS, {}, leftoverProps); + var parsed = parseRRule(props.rrule, dateEnv); + if (parsed) { + return { + typeData: parsed.rrule, + allDayGuess: parsed.allDayGuess, + duration: props.duration + }; + } + } + return null; + }, + expand: function (rrule, framingRange) { + return rrule.between(framingRange.start, framingRange.end, true) + .filter(function (date) { + return date.valueOf() < framingRange.end.valueOf(); + }); + } + }; + var main = fullcalendar.createPlugin({ + recurringTypes: [recurring] + }); + function parseRRule(input, dateEnv) { + var allDayGuess = null; + var rrule$1; + if (typeof input === 'string') { + rrule$1 = rrule.rrulestr(input); + } + else if (typeof input === 'object' && input) { + var refined = __assign({}, input); + if (typeof refined.dtstart === 'string') { + var dtstartMeta = dateEnv.createMarkerMeta(refined.dtstart); + if (dtstartMeta) { + refined.dtstart = dtstartMeta.marker; + allDayGuess = dtstartMeta.isTimeUnspecified; + } + else { + delete refined.dtstart; + } + } + if (typeof refined.until === 'string') { + refined.until = dateEnv.createMarker(refined.until); + } + if (refined.freq != null) { + refined.freq = convertConstant(refined.freq); + } + if (refined.wkst != null) { + refined.wkst = convertConstant(refined.wkst); + } + else { + refined.wkst = (dateEnv.weekDow - 1 + 7) % 7; + } + if (refined.byweekday != null) { + refined.byweekday = convertConstants(refined.byweekday); + } + rrule$1 = new rrule.RRule(refined); + } + if (rrule$1) { + return { rrule: rrule$1, allDayGuess: allDayGuess }; + } + return null; + } + function convertConstants(input) { + if (Array.isArray(input)) { + return input.map(convertConstant); + } + return convertConstant(input); + } + function convertConstant(input) { + if (typeof input === 'string') { + return rrule.RRule[input.toUpperCase()]; + } + return input; + } + + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + + + if (exports.globalPlugins) { + exports.globalPlugins.push(exports.default) + delete exports.default + } + +}))); +//# sourceMappingURL=rrule.js.map diff --git a/src/main/resources/static/packages/bundle/rrule.js.map b/src/main/resources/static/packages/bundle/rrule.js.map new file mode 100644 index 00000000..0473a0da --- /dev/null +++ b/src/main/resources/static/packages/bundle/rrule.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rrule.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../tmp/tsc-output/packages/rrule/src/main.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nimport { RRule, rrulestr } from 'rrule';\nimport { refineProps, createDuration, createPlugin } from '@fullcalendar/core';\nvar EVENT_DEF_PROPS = {\n rrule: null,\n duration: createDuration\n};\nvar recurring = {\n parse: function (rawEvent, leftoverProps, dateEnv) {\n if (rawEvent.rrule != null) {\n var props = refineProps(rawEvent, EVENT_DEF_PROPS, {}, leftoverProps);\n var parsed = parseRRule(props.rrule, dateEnv);\n if (parsed) {\n return {\n typeData: parsed.rrule,\n allDayGuess: parsed.allDayGuess,\n duration: props.duration\n };\n }\n }\n return null;\n },\n expand: function (rrule, framingRange) {\n // we WANT an inclusive start and in exclusive end, but the js rrule lib will only do either BOTH\n // inclusive or BOTH exclusive, which is stupid: https://github.com/jakubroztocil/rrule/issues/84\n // Workaround: make inclusive, which will generate extra occurences, and then trim.\n return rrule.between(framingRange.start, framingRange.end, true)\n .filter(function (date) {\n return date.valueOf() < framingRange.end.valueOf();\n });\n }\n};\nexport default createPlugin({\n recurringTypes: [recurring]\n});\nfunction parseRRule(input, dateEnv) {\n var allDayGuess = null;\n var rrule;\n if (typeof input === 'string') {\n rrule = rrulestr(input);\n }\n else if (typeof input === 'object' && input) { // non-null object\n var refined = tslib_1.__assign({}, input); // copy\n if (typeof refined.dtstart === 'string') {\n var dtstartMeta = dateEnv.createMarkerMeta(refined.dtstart);\n if (dtstartMeta) {\n refined.dtstart = dtstartMeta.marker;\n allDayGuess = dtstartMeta.isTimeUnspecified;\n }\n else {\n delete refined.dtstart;\n }\n }\n if (typeof refined.until === 'string') {\n refined.until = dateEnv.createMarker(refined.until);\n }\n if (refined.freq != null) {\n refined.freq = convertConstant(refined.freq);\n }\n if (refined.wkst != null) {\n refined.wkst = convertConstant(refined.wkst);\n }\n else {\n refined.wkst = (dateEnv.weekDow - 1 + 7) % 7; // convert Sunday-first to Monday-first\n }\n if (refined.byweekday != null) {\n refined.byweekday = convertConstants(refined.byweekday); // the plural version\n }\n rrule = new RRule(refined);\n }\n if (rrule) {\n return { rrule: rrule, allDayGuess: allDayGuess };\n }\n return null;\n}\nfunction convertConstants(input) {\n if (Array.isArray(input)) {\n return input.map(convertConstant);\n }\n return convertConstant(input);\n}\nfunction convertConstant(input) {\n if (typeof input === 'string') {\n return RRule[input.toUpperCase()];\n }\n return input;\n}\n"],"names":["createDuration","refineProps","createPlugin","rrule","rrulestr","tslib_1.__assign","RRule"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/bundle/rrule.min.js b/src/main/resources/static/packages/bundle/rrule.min.js new file mode 100644 index 00000000..d14b5517 --- /dev/null +++ b/src/main/resources/static/packages/bundle/rrule.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar RRule Plugin v4.3.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("rrule"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["exports","rrule","fullcalendar"],r):r((e=e||self).FullCalendar=e.FullCalendar||{},e.rrule,e.FullCalendar)}(this,function(e,r,t){"use strict";var n=function(){return(n=Object.assign||function(e){for(var r,t=1,n=arguments.length;tel día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + var _m20 = { + code: "es", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Sig", + today: "Hoy", + month: "Mes", + week: "Semana", + day: "Día", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
el día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + var _m21 = { + code: "et", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Eelnev", + next: "Järgnev", + today: "Täna", + month: "Kuu", + week: "Nädal", + day: "Päev", + list: "Päevakord" + }, + weekLabel: "näd", + allDayText: "Kogu päev", + eventLimitText: function (n) { + return "+ veel " + n; + }, + noEventsMessage: "Kuvamiseks puuduvad sündmused" + }; + + var _m22 = { + code: "eu", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Aur", + next: "Hur", + today: "Gaur", + month: "Hilabetea", + week: "Astea", + day: "Eguna", + list: "Agenda" + }, + weekLabel: "As", + allDayHtml: "Egun
osoa", + eventLimitText: "gehiago", + noEventsMessage: "Ez dago ekitaldirik erakusteko" + }; + + var _m23 = { + code: "fa", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "قبلی", + next: "بعدی", + today: "امروز", + month: "ماه", + week: "هفته", + day: "روز", + list: "برنامه" + }, + weekLabel: "هف", + allDayText: "تمام روز", + eventLimitText: function (n) { + return "بیش از " + n; + }, + noEventsMessage: "هیچ رویدادی به نمایش" + }; + + var _m24 = { + code: "fi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Edellinen", + next: "Seuraava", + today: "Tänään", + month: "Kuukausi", + week: "Viikko", + day: "Päivä", + list: "Tapahtumat" + }, + weekLabel: "Vk", + allDayText: "Koko päivä", + eventLimitText: "lisää", + noEventsMessage: "Ei näytettäviä tapahtumia" + }; + + var _m25 = { + code: "fr", + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + var _m26 = { + code: "fr-ch", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Courant", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sm", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + var _m27 = { + code: "fr", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + var _m28 = { + code: "gl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Seg", + today: "Hoxe", + month: "Mes", + week: "Semana", + day: "Día", + list: "Axenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
o día", + eventLimitText: "máis", + noEventsMessage: "Non hai eventos para amosar" + }; + + var _m29 = { + code: "he", + dir: 'rtl', + buttonText: { + prev: "הקודם", + next: "הבא", + today: "היום", + month: "חודש", + week: "שבוע", + day: "יום", + list: "סדר יום" + }, + allDayText: "כל היום", + eventLimitText: "אחר", + noEventsMessage: "אין אירועים להצגה", + weekLabel: "שבוע" + }; + + var _m30 = { + code: "hi", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "पिछला", + next: "अगला", + today: "आज", + month: "महीना", + week: "सप्ताह", + day: "दिन", + list: "कार्यसूची" + }, + weekLabel: "हफ्ता", + allDayText: "सभी दिन", + eventLimitText: function (n) { + return "+अधिक " + n; + }, + noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए" + }; + + var _m31 = { + code: "hr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prijašnji", + next: "Sljedeći", + today: "Danas", + month: "Mjesec", + week: "Tjedan", + day: "Dan", + list: "Raspored" + }, + weekLabel: "Tje", + allDayText: "Cijeli dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nema događaja za prikaz" + }; + + var _m32 = { + code: "hu", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "vissza", + next: "előre", + today: "ma", + month: "Hónap", + week: "Hét", + day: "Nap", + list: "Napló" + }, + weekLabel: "Hét", + allDayText: "Egész nap", + eventLimitText: "további", + noEventsMessage: "Nincs megjeleníthető esemény" + }; + + var _m33 = { + code: "id", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "mundur", + next: "maju", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayHtml: "Sehari
penuh", + eventLimitText: "lebih", + noEventsMessage: "Tidak ada acara untuk ditampilkan" + }; + + var _m34 = { + code: "is", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Fyrri", + next: "Næsti", + today: "Í dag", + month: "Mánuður", + week: "Vika", + day: "Dagur", + list: "Dagskrá" + }, + weekLabel: "Vika", + allDayHtml: "Allan
daginn", + eventLimitText: "meira", + noEventsMessage: "Engir viðburðir til að sýna" + }; + + var _m35 = { + code: "it", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Prec", + next: "Succ", + today: "Oggi", + month: "Mese", + week: "Settimana", + day: "Giorno", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Tutto il
giorno", + eventLimitText: function (n) { + return "+altri " + n; + }, + noEventsMessage: "Non ci sono eventi da visualizzare" + }; + + var _m36 = { + code: "ja", + buttonText: { + prev: "前", + next: "次", + today: "今日", + month: "月", + week: "週", + day: "日", + list: "予定リスト" + }, + weekLabel: "週", + allDayText: "終日", + eventLimitText: function (n) { + return "他 " + n + " 件"; + }, + noEventsMessage: "表示する予定はありません" + }; + + var _m37 = { + code: "ka", + week: { + dow: 1, + doy: 7 + }, + buttonText: { + prev: "წინა", + next: "შემდეგი", + today: "დღეს", + month: "თვე", + week: "კვირა", + day: "დღე", + list: "დღის წესრიგი" + }, + weekLabel: "კვ", + allDayText: "მთელი დღე", + eventLimitText: function (n) { + return "+ კიდევ " + n; + }, + noEventsMessage: "ღონისძიებები არ არის" + }; + + var _m38 = { + code: "kk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Алдыңғы", + next: "Келесі", + today: "Бүгін", + month: "Ай", + week: "Апта", + day: "Күн", + list: "Күн тәртібі" + }, + weekLabel: "Не", + allDayText: "Күні бойы", + eventLimitText: function (n) { + return "+ тағы " + n; + }, + noEventsMessage: "Көрсету үшін оқиғалар жоқ" + }; + + var _m39 = { + code: "ko", + buttonText: { + prev: "이전달", + next: "다음달", + today: "오늘", + month: "월", + week: "주", + day: "일", + list: "일정목록" + }, + weekLabel: "주", + allDayText: "종일", + eventLimitText: "개", + noEventsMessage: "일정이 없습니다" + }; + + var _m40 = { + code: "lb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Zréck", + next: "Weider", + today: "Haut", + month: "Mount", + week: "Woch", + day: "Dag", + list: "Terminiwwersiicht" + }, + weekLabel: "W", + allDayText: "Ganzen Dag", + eventLimitText: "méi", + noEventsMessage: "Nee Evenementer ze affichéieren" + }; + + var _m41 = { + code: "lt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Atgal", + next: "Pirmyn", + today: "Šiandien", + month: "Mėnuo", + week: "Savaitė", + day: "Diena", + list: "Darbotvarkė" + }, + weekLabel: "SAV", + allDayText: "Visą dieną", + eventLimitText: "daugiau", + noEventsMessage: "Nėra įvykių rodyti" + }; + + var _m42 = { + code: "lv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Iepr.", + next: "Nāk.", + today: "Šodien", + month: "Mēnesis", + week: "Nedēļa", + day: "Diena", + list: "Dienas kārtība" + }, + weekLabel: "Ned.", + allDayText: "Visu dienu", + eventLimitText: function (n) { + return "+vēl " + n; + }, + noEventsMessage: "Nav notikumu" + }; + + var _m43 = { + code: "mk", + buttonText: { + prev: "претходно", + next: "следно", + today: "Денес", + month: "Месец", + week: "Недела", + day: "Ден", + list: "График" + }, + weekLabel: "Сед", + allDayText: "Цел ден", + eventLimitText: function (n) { + return "+повеќе " + n; + }, + noEventsMessage: "Нема настани за прикажување" + }; + + var _m44 = { + code: "ms", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Sebelum", + next: "Selepas", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayText: "Sepanjang hari", + eventLimitText: function (n) { + return "masih ada " + n + " acara"; + }, + noEventsMessage: "Tiada peristiwa untuk dipaparkan" + }; + + var _m45 = { + code: "nb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Forrige", + next: "Neste", + today: "I dag", + month: "Måned", + week: "Uke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Uke", + allDayText: "Hele dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + var _m46 = { + code: "nl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Voorgaand", + next: "Volgende", + today: "Vandaag", + year: "Jaar", + month: "Maand", + week: "Week", + day: "Dag", + list: "Agenda" + }, + allDayText: "Hele dag", + eventLimitText: "extra", + noEventsMessage: "Geen evenementen om te laten zien" + }; + + var _m47 = { + code: "nn", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Førre", + next: "Neste", + today: "I dag", + month: "Månad", + week: "Veke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Veke", + allDayText: "Heile dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + var _m48 = { + code: "pl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Poprzedni", + next: "Następny", + today: "Dziś", + month: "Miesiąc", + week: "Tydzień", + day: "Dzień", + list: "Plan dnia" + }, + weekLabel: "Tydz", + allDayText: "Cały dzień", + eventLimitText: "więcej", + noEventsMessage: "Brak wydarzeń do wyświetlenia" + }; + + var _m49 = { + code: "pt-br", + buttonText: { + prev: "Anterior", + next: "Próximo", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Lista" + }, + weekLabel: "Sm", + allDayText: "dia inteiro", + eventLimitText: function (n) { + return "mais +" + n; + }, + noEventsMessage: "Não há eventos para mostrar" + }; + + var _m50 = { + code: "pt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Anterior", + next: "Seguinte", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Agenda" + }, + weekLabel: "Sem", + allDayText: "Todo o dia", + eventLimitText: "mais", + noEventsMessage: "Não há eventos para mostrar" + }; + + var _m51 = { + code: "ro", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "precedentă", + next: "următoare", + today: "Azi", + month: "Lună", + week: "Săptămână", + day: "Zi", + list: "Agendă" + }, + weekLabel: "Săpt", + allDayText: "Toată ziua", + eventLimitText: function (n) { + return "+alte " + n; + }, + noEventsMessage: "Nu există evenimente de afișat" + }; + + var _m52 = { + code: "ru", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Пред", + next: "След", + today: "Сегодня", + month: "Месяц", + week: "Неделя", + day: "День", + list: "Повестка дня" + }, + weekLabel: "Нед", + allDayText: "Весь день", + eventLimitText: function (n) { + return "+ ещё " + n; + }, + noEventsMessage: "Нет событий для отображения" + }; + + var _m53 = { + code: "sk", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Predchádzajúci", + next: "Nasledujúci", + today: "Dnes", + month: "Mesiac", + week: "Týždeň", + day: "Deň", + list: "Rozvrh" + }, + weekLabel: "Ty", + allDayText: "Celý deň", + eventLimitText: function (n) { + return "+ďalšie: " + n; + }, + noEventsMessage: "Žiadne akcie na zobrazenie" + }; + + var _m54 = { + code: "sl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prejšnji", + next: "Naslednji", + today: "Trenutni", + month: "Mesec", + week: "Teden", + day: "Dan", + list: "Dnevni red" + }, + weekLabel: "Teden", + allDayText: "Ves dan", + eventLimitText: "več", + noEventsMessage: "Ni dogodkov za prikaz" + }; + + var _m55 = { + code: "sq", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "mbrapa", + next: "Përpara", + today: "sot", + month: "Muaj", + week: "Javë", + day: "Ditë", + list: "Listë" + }, + weekLabel: "Ja", + allDayHtml: "Gjithë
ditën", + eventLimitText: function (n) { + return "+më tepër " + n; + }, + noEventsMessage: "Nuk ka evente për të shfaqur" + }; + + var _m56 = { + code: "sr-cyrl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Претходна", + next: "следећи", + today: "Данас", + month: "Месец", + week: "Недеља", + day: "Дан", + list: "Планер" + }, + weekLabel: "Сед", + allDayText: "Цео дан", + eventLimitText: function (n) { + return "+ још " + n; + }, + noEventsMessage: "Нема догађаја за приказ" + }; + + var _m57 = { + code: "sr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prethodna", + next: "Sledeći", + today: "Danas", + month: "Mеsеc", + week: "Nеdеlja", + day: "Dan", + list: "Planеr" + }, + weekLabel: "Sed", + allDayText: "Cеo dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nеma događaja za prikaz" + }; + + var _m58 = { + code: "sv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Förra", + next: "Nästa", + today: "Idag", + month: "Månad", + week: "Vecka", + day: "Dag", + list: "Program" + }, + weekLabel: "v.", + allDayText: "Heldag", + eventLimitText: "till", + noEventsMessage: "Inga händelser att visa" + }; + + var _m59 = { + code: "th", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "ก่อนหน้า", + next: "ถัดไป", + prevYear: 'ปีก่อนหน้า', + nextYear: 'ปีถัดไป', + year: 'ปี', + today: "วันนี้", + month: "เดือน", + week: "สัปดาห์", + day: "วัน", + list: "กำหนดการ" + }, + weekLabel: "สัปดาห์", + allDayText: "ตลอดวัน", + eventLimitText: "เพิ่มเติม", + noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง" + }; + + var _m60 = { + code: "tr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "geri", + next: "ileri", + today: "bugün", + month: "Ay", + week: "Hafta", + day: "Gün", + list: "Ajanda" + }, + weekLabel: "Hf", + allDayText: "Tüm gün", + eventLimitText: "daha fazla", + noEventsMessage: "Gösterilecek etkinlik yok" + }; + + var _m61 = { + code: "ug", + buttonText: { + month: "ئاي", + week: "ھەپتە", + day: "كۈن", + list: "كۈنتەرتىپ" + }, + allDayText: "پۈتۈن كۈن" + }; + + var _m62 = { + code: "uk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Попередній", + next: "далі", + today: "Сьогодні", + month: "Місяць", + week: "Тиждень", + day: "День", + list: "Порядок денний" + }, + weekLabel: "Тиж", + allDayText: "Увесь день", + eventLimitText: function (n) { + return "+ще " + n + "..."; + }, + noEventsMessage: "Немає подій для відображення" + }; + + var _m63 = { + code: "uz", + buttonText: { + month: "Oy", + week: "Xafta", + day: "Kun", + list: "Kun tartibi" + }, + allDayText: "Kun bo'yi", + eventLimitText: function (n) { + return "+ yana " + n; + }, + noEventsMessage: "Ko'rsatish uchun voqealar yo'q" + }; + + var _m64 = { + code: "vi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Trước", + next: "Tiếp", + today: "Hôm nay", + month: "Tháng", + week: "Tuần", + day: "Ngày", + list: "Lịch biểu" + }, + weekLabel: "Tu", + allDayText: "Cả ngày", + eventLimitText: function (n) { + return "+ thêm " + n; + }, + noEventsMessage: "Không có sự kiện để hiển thị" + }; + + var _m65 = { + code: "zh-cn", + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "周", + day: "日", + list: "日程" + }, + weekLabel: "周", + allDayText: "全天", + eventLimitText: function (n) { + return "另外 " + n + " 个"; + }, + noEventsMessage: "没有事件显示" + }; + + var _m66 = { + code: "zh-tw", + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "週", + day: "天", + list: "活動列表" + }, + weekLabel: "周", + allDayText: "整天", + eventLimitText: '顯示更多', + noEventsMessage: "没有任何活動" + }; + + var _rollupPluginMultiEntry_entryPoint = [ + _m0, _m1, _m2, _m3, _m4, _m5, _m6, _m7, _m8, _m9, _m10, _m11, _m12, _m13, _m14, _m15, _m16, _m17, _m18, _m19, _m20, _m21, _m22, _m23, _m24, _m25, _m26, _m27, _m28, _m29, _m30, _m31, _m32, _m33, _m34, _m35, _m36, _m37, _m38, _m39, _m40, _m41, _m42, _m43, _m44, _m45, _m46, _m47, _m48, _m49, _m50, _m51, _m52, _m53, _m54, _m55, _m56, _m57, _m58, _m59, _m60, _m61, _m62, _m63, _m64, _m65, _m66 + ]; + + return _rollupPluginMultiEntry_entryPoint; + +})); diff --git a/src/main/resources/static/packages/core/locales-all.min.js b/src/main/resources/static/packages/core/locales-all.min.js new file mode 100644 index 00000000..484faf9d --- /dev/null +++ b/src/main/resources/static/packages/core/locales-all.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).FullCalendarLocalesAll=t()}(this,function(){"use strict";return[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekLabel:"Həftə",allDayText:"Bütün Gün",eventLimitText:function(e){return"+ daha çox "+e},noEventsMessage:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egun
osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todo
o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"},{code:"he",dir:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekLabel:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekLabel:"हफ्ता",allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekLabel:"Tje",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekLabel:"Hét",allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayHtml:"Sehari
penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allan
daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto il
giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithë
ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekLabel:"สัปดาห์",allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",eventLimitText:function(e){return"+ yana "+e},noEventsMessage:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"}]}); \ No newline at end of file diff --git a/src/main/resources/static/packages/core/locales/af.js b/src/main/resources/static/packages/core/locales/af.js new file mode 100644 index 00000000..ee9f9f74 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/af.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.af = factory())); +}(this, function () { 'use strict'; + + var af = { + code: "af", + week: { + dow: 1, + doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + }, + buttonText: { + prev: "Vorige", + next: "Volgende", + today: "Vandag", + year: "Jaar", + month: "Maand", + week: "Week", + day: "Dag", + list: "Agenda" + }, + allDayHtml: "Heeldag", + eventLimitText: "Addisionele", + noEventsMessage: "Daar is geen gebeurtenisse nie" + }; + + return af; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar-dz.js b/src/main/resources/static/packages/core/locales/ar-dz.js new file mode 100644 index 00000000..201eb171 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar-dz.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-dz'] = factory())); +}(this, function () { 'use strict'; + + var arDz = { + code: "ar-dz", + week: { + dow: 0, + doy: 4 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arDz; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar-kw.js b/src/main/resources/static/packages/core/locales/ar-kw.js new file mode 100644 index 00000000..94c69001 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar-kw.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-kw'] = factory())); +}(this, function () { 'use strict'; + + var arKw = { + code: "ar-kw", + week: { + dow: 0, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arKw; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar-ly.js b/src/main/resources/static/packages/core/locales/ar-ly.js new file mode 100644 index 00000000..e1c8aeb0 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar-ly.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ly'] = factory())); +}(this, function () { 'use strict'; + + var arLy = { + code: "ar-ly", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arLy; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar-ma.js b/src/main/resources/static/packages/core/locales/ar-ma.js new file mode 100644 index 00000000..00cc7c67 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar-ma.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ma'] = factory())); +}(this, function () { 'use strict'; + + var arMa = { + code: "ar-ma", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arMa; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar-sa.js b/src/main/resources/static/packages/core/locales/ar-sa.js new file mode 100644 index 00000000..0361f6d8 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar-sa.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-sa'] = factory())); +}(this, function () { 'use strict'; + + var arSa = { + code: "ar-sa", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arSa; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar-tn.js b/src/main/resources/static/packages/core/locales/ar-tn.js new file mode 100644 index 00000000..57a07f8f --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar-tn.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-tn'] = factory())); +}(this, function () { 'use strict'; + + var arTn = { + code: "ar-tn", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return arTn; + +})); diff --git a/src/main/resources/static/packages/core/locales/ar.js b/src/main/resources/static/packages/core/locales/ar.js new file mode 100644 index 00000000..f789afd1 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ar.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ar = factory())); +}(this, function () { 'use strict'; + + var ar = { + code: "ar", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "السابق", + next: "التالي", + today: "اليوم", + month: "شهر", + week: "أسبوع", + day: "يوم", + list: "أجندة" + }, + weekLabel: "أسبوع", + allDayText: "اليوم كله", + eventLimitText: "أخرى", + noEventsMessage: "أي أحداث لعرض" + }; + + return ar; + +})); diff --git a/src/main/resources/static/packages/core/locales/az.js b/src/main/resources/static/packages/core/locales/az.js new file mode 100644 index 00000000..fbd2dc35 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/az.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.az = factory())); +}(this, function () { 'use strict'; + + var az = { + code: "az", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Əvvəl", + next: "Sonra", + today: "Bu Gün", + month: "Ay", + week: "Həftə", + day: "Gün", + list: "Gündəm" + }, + weekLabel: "Həftə", + allDayText: "Bütün Gün", + eventLimitText: function (n) { + return "+ daha çox " + n; + }, + noEventsMessage: "Göstərmək üçün hadisə yoxdur" + }; + + return az; + +})); diff --git a/src/main/resources/static/packages/core/locales/bg.js b/src/main/resources/static/packages/core/locales/bg.js new file mode 100644 index 00000000..e7343a6c --- /dev/null +++ b/src/main/resources/static/packages/core/locales/bg.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bg = factory())); +}(this, function () { 'use strict'; + + var bg = { + code: "bg", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "назад", + next: "напред", + today: "днес", + month: "Месец", + week: "Седмица", + day: "Ден", + list: "График" + }, + allDayText: "Цял ден", + eventLimitText: function (n) { + return "+още " + n; + }, + noEventsMessage: "Няма събития за показване" + }; + + return bg; + +})); diff --git a/src/main/resources/static/packages/core/locales/bs.js b/src/main/resources/static/packages/core/locales/bs.js new file mode 100644 index 00000000..d96b8adb --- /dev/null +++ b/src/main/resources/static/packages/core/locales/bs.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bs = factory())); +}(this, function () { 'use strict'; + + var bs = { + code: "bs", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prošli", + next: "Sljedeći", + today: "Danas", + month: "Mjesec", + week: "Sedmica", + day: "Dan", + list: "Raspored" + }, + weekLabel: "Sed", + allDayText: "Cijeli dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nema događaja za prikazivanje" + }; + + return bs; + +})); diff --git a/src/main/resources/static/packages/core/locales/ca.js b/src/main/resources/static/packages/core/locales/ca.js new file mode 100644 index 00000000..d2d3e2aa --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ca.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ca = factory())); +}(this, function () { 'use strict'; + + var ca = { + code: "ca", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Anterior", + next: "Següent", + today: "Avui", + month: "Mes", + week: "Setmana", + day: "Dia", + list: "Agenda" + }, + weekLabel: "Set", + allDayText: "Tot el dia", + eventLimitText: "més", + noEventsMessage: "No hi ha esdeveniments per mostrar" + }; + + return ca; + +})); diff --git a/src/main/resources/static/packages/core/locales/cs.js b/src/main/resources/static/packages/core/locales/cs.js new file mode 100644 index 00000000..2624e360 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/cs.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.cs = factory())); +}(this, function () { 'use strict'; + + var cs = { + code: "cs", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Dříve", + next: "Později", + today: "Nyní", + month: "Měsíc", + week: "Týden", + day: "Den", + list: "Agenda" + }, + weekLabel: "Týd", + allDayText: "Celý den", + eventLimitText: function (n) { + return "+další: " + n; + }, + noEventsMessage: "Žádné akce k zobrazení" + }; + + return cs; + +})); diff --git a/src/main/resources/static/packages/core/locales/da.js b/src/main/resources/static/packages/core/locales/da.js new file mode 100644 index 00000000..73d15592 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/da.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.da = factory())); +}(this, function () { 'use strict'; + + var da = { + code: "da", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Forrige", + next: "Næste", + today: "I dag", + month: "Måned", + week: "Uge", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Uge", + allDayText: "Hele dagen", + eventLimitText: "flere", + noEventsMessage: "Ingen arrangementer at vise" + }; + + return da; + +})); diff --git a/src/main/resources/static/packages/core/locales/de.js b/src/main/resources/static/packages/core/locales/de.js new file mode 100644 index 00000000..ab5a815a --- /dev/null +++ b/src/main/resources/static/packages/core/locales/de.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.de = factory())); +}(this, function () { 'use strict'; + + var de = { + code: "de", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Zurück", + next: "Vor", + today: "Heute", + year: "Jahr", + month: "Monat", + week: "Woche", + day: "Tag", + list: "Terminübersicht" + }, + weekLabel: "KW", + allDayText: "Ganztägig", + eventLimitText: function (n) { + return "+ weitere " + n; + }, + noEventsMessage: "Keine Ereignisse anzuzeigen" + }; + + return de; + +})); diff --git a/src/main/resources/static/packages/core/locales/el.js b/src/main/resources/static/packages/core/locales/el.js new file mode 100644 index 00000000..cdc10a66 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/el.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.el = factory())); +}(this, function () { 'use strict'; + + var el = { + code: "el", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4st is the first week of the year. + }, + buttonText: { + prev: "Προηγούμενος", + next: "Επόμενος", + today: "Σήμερα", + month: "Μήνας", + week: "Εβδομάδα", + day: "Ημέρα", + list: "Ατζέντα" + }, + weekLabel: "Εβδ", + allDayText: "Ολοήμερο", + eventLimitText: "περισσότερα", + noEventsMessage: "Δεν υπάρχουν γεγονότα προς εμφάνιση" + }; + + return el; + +})); diff --git a/src/main/resources/static/packages/core/locales/en-au.js b/src/main/resources/static/packages/core/locales/en-au.js new file mode 100644 index 00000000..be10bfb6 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/en-au.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-au'] = factory())); +}(this, function () { 'use strict'; + + var enAu = { + code: "en-au", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + } + }; + + return enAu; + +})); diff --git a/src/main/resources/static/packages/core/locales/en-gb.js b/src/main/resources/static/packages/core/locales/en-gb.js new file mode 100644 index 00000000..8a4a84e6 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/en-gb.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-gb'] = factory())); +}(this, function () { 'use strict'; + + var enGb = { + code: "en-gb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + } + }; + + return enGb; + +})); diff --git a/src/main/resources/static/packages/core/locales/en-nz.js b/src/main/resources/static/packages/core/locales/en-nz.js new file mode 100644 index 00000000..df56c145 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/en-nz.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-nz'] = factory())); +}(this, function () { 'use strict'; + + var enNz = { + code: "en-nz", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + } + }; + + return enNz; + +})); diff --git a/src/main/resources/static/packages/core/locales/es-us.js b/src/main/resources/static/packages/core/locales/es-us.js new file mode 100644 index 00000000..1efa89a4 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/es-us.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['es-us'] = factory())); +}(this, function () { 'use strict'; + + var esUs = { + code: "es", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Sig", + today: "Hoy", + month: "Mes", + week: "Semana", + day: "Día", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
el día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + return esUs; + +})); diff --git a/src/main/resources/static/packages/core/locales/es.js b/src/main/resources/static/packages/core/locales/es.js new file mode 100644 index 00000000..bfd9af4c --- /dev/null +++ b/src/main/resources/static/packages/core/locales/es.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.es = factory())); +}(this, function () { 'use strict'; + + var es = { + code: "es", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Sig", + today: "Hoy", + month: "Mes", + week: "Semana", + day: "Día", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
el día", + eventLimitText: "más", + noEventsMessage: "No hay eventos para mostrar" + }; + + return es; + +})); diff --git a/src/main/resources/static/packages/core/locales/et.js b/src/main/resources/static/packages/core/locales/et.js new file mode 100644 index 00000000..c44fcaec --- /dev/null +++ b/src/main/resources/static/packages/core/locales/et.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.et = factory())); +}(this, function () { 'use strict'; + + var et = { + code: "et", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Eelnev", + next: "Järgnev", + today: "Täna", + month: "Kuu", + week: "Nädal", + day: "Päev", + list: "Päevakord" + }, + weekLabel: "näd", + allDayText: "Kogu päev", + eventLimitText: function (n) { + return "+ veel " + n; + }, + noEventsMessage: "Kuvamiseks puuduvad sündmused" + }; + + return et; + +})); diff --git a/src/main/resources/static/packages/core/locales/eu.js b/src/main/resources/static/packages/core/locales/eu.js new file mode 100644 index 00000000..91903aaa --- /dev/null +++ b/src/main/resources/static/packages/core/locales/eu.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.eu = factory())); +}(this, function () { 'use strict'; + + var eu = { + code: "eu", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Aur", + next: "Hur", + today: "Gaur", + month: "Hilabetea", + week: "Astea", + day: "Eguna", + list: "Agenda" + }, + weekLabel: "As", + allDayHtml: "Egun
osoa", + eventLimitText: "gehiago", + noEventsMessage: "Ez dago ekitaldirik erakusteko" + }; + + return eu; + +})); diff --git a/src/main/resources/static/packages/core/locales/fa.js b/src/main/resources/static/packages/core/locales/fa.js new file mode 100644 index 00000000..031fc7b3 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/fa.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fa = factory())); +}(this, function () { 'use strict'; + + var fa = { + code: "fa", + week: { + dow: 6, + doy: 12 // The week that contains Jan 1st is the first week of the year. + }, + dir: 'rtl', + buttonText: { + prev: "قبلی", + next: "بعدی", + today: "امروز", + month: "ماه", + week: "هفته", + day: "روز", + list: "برنامه" + }, + weekLabel: "هف", + allDayText: "تمام روز", + eventLimitText: function (n) { + return "بیش از " + n; + }, + noEventsMessage: "هیچ رویدادی به نمایش" + }; + + return fa; + +})); diff --git a/src/main/resources/static/packages/core/locales/fi.js b/src/main/resources/static/packages/core/locales/fi.js new file mode 100644 index 00000000..3912845c --- /dev/null +++ b/src/main/resources/static/packages/core/locales/fi.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fi = factory())); +}(this, function () { 'use strict'; + + var fi = { + code: "fi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Edellinen", + next: "Seuraava", + today: "Tänään", + month: "Kuukausi", + week: "Viikko", + day: "Päivä", + list: "Tapahtumat" + }, + weekLabel: "Vk", + allDayText: "Koko päivä", + eventLimitText: "lisää", + noEventsMessage: "Ei näytettäviä tapahtumia" + }; + + return fi; + +})); diff --git a/src/main/resources/static/packages/core/locales/fr-ca.js b/src/main/resources/static/packages/core/locales/fr-ca.js new file mode 100644 index 00000000..d554c140 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/fr-ca.js @@ -0,0 +1,27 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ca'] = factory())); +}(this, function () { 'use strict'; + + var frCa = { + code: "fr", + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + return frCa; + +})); diff --git a/src/main/resources/static/packages/core/locales/fr-ch.js b/src/main/resources/static/packages/core/locales/fr-ch.js new file mode 100644 index 00000000..358b8bf3 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/fr-ch.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ch'] = factory())); +}(this, function () { 'use strict'; + + var frCh = { + code: "fr-ch", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Courant", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Mon planning" + }, + weekLabel: "Sm", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + return frCh; + +})); diff --git a/src/main/resources/static/packages/core/locales/fr.js b/src/main/resources/static/packages/core/locales/fr.js new file mode 100644 index 00000000..4760a71a --- /dev/null +++ b/src/main/resources/static/packages/core/locales/fr.js @@ -0,0 +1,31 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fr = factory())); +}(this, function () { 'use strict'; + + var fr = { + code: "fr", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Précédent", + next: "Suivant", + today: "Aujourd'hui", + year: "Année", + month: "Mois", + week: "Semaine", + day: "Jour", + list: "Planning" + }, + weekLabel: "Sem.", + allDayHtml: "Toute la
journée", + eventLimitText: "en plus", + noEventsMessage: "Aucun événement à afficher" + }; + + return fr; + +})); diff --git a/src/main/resources/static/packages/core/locales/gl.js b/src/main/resources/static/packages/core/locales/gl.js new file mode 100644 index 00000000..721a6a89 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/gl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.gl = factory())); +}(this, function () { 'use strict'; + + var gl = { + code: "gl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Ant", + next: "Seg", + today: "Hoxe", + month: "Mes", + week: "Semana", + day: "Día", + list: "Axenda" + }, + weekLabel: "Sm", + allDayHtml: "Todo
o día", + eventLimitText: "máis", + noEventsMessage: "Non hai eventos para amosar" + }; + + return gl; + +})); diff --git a/src/main/resources/static/packages/core/locales/he.js b/src/main/resources/static/packages/core/locales/he.js new file mode 100644 index 00000000..3521d9e3 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/he.js @@ -0,0 +1,27 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.he = factory())); +}(this, function () { 'use strict'; + + var he = { + code: "he", + dir: 'rtl', + buttonText: { + prev: "הקודם", + next: "הבא", + today: "היום", + month: "חודש", + week: "שבוע", + day: "יום", + list: "סדר יום" + }, + allDayText: "כל היום", + eventLimitText: "אחר", + noEventsMessage: "אין אירועים להצגה", + weekLabel: "שבוע" + }; + + return he; + +})); diff --git a/src/main/resources/static/packages/core/locales/hi.js b/src/main/resources/static/packages/core/locales/hi.js new file mode 100644 index 00000000..15348e69 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/hi.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hi = factory())); +}(this, function () { 'use strict'; + + var hi = { + code: "hi", + week: { + dow: 0, + doy: 6 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "पिछला", + next: "अगला", + today: "आज", + month: "महीना", + week: "सप्ताह", + day: "दिन", + list: "कार्यसूची" + }, + weekLabel: "हफ्ता", + allDayText: "सभी दिन", + eventLimitText: function (n) { + return "+अधिक " + n; + }, + noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए" + }; + + return hi; + +})); diff --git a/src/main/resources/static/packages/core/locales/hr.js b/src/main/resources/static/packages/core/locales/hr.js new file mode 100644 index 00000000..295b4856 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/hr.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hr = factory())); +}(this, function () { 'use strict'; + + var hr = { + code: "hr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prijašnji", + next: "Sljedeći", + today: "Danas", + month: "Mjesec", + week: "Tjedan", + day: "Dan", + list: "Raspored" + }, + weekLabel: "Tje", + allDayText: "Cijeli dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nema događaja za prikaz" + }; + + return hr; + +})); diff --git a/src/main/resources/static/packages/core/locales/hu.js b/src/main/resources/static/packages/core/locales/hu.js new file mode 100644 index 00000000..2f0fe8ac --- /dev/null +++ b/src/main/resources/static/packages/core/locales/hu.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hu = factory())); +}(this, function () { 'use strict'; + + var hu = { + code: "hu", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "vissza", + next: "előre", + today: "ma", + month: "Hónap", + week: "Hét", + day: "Nap", + list: "Napló" + }, + weekLabel: "Hét", + allDayText: "Egész nap", + eventLimitText: "további", + noEventsMessage: "Nincs megjeleníthető esemény" + }; + + return hu; + +})); diff --git a/src/main/resources/static/packages/core/locales/id.js b/src/main/resources/static/packages/core/locales/id.js new file mode 100644 index 00000000..b742e80d --- /dev/null +++ b/src/main/resources/static/packages/core/locales/id.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.id = factory())); +}(this, function () { 'use strict'; + + var id = { + code: "id", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "mundur", + next: "maju", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayHtml: "Sehari
penuh", + eventLimitText: "lebih", + noEventsMessage: "Tidak ada acara untuk ditampilkan" + }; + + return id; + +})); diff --git a/src/main/resources/static/packages/core/locales/is.js b/src/main/resources/static/packages/core/locales/is.js new file mode 100644 index 00000000..dd569bce --- /dev/null +++ b/src/main/resources/static/packages/core/locales/is.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.is = factory())); +}(this, function () { 'use strict'; + + var is = { + code: "is", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Fyrri", + next: "Næsti", + today: "Í dag", + month: "Mánuður", + week: "Vika", + day: "Dagur", + list: "Dagskrá" + }, + weekLabel: "Vika", + allDayHtml: "Allan
daginn", + eventLimitText: "meira", + noEventsMessage: "Engir viðburðir til að sýna" + }; + + return is; + +})); diff --git a/src/main/resources/static/packages/core/locales/it.js b/src/main/resources/static/packages/core/locales/it.js new file mode 100644 index 00000000..39a2829e --- /dev/null +++ b/src/main/resources/static/packages/core/locales/it.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.it = factory())); +}(this, function () { 'use strict'; + + var it = { + code: "it", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Prec", + next: "Succ", + today: "Oggi", + month: "Mese", + week: "Settimana", + day: "Giorno", + list: "Agenda" + }, + weekLabel: "Sm", + allDayHtml: "Tutto il
giorno", + eventLimitText: function (n) { + return "+altri " + n; + }, + noEventsMessage: "Non ci sono eventi da visualizzare" + }; + + return it; + +})); diff --git a/src/main/resources/static/packages/core/locales/ja.js b/src/main/resources/static/packages/core/locales/ja.js new file mode 100644 index 00000000..eb4245b2 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ja.js @@ -0,0 +1,28 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ja = factory())); +}(this, function () { 'use strict'; + + var ja = { + code: "ja", + buttonText: { + prev: "前", + next: "次", + today: "今日", + month: "月", + week: "週", + day: "日", + list: "予定リスト" + }, + weekLabel: "週", + allDayText: "終日", + eventLimitText: function (n) { + return "他 " + n + " 件"; + }, + noEventsMessage: "表示する予定はありません" + }; + + return ja; + +})); diff --git a/src/main/resources/static/packages/core/locales/ka.js b/src/main/resources/static/packages/core/locales/ka.js new file mode 100644 index 00000000..b971c033 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ka.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ka = factory())); +}(this, function () { 'use strict'; + + var ka = { + code: "ka", + week: { + dow: 1, + doy: 7 + }, + buttonText: { + prev: "წინა", + next: "შემდეგი", + today: "დღეს", + month: "თვე", + week: "კვირა", + day: "დღე", + list: "დღის წესრიგი" + }, + weekLabel: "კვ", + allDayText: "მთელი დღე", + eventLimitText: function (n) { + return "+ კიდევ " + n; + }, + noEventsMessage: "ღონისძიებები არ არის" + }; + + return ka; + +})); diff --git a/src/main/resources/static/packages/core/locales/kk.js b/src/main/resources/static/packages/core/locales/kk.js new file mode 100644 index 00000000..5b19b99d --- /dev/null +++ b/src/main/resources/static/packages/core/locales/kk.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.kk = factory())); +}(this, function () { 'use strict'; + + var kk = { + code: "kk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Алдыңғы", + next: "Келесі", + today: "Бүгін", + month: "Ай", + week: "Апта", + day: "Күн", + list: "Күн тәртібі" + }, + weekLabel: "Не", + allDayText: "Күні бойы", + eventLimitText: function (n) { + return "+ тағы " + n; + }, + noEventsMessage: "Көрсету үшін оқиғалар жоқ" + }; + + return kk; + +})); diff --git a/src/main/resources/static/packages/core/locales/ko.js b/src/main/resources/static/packages/core/locales/ko.js new file mode 100644 index 00000000..ffe985d6 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ko.js @@ -0,0 +1,26 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ko = factory())); +}(this, function () { 'use strict'; + + var ko = { + code: "ko", + buttonText: { + prev: "이전달", + next: "다음달", + today: "오늘", + month: "월", + week: "주", + day: "일", + list: "일정목록" + }, + weekLabel: "주", + allDayText: "종일", + eventLimitText: "개", + noEventsMessage: "일정이 없습니다" + }; + + return ko; + +})); diff --git a/src/main/resources/static/packages/core/locales/lb.js b/src/main/resources/static/packages/core/locales/lb.js new file mode 100644 index 00000000..b9b17e3e --- /dev/null +++ b/src/main/resources/static/packages/core/locales/lb.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lb = factory())); +}(this, function () { 'use strict'; + + var lb = { + code: "lb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Zréck", + next: "Weider", + today: "Haut", + month: "Mount", + week: "Woch", + day: "Dag", + list: "Terminiwwersiicht" + }, + weekLabel: "W", + allDayText: "Ganzen Dag", + eventLimitText: "méi", + noEventsMessage: "Nee Evenementer ze affichéieren" + }; + + return lb; + +})); diff --git a/src/main/resources/static/packages/core/locales/lt.js b/src/main/resources/static/packages/core/locales/lt.js new file mode 100644 index 00000000..ec641b75 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/lt.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lt = factory())); +}(this, function () { 'use strict'; + + var lt = { + code: "lt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Atgal", + next: "Pirmyn", + today: "Šiandien", + month: "Mėnuo", + week: "Savaitė", + day: "Diena", + list: "Darbotvarkė" + }, + weekLabel: "SAV", + allDayText: "Visą dieną", + eventLimitText: "daugiau", + noEventsMessage: "Nėra įvykių rodyti" + }; + + return lt; + +})); diff --git a/src/main/resources/static/packages/core/locales/lv.js b/src/main/resources/static/packages/core/locales/lv.js new file mode 100644 index 00000000..5453630d --- /dev/null +++ b/src/main/resources/static/packages/core/locales/lv.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lv = factory())); +}(this, function () { 'use strict'; + + var lv = { + code: "lv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Iepr.", + next: "Nāk.", + today: "Šodien", + month: "Mēnesis", + week: "Nedēļa", + day: "Diena", + list: "Dienas kārtība" + }, + weekLabel: "Ned.", + allDayText: "Visu dienu", + eventLimitText: function (n) { + return "+vēl " + n; + }, + noEventsMessage: "Nav notikumu" + }; + + return lv; + +})); diff --git a/src/main/resources/static/packages/core/locales/mk.js b/src/main/resources/static/packages/core/locales/mk.js new file mode 100644 index 00000000..6729fa63 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/mk.js @@ -0,0 +1,28 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.mk = factory())); +}(this, function () { 'use strict'; + + var mk = { + code: "mk", + buttonText: { + prev: "претходно", + next: "следно", + today: "Денес", + month: "Месец", + week: "Недела", + day: "Ден", + list: "График" + }, + weekLabel: "Сед", + allDayText: "Цел ден", + eventLimitText: function (n) { + return "+повеќе " + n; + }, + noEventsMessage: "Нема настани за прикажување" + }; + + return mk; + +})); diff --git a/src/main/resources/static/packages/core/locales/ms.js b/src/main/resources/static/packages/core/locales/ms.js new file mode 100644 index 00000000..7205ecc7 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ms.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ms = factory())); +}(this, function () { 'use strict'; + + var ms = { + code: "ms", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Sebelum", + next: "Selepas", + today: "hari ini", + month: "Bulan", + week: "Minggu", + day: "Hari", + list: "Agenda" + }, + weekLabel: "Mg", + allDayText: "Sepanjang hari", + eventLimitText: function (n) { + return "masih ada " + n + " acara"; + }, + noEventsMessage: "Tiada peristiwa untuk dipaparkan" + }; + + return ms; + +})); diff --git a/src/main/resources/static/packages/core/locales/nb.js b/src/main/resources/static/packages/core/locales/nb.js new file mode 100644 index 00000000..6464461c --- /dev/null +++ b/src/main/resources/static/packages/core/locales/nb.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nb = factory())); +}(this, function () { 'use strict'; + + var nb = { + code: "nb", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Forrige", + next: "Neste", + today: "I dag", + month: "Måned", + week: "Uke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Uke", + allDayText: "Hele dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + return nb; + +})); diff --git a/src/main/resources/static/packages/core/locales/nl.js b/src/main/resources/static/packages/core/locales/nl.js new file mode 100644 index 00000000..c91b5e55 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/nl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nl = factory())); +}(this, function () { 'use strict'; + + var nl = { + code: "nl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Voorgaand", + next: "Volgende", + today: "Vandaag", + year: "Jaar", + month: "Maand", + week: "Week", + day: "Dag", + list: "Agenda" + }, + allDayText: "Hele dag", + eventLimitText: "extra", + noEventsMessage: "Geen evenementen om te laten zien" + }; + + return nl; + +})); diff --git a/src/main/resources/static/packages/core/locales/nn.js b/src/main/resources/static/packages/core/locales/nn.js new file mode 100644 index 00000000..a5cdd162 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/nn.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nn = factory())); +}(this, function () { 'use strict'; + + var nn = { + code: "nn", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Førre", + next: "Neste", + today: "I dag", + month: "Månad", + week: "Veke", + day: "Dag", + list: "Agenda" + }, + weekLabel: "Veke", + allDayText: "Heile dagen", + eventLimitText: "til", + noEventsMessage: "Ingen hendelser å vise" + }; + + return nn; + +})); diff --git a/src/main/resources/static/packages/core/locales/pl.js b/src/main/resources/static/packages/core/locales/pl.js new file mode 100644 index 00000000..0a22e69c --- /dev/null +++ b/src/main/resources/static/packages/core/locales/pl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pl = factory())); +}(this, function () { 'use strict'; + + var pl = { + code: "pl", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Poprzedni", + next: "Następny", + today: "Dziś", + month: "Miesiąc", + week: "Tydzień", + day: "Dzień", + list: "Plan dnia" + }, + weekLabel: "Tydz", + allDayText: "Cały dzień", + eventLimitText: "więcej", + noEventsMessage: "Brak wydarzeń do wyświetlenia" + }; + + return pl; + +})); diff --git a/src/main/resources/static/packages/core/locales/pt-br.js b/src/main/resources/static/packages/core/locales/pt-br.js new file mode 100644 index 00000000..bfa023dd --- /dev/null +++ b/src/main/resources/static/packages/core/locales/pt-br.js @@ -0,0 +1,28 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['pt-br'] = factory())); +}(this, function () { 'use strict'; + + var ptBr = { + code: "pt-br", + buttonText: { + prev: "Anterior", + next: "Próximo", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Lista" + }, + weekLabel: "Sm", + allDayText: "dia inteiro", + eventLimitText: function (n) { + return "mais +" + n; + }, + noEventsMessage: "Não há eventos para mostrar" + }; + + return ptBr; + +})); diff --git a/src/main/resources/static/packages/core/locales/pt.js b/src/main/resources/static/packages/core/locales/pt.js new file mode 100644 index 00000000..5c54d8d4 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/pt.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pt = factory())); +}(this, function () { 'use strict'; + + var pt = { + code: "pt", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Anterior", + next: "Seguinte", + today: "Hoje", + month: "Mês", + week: "Semana", + day: "Dia", + list: "Agenda" + }, + weekLabel: "Sem", + allDayText: "Todo o dia", + eventLimitText: "mais", + noEventsMessage: "Não há eventos para mostrar" + }; + + return pt; + +})); diff --git a/src/main/resources/static/packages/core/locales/ro.js b/src/main/resources/static/packages/core/locales/ro.js new file mode 100644 index 00000000..e8992f27 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ro.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ro = factory())); +}(this, function () { 'use strict'; + + var ro = { + code: "ro", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "precedentă", + next: "următoare", + today: "Azi", + month: "Lună", + week: "Săptămână", + day: "Zi", + list: "Agendă" + }, + weekLabel: "Săpt", + allDayText: "Toată ziua", + eventLimitText: function (n) { + return "+alte " + n; + }, + noEventsMessage: "Nu există evenimente de afișat" + }; + + return ro; + +})); diff --git a/src/main/resources/static/packages/core/locales/ru.js b/src/main/resources/static/packages/core/locales/ru.js new file mode 100644 index 00000000..77e0308e --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ru.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ru = factory())); +}(this, function () { 'use strict'; + + var ru = { + code: "ru", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Пред", + next: "След", + today: "Сегодня", + month: "Месяц", + week: "Неделя", + day: "День", + list: "Повестка дня" + }, + weekLabel: "Нед", + allDayText: "Весь день", + eventLimitText: function (n) { + return "+ ещё " + n; + }, + noEventsMessage: "Нет событий для отображения" + }; + + return ru; + +})); diff --git a/src/main/resources/static/packages/core/locales/sk.js b/src/main/resources/static/packages/core/locales/sk.js new file mode 100644 index 00000000..3513a64a --- /dev/null +++ b/src/main/resources/static/packages/core/locales/sk.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sk = factory())); +}(this, function () { 'use strict'; + + var sk = { + code: "sk", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Predchádzajúci", + next: "Nasledujúci", + today: "Dnes", + month: "Mesiac", + week: "Týždeň", + day: "Deň", + list: "Rozvrh" + }, + weekLabel: "Ty", + allDayText: "Celý deň", + eventLimitText: function (n) { + return "+ďalšie: " + n; + }, + noEventsMessage: "Žiadne akcie na zobrazenie" + }; + + return sk; + +})); diff --git a/src/main/resources/static/packages/core/locales/sl.js b/src/main/resources/static/packages/core/locales/sl.js new file mode 100644 index 00000000..32335535 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/sl.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sl = factory())); +}(this, function () { 'use strict'; + + var sl = { + code: "sl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prejšnji", + next: "Naslednji", + today: "Trenutni", + month: "Mesec", + week: "Teden", + day: "Dan", + list: "Dnevni red" + }, + weekLabel: "Teden", + allDayText: "Ves dan", + eventLimitText: "več", + noEventsMessage: "Ni dogodkov za prikaz" + }; + + return sl; + +})); diff --git a/src/main/resources/static/packages/core/locales/sq.js b/src/main/resources/static/packages/core/locales/sq.js new file mode 100644 index 00000000..0d43a522 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/sq.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sq = factory())); +}(this, function () { 'use strict'; + + var sq = { + code: "sq", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "mbrapa", + next: "Përpara", + today: "sot", + month: "Muaj", + week: "Javë", + day: "Ditë", + list: "Listë" + }, + weekLabel: "Ja", + allDayHtml: "Gjithë
ditën", + eventLimitText: function (n) { + return "+më tepër " + n; + }, + noEventsMessage: "Nuk ka evente për të shfaqur" + }; + + return sq; + +})); diff --git a/src/main/resources/static/packages/core/locales/sr-cyrl.js b/src/main/resources/static/packages/core/locales/sr-cyrl.js new file mode 100644 index 00000000..ba0d0dfa --- /dev/null +++ b/src/main/resources/static/packages/core/locales/sr-cyrl.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['sr-cyrl'] = factory())); +}(this, function () { 'use strict'; + + var srCyrl = { + code: "sr-cyrl", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Претходна", + next: "следећи", + today: "Данас", + month: "Месец", + week: "Недеља", + day: "Дан", + list: "Планер" + }, + weekLabel: "Сед", + allDayText: "Цео дан", + eventLimitText: function (n) { + return "+ још " + n; + }, + noEventsMessage: "Нема догађаја за приказ" + }; + + return srCyrl; + +})); diff --git a/src/main/resources/static/packages/core/locales/sr.js b/src/main/resources/static/packages/core/locales/sr.js new file mode 100644 index 00000000..23e5c9b2 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/sr.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sr = factory())); +}(this, function () { 'use strict'; + + var sr = { + code: "sr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Prethodna", + next: "Sledeći", + today: "Danas", + month: "Mеsеc", + week: "Nеdеlja", + day: "Dan", + list: "Planеr" + }, + weekLabel: "Sed", + allDayText: "Cеo dan", + eventLimitText: function (n) { + return "+ još " + n; + }, + noEventsMessage: "Nеma događaja za prikaz" + }; + + return sr; + +})); diff --git a/src/main/resources/static/packages/core/locales/sv.js b/src/main/resources/static/packages/core/locales/sv.js new file mode 100644 index 00000000..a887060b --- /dev/null +++ b/src/main/resources/static/packages/core/locales/sv.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sv = factory())); +}(this, function () { 'use strict'; + + var sv = { + code: "sv", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Förra", + next: "Nästa", + today: "Idag", + month: "Månad", + week: "Vecka", + day: "Dag", + list: "Program" + }, + weekLabel: "v.", + allDayText: "Heldag", + eventLimitText: "till", + noEventsMessage: "Inga händelser att visa" + }; + + return sv; + +})); diff --git a/src/main/resources/static/packages/core/locales/th.js b/src/main/resources/static/packages/core/locales/th.js new file mode 100644 index 00000000..faeaee21 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/th.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.th = factory())); +}(this, function () { 'use strict'; + + var th = { + code: "th", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "ก่อนหน้า", + next: "ถัดไป", + prevYear: 'ปีก่อนหน้า', + nextYear: 'ปีถัดไป', + year: 'ปี', + today: "วันนี้", + month: "เดือน", + week: "สัปดาห์", + day: "วัน", + list: "กำหนดการ" + }, + weekLabel: "สัปดาห์", + allDayText: "ตลอดวัน", + eventLimitText: "เพิ่มเติม", + noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง" + }; + + return th; + +})); diff --git a/src/main/resources/static/packages/core/locales/tr.js b/src/main/resources/static/packages/core/locales/tr.js new file mode 100644 index 00000000..48458982 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/tr.js @@ -0,0 +1,30 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.tr = factory())); +}(this, function () { 'use strict'; + + var tr = { + code: "tr", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "geri", + next: "ileri", + today: "bugün", + month: "Ay", + week: "Hafta", + day: "Gün", + list: "Ajanda" + }, + weekLabel: "Hf", + allDayText: "Tüm gün", + eventLimitText: "daha fazla", + noEventsMessage: "Gösterilecek etkinlik yok" + }; + + return tr; + +})); diff --git a/src/main/resources/static/packages/core/locales/ug.js b/src/main/resources/static/packages/core/locales/ug.js new file mode 100644 index 00000000..f13a5c28 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/ug.js @@ -0,0 +1,20 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ug = factory())); +}(this, function () { 'use strict'; + + var ug = { + code: "ug", + buttonText: { + month: "ئاي", + week: "ھەپتە", + day: "كۈن", + list: "كۈنتەرتىپ" + }, + allDayText: "پۈتۈن كۈن" + }; + + return ug; + +})); diff --git a/src/main/resources/static/packages/core/locales/uk.js b/src/main/resources/static/packages/core/locales/uk.js new file mode 100644 index 00000000..de33f250 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/uk.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uk = factory())); +}(this, function () { 'use strict'; + + var uk = { + code: "uk", + week: { + dow: 1, + doy: 7 // The week that contains Jan 1st is the first week of the year. + }, + buttonText: { + prev: "Попередній", + next: "далі", + today: "Сьогодні", + month: "Місяць", + week: "Тиждень", + day: "День", + list: "Порядок денний" + }, + weekLabel: "Тиж", + allDayText: "Увесь день", + eventLimitText: function (n) { + return "+ще " + n + "..."; + }, + noEventsMessage: "Немає подій для відображення" + }; + + return uk; + +})); diff --git a/src/main/resources/static/packages/core/locales/uz.js b/src/main/resources/static/packages/core/locales/uz.js new file mode 100644 index 00000000..24089756 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/uz.js @@ -0,0 +1,24 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uz = factory())); +}(this, function () { 'use strict'; + + var uz = { + code: "uz", + buttonText: { + month: "Oy", + week: "Xafta", + day: "Kun", + list: "Kun tartibi" + }, + allDayText: "Kun bo'yi", + eventLimitText: function (n) { + return "+ yana " + n; + }, + noEventsMessage: "Ko'rsatish uchun voqealar yo'q" + }; + + return uz; + +})); diff --git a/src/main/resources/static/packages/core/locales/vi.js b/src/main/resources/static/packages/core/locales/vi.js new file mode 100644 index 00000000..167ce11d --- /dev/null +++ b/src/main/resources/static/packages/core/locales/vi.js @@ -0,0 +1,32 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.vi = factory())); +}(this, function () { 'use strict'; + + var vi = { + code: "vi", + week: { + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "Trước", + next: "Tiếp", + today: "Hôm nay", + month: "Tháng", + week: "Tuần", + day: "Ngày", + list: "Lịch biểu" + }, + weekLabel: "Tu", + allDayText: "Cả ngày", + eventLimitText: function (n) { + return "+ thêm " + n; + }, + noEventsMessage: "Không có sự kiện để hiển thị" + }; + + return vi; + +})); diff --git a/src/main/resources/static/packages/core/locales/zh-cn.js b/src/main/resources/static/packages/core/locales/zh-cn.js new file mode 100644 index 00000000..4debbb9e --- /dev/null +++ b/src/main/resources/static/packages/core/locales/zh-cn.js @@ -0,0 +1,33 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-cn'] = factory())); +}(this, function () { 'use strict'; + + var zhCn = { + code: "zh-cn", + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, + doy: 4 // The week that contains Jan 4th is the first week of the year. + }, + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "周", + day: "日", + list: "日程" + }, + weekLabel: "周", + allDayText: "全天", + eventLimitText: function (n) { + return "另外 " + n + " 个"; + }, + noEventsMessage: "没有事件显示" + }; + + return zhCn; + +})); diff --git a/src/main/resources/static/packages/core/locales/zh-tw.js b/src/main/resources/static/packages/core/locales/zh-tw.js new file mode 100644 index 00000000..bc14dcd4 --- /dev/null +++ b/src/main/resources/static/packages/core/locales/zh-tw.js @@ -0,0 +1,26 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-tw'] = factory())); +}(this, function () { 'use strict'; + + var zhTw = { + code: "zh-tw", + buttonText: { + prev: "上月", + next: "下月", + today: "今天", + month: "月", + week: "週", + day: "天", + list: "活動列表" + }, + weekLabel: "周", + allDayText: "整天", + eventLimitText: '顯示更多', + noEventsMessage: "没有任何活動" + }; + + return zhTw; + +})); diff --git a/src/main/resources/static/packages/core/main.css b/src/main/resources/static/packages/core/main.css new file mode 100644 index 00000000..0bbe9a35 --- /dev/null +++ b/src/main/resources/static/packages/core/main.css @@ -0,0 +1,1052 @@ +@charset "UTF-8"; +.fc { + direction: ltr; + text-align: left; +} + +.fc-rtl { + text-align: right; +} + +body .fc { + /* extra precedence to overcome jqui */ + font-size: 1em; +} + +/* Colors +--------------------------------------------------------------------------------------------------*/ +.fc-highlight { + /* when user is selecting cells */ + background: #bce8f1; + opacity: 0.3; +} + +.fc-bgevent { + /* default look for background events */ + background: #8fdf82; + opacity: 0.3; +} + +.fc-nonbusiness { + /* default look for non-business-hours areas */ + /* will inherit .fc-bgevent's styles */ + background: #d7d7d7; +} + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-popover { + position: absolute; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); +} + +.fc-popover .fc-header { + /* TODO: be more consistent with fc-head/fc-body */ + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 2px 4px; +} + +.fc-rtl .fc-popover .fc-header { + flex-direction: row-reverse; +} + +.fc-popover .fc-header .fc-title { + margin: 0 2px; +} + +.fc-popover .fc-header .fc-close { + cursor: pointer; + opacity: 0.65; + font-size: 1.1em; +} + +/* Misc Reusable Components +--------------------------------------------------------------------------------------------------*/ +.fc-divider { + border-style: solid; + border-width: 1px; +} + +hr.fc-divider { + height: 0; + margin: 0; + padding: 0 0 2px; + /* height is unreliable across browsers, so use padding */ + border-width: 1px 0; +} + +.fc-bg, +.fc-bgevent-skeleton, +.fc-highlight-skeleton, +.fc-mirror-skeleton { + /* these element should always cling to top-left/right corners */ + position: absolute; + top: 0; + left: 0; + right: 0; +} + +.fc-bg { + bottom: 0; + /* strech bg to bottom edge */ +} + +.fc-bg table { + height: 100%; + /* strech bg to bottom edge */ +} + +/* Tables +--------------------------------------------------------------------------------------------------*/ +.fc table { + width: 100%; + box-sizing: border-box; + /* fix scrollbar issue in firefox */ + table-layout: fixed; + border-collapse: collapse; + border-spacing: 0; + font-size: 1em; + /* normalize cross-browser */ +} + +.fc th { + text-align: center; +} + +.fc th, +.fc td { + border-style: solid; + border-width: 1px; + padding: 0; + vertical-align: top; +} + +.fc td.fc-today { + border-style: double; + /* overcome neighboring borders */ +} + +/* Internal Nav Links +--------------------------------------------------------------------------------------------------*/ +a[data-goto] { + cursor: pointer; +} + +a[data-goto]:hover { + text-decoration: underline; +} + +/* Fake Table Rows +--------------------------------------------------------------------------------------------------*/ +.fc .fc-row { + /* extra precedence to overcome themes forcing a 1px border */ + /* no visible border by default. but make available if need be (scrollbar width compensation) */ + border-style: solid; + border-width: 0; +} + +.fc-row table { + /* don't put left/right border on anything within a fake row. + the outer tbody will worry about this */ + border-left: 0 hidden transparent; + border-right: 0 hidden transparent; + /* no bottom borders on rows */ + border-bottom: 0 hidden transparent; +} + +.fc-row:first-child table { + border-top: 0 hidden transparent; + /* no top border on first row */ +} + +/* Day Row (used within the header and the DayGrid) +--------------------------------------------------------------------------------------------------*/ +.fc-row { + position: relative; +} + +.fc-row .fc-bg { + z-index: 1; +} + +/* highlighting cells & background event skeleton */ +.fc-row .fc-bgevent-skeleton, +.fc-row .fc-highlight-skeleton { + bottom: 0; + /* stretch skeleton to bottom of row */ +} + +.fc-row .fc-bgevent-skeleton table, +.fc-row .fc-highlight-skeleton table { + height: 100%; + /* stretch skeleton to bottom of row */ +} + +.fc-row .fc-highlight-skeleton td, +.fc-row .fc-bgevent-skeleton td { + border-color: transparent; +} + +.fc-row .fc-bgevent-skeleton { + z-index: 2; +} + +.fc-row .fc-highlight-skeleton { + z-index: 3; +} + +/* +row content (which contains day/week numbers and events) as well as "mirror" (which contains +temporary rendered events). +*/ +.fc-row .fc-content-skeleton { + position: relative; + z-index: 4; + padding-bottom: 2px; + /* matches the space above the events */ +} + +.fc-row .fc-mirror-skeleton { + z-index: 5; +} + +.fc .fc-row .fc-content-skeleton table, +.fc .fc-row .fc-content-skeleton td, +.fc .fc-row .fc-mirror-skeleton td { + /* see-through to the background below */ + /* extra precedence to prevent theme-provided backgrounds */ + background: none; + /* in case s are globally styled */ + border-color: transparent; +} + +.fc-row .fc-content-skeleton td, +.fc-row .fc-mirror-skeleton td { + /* don't put a border between events and/or the day number */ + border-bottom: 0; +} + +.fc-row .fc-content-skeleton tbody td, +.fc-row .fc-mirror-skeleton tbody td { + /* don't put a border between event cells */ + border-top: 0; +} + +/* Scrolling Container +--------------------------------------------------------------------------------------------------*/ +.fc-scroller { + -webkit-overflow-scrolling: touch; +} + +/* TODO: move to timegrid/daygrid */ +.fc-scroller > .fc-day-grid, +.fc-scroller > .fc-time-grid { + position: relative; + /* re-scope all positions */ + width: 100%; + /* hack to force re-sizing this inner element when scrollbars appear/disappear */ +} + +/* Global Event Styles +--------------------------------------------------------------------------------------------------*/ +.fc-event { + position: relative; + /* for resize handle and other inner positioning */ + display: block; + /* make the tag block */ + font-size: 0.85em; + line-height: 1.4; + border-radius: 3px; + border: 1px solid #3788d8; +} + +.fc-event, +.fc-event-dot { + background-color: #3788d8; + /* default BACKGROUND color */ +} + +.fc-event, +.fc-event:hover { + color: #fff; + /* default TEXT color */ + text-decoration: none; + /* if has an href */ +} + +.fc-event[href], +.fc-event.fc-draggable { + cursor: pointer; + /* give events with links and draggable events a hand mouse pointer */ +} + +.fc-not-allowed, +.fc-not-allowed .fc-event { + /* to override an event's custom cursor */ + cursor: not-allowed; +} + +.fc-event .fc-content { + position: relative; + z-index: 2; +} + +/* resizer (cursor AND touch devices) */ +.fc-event .fc-resizer { + position: absolute; + z-index: 4; +} + +/* resizer (touch devices) */ +.fc-event .fc-resizer { + display: none; +} + +.fc-event.fc-allow-mouse-resize .fc-resizer, +.fc-event.fc-selected .fc-resizer { + /* only show when hovering or selected (with touch) */ + display: block; +} + +/* hit area */ +.fc-event.fc-selected .fc-resizer:before { + /* 40x40 touch area */ + content: ""; + position: absolute; + z-index: 9999; + /* user of this util can scope within a lower z-index */ + top: 50%; + left: 50%; + width: 40px; + height: 40px; + margin-left: -20px; + margin-top: -20px; +} + +/* Event Selection (only for touch devices) +--------------------------------------------------------------------------------------------------*/ +.fc-event.fc-selected { + z-index: 9999 !important; + /* overcomes inline z-index */ + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} + +.fc-event.fc-selected:after { + content: ""; + position: absolute; + z-index: 1; + /* same z-index as fc-bg, behind text */ + /* overcome the borders */ + top: -1px; + right: -1px; + bottom: -1px; + left: -1px; + /* darkening effect */ + background: #000; + opacity: 0.25; +} + +/* Event Dragging +--------------------------------------------------------------------------------------------------*/ +.fc-event.fc-dragging.fc-selected { + box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3); +} + +.fc-event.fc-dragging:not(.fc-selected) { + opacity: 0.75; +} + +/* Horizontal Events +--------------------------------------------------------------------------------------------------*/ +/* bigger touch area when selected */ +.fc-h-event.fc-selected:before { + content: ""; + position: absolute; + z-index: 3; + /* below resizers */ + top: -10px; + bottom: -10px; + left: 0; + right: 0; +} + +/* events that are continuing to/from another week. kill rounded corners and butt up against edge */ +.fc-ltr .fc-h-event.fc-not-start, +.fc-rtl .fc-h-event.fc-not-end { + margin-left: 0; + border-left-width: 0; + padding-left: 1px; + /* replace the border with padding */ + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.fc-ltr .fc-h-event.fc-not-end, +.fc-rtl .fc-h-event.fc-not-start { + margin-right: 0; + border-right-width: 0; + padding-right: 1px; + /* replace the border with padding */ + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +/* resizer (cursor AND touch devices) */ +/* left resizer */ +.fc-ltr .fc-h-event .fc-start-resizer, +.fc-rtl .fc-h-event .fc-end-resizer { + cursor: w-resize; + left: -1px; + /* overcome border */ +} + +/* right resizer */ +.fc-ltr .fc-h-event .fc-end-resizer, +.fc-rtl .fc-h-event .fc-start-resizer { + cursor: e-resize; + right: -1px; + /* overcome border */ +} + +/* resizer (mouse devices) */ +.fc-h-event.fc-allow-mouse-resize .fc-resizer { + width: 7px; + top: -1px; + /* overcome top border */ + bottom: -1px; + /* overcome bottom border */ +} + +/* resizer (touch devices) */ +.fc-h-event.fc-selected .fc-resizer { + /* 8x8 little dot */ + border-radius: 4px; + border-width: 1px; + width: 6px; + height: 6px; + border-style: solid; + border-color: inherit; + background: #fff; + /* vertically center */ + top: 50%; + margin-top: -4px; +} + +/* left resizer */ +.fc-ltr .fc-h-event.fc-selected .fc-start-resizer, +.fc-rtl .fc-h-event.fc-selected .fc-end-resizer { + margin-left: -4px; + /* centers the 8x8 dot on the left edge */ +} + +/* right resizer */ +.fc-ltr .fc-h-event.fc-selected .fc-end-resizer, +.fc-rtl .fc-h-event.fc-selected .fc-start-resizer { + margin-right: -4px; + /* centers the 8x8 dot on the right edge */ +} + +/* DayGrid events +---------------------------------------------------------------------------------------------------- +We use the full "fc-day-grid-event" class instead of using descendants because the event won't +be a descendant of the grid when it is being dragged. +*/ +.fc-day-grid-event { + margin: 1px 2px 0; + /* spacing between events and edges */ + padding: 0 1px; +} + +tr:first-child > td > .fc-day-grid-event { + margin-top: 2px; + /* a little bit more space before the first event */ +} + +.fc-mirror-skeleton tr:first-child > td > .fc-day-grid-event { + margin-top: 0; + /* except for mirror skeleton */ +} + +.fc-day-grid-event .fc-content { + /* force events to be one-line tall */ + white-space: nowrap; + overflow: hidden; +} + +.fc-day-grid-event .fc-time { + font-weight: bold; +} + +/* resizer (cursor devices) */ +/* left resizer */ +.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer, +.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer { + margin-left: -2px; + /* to the day cell's edge */ +} + +/* right resizer */ +.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer, +.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer { + margin-right: -2px; + /* to the day cell's edge */ +} + +/* Event Limiting +--------------------------------------------------------------------------------------------------*/ +/* "more" link that represents hidden events */ +a.fc-more { + margin: 1px 3px; + font-size: 0.85em; + cursor: pointer; + text-decoration: none; +} + +a.fc-more:hover { + text-decoration: underline; +} + +.fc-limited { + /* rows and cells that are hidden because of a "more" link */ + display: none; +} + +/* popover that appears when "more" link is clicked */ +.fc-day-grid .fc-row { + z-index: 1; + /* make the "more" popover one higher than this */ +} + +.fc-more-popover { + z-index: 2; + width: 220px; +} + +.fc-more-popover .fc-event-container { + padding: 10px; +} + +/* Now Indicator +--------------------------------------------------------------------------------------------------*/ +.fc-now-indicator { + position: absolute; + border: 0 solid red; +} + +/* Utilities +--------------------------------------------------------------------------------------------------*/ +.fc-unselectable { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* +TODO: more distinction between this file and common.css +*/ +/* Colors +--------------------------------------------------------------------------------------------------*/ +.fc-unthemed th, +.fc-unthemed td, +.fc-unthemed thead, +.fc-unthemed tbody, +.fc-unthemed .fc-divider, +.fc-unthemed .fc-row, +.fc-unthemed .fc-content, +.fc-unthemed .fc-popover, +.fc-unthemed .fc-list-view, +.fc-unthemed .fc-list-heading td { + border-color: #ddd; +} + +.fc-unthemed .fc-popover { + background-color: #fff; +} + +.fc-unthemed .fc-divider, +.fc-unthemed .fc-popover .fc-header, +.fc-unthemed .fc-list-heading td { + background: #eee; +} + +.fc-unthemed td.fc-today { + background: #fcf8e3; +} + +.fc-unthemed .fc-disabled-day { + background: #d7d7d7; + opacity: 0.3; +} + +/* Icons +-------------------------------------------------------------------------------------------------- +from https://feathericons.com/ and built with IcoMoon +*/ +@font-face { + font-family: "fcicons"; + src: url("data:application/x-font-ttf;charset=utf-8;base64,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") format("truetype"); + font-weight: normal; + font-style: normal; +} +.fc-icon { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "fcicons" !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.fc-icon-chevron-left:before { + content: ""; +} + +.fc-icon-chevron-right:before { + content: ""; +} + +.fc-icon-chevrons-left:before { + content: ""; +} + +.fc-icon-chevrons-right:before { + content: ""; +} + +.fc-icon-minus-square:before { + content: ""; +} + +.fc-icon-plus-square:before { + content: ""; +} + +.fc-icon-x:before { + content: ""; +} + +.fc-icon { + display: inline-block; + width: 1em; + height: 1em; + text-align: center; +} + +/* Buttons +-------------------------------------------------------------------------------------------------- +Lots taken from Flatly (MIT): https://bootswatch.com/4/flatly/bootstrap.css +*/ +/* reset */ +.fc-button { + border-radius: 0; + overflow: visible; + text-transform: none; + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.fc-button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +.fc-button { + -webkit-appearance: button; +} + +.fc-button:not(:disabled) { + cursor: pointer; +} + +.fc-button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +/* theme */ +.fc-button { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.4em 0.65em; + font-size: 1em; + line-height: 1.5; + border-radius: 0.25em; +} + +.fc-button:hover { + color: #212529; + text-decoration: none; +} + +.fc-button:focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25); + box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25); +} + +.fc-button:disabled { + opacity: 0.65; +} + +/* "primary" coloring */ +.fc-button-primary { + color: #fff; + background-color: #2C3E50; + border-color: #2C3E50; +} + +.fc-button-primary:hover { + color: #fff; + background-color: #1e2b37; + border-color: #1a252f; +} + +.fc-button-primary:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); + box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); +} + +.fc-button-primary:disabled { + color: #fff; + background-color: #2C3E50; + border-color: #2C3E50; +} + +.fc-button-primary:not(:disabled):active, +.fc-button-primary:not(:disabled).fc-button-active { + color: #fff; + background-color: #1a252f; + border-color: #151e27; +} + +.fc-button-primary:not(:disabled):active:focus, +.fc-button-primary:not(:disabled).fc-button-active:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); + box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); +} + +/* icons within buttons */ +.fc-button .fc-icon { + vertical-align: middle; + font-size: 1.5em; +} + +/* Buttons Groups +--------------------------------------------------------------------------------------------------*/ +.fc-button-group { + position: relative; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.fc-button-group > .fc-button { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.fc-button-group > .fc-button:hover { + z-index: 1; +} + +.fc-button-group > .fc-button:focus, +.fc-button-group > .fc-button:active, +.fc-button-group > .fc-button.fc-button-active { + z-index: 1; +} + +.fc-button-group > .fc-button:not(:first-child) { + margin-left: -1px; +} + +.fc-button-group > .fc-button:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.fc-button-group > .fc-button:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-unthemed .fc-popover { + border-width: 1px; + border-style: solid; +} + +/* List View +--------------------------------------------------------------------------------------------------*/ +.fc-unthemed .fc-list-item:hover td { + background-color: #f5f5f5; +} + +/* Toolbar +--------------------------------------------------------------------------------------------------*/ +.fc-toolbar { + display: flex; + justify-content: space-between; + align-items: center; +} + +.fc-toolbar.fc-header-toolbar { + margin-bottom: 1.5em; +} + +.fc-toolbar.fc-footer-toolbar { + margin-top: 1.5em; +} + +/* inner content */ +.fc-toolbar > * > :not(:first-child) { + margin-left: 0.75em; +} + +.fc-toolbar h2 { + font-size: 1.75em; + margin: 0; +} + +/* View Structure +--------------------------------------------------------------------------------------------------*/ +.fc-view-container { + position: relative; +} + +/* undo twitter bootstrap's box-sizing rules. normalizes positioning techniques */ +/* don't do this for the toolbar because we'll want bootstrap to style those buttons as some pt */ +.fc-view-container *, +.fc-view-container *:before, +.fc-view-container *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.fc-view, +.fc-view > table { + /* so dragged elements can be above the view's main element */ + position: relative; + z-index: 1; +} + +@media print { + .fc { + max-width: 100% !important; + } + + /* Global Event Restyling + --------------------------------------------------------------------------------------------------*/ + .fc-event { + background: #fff !important; + color: #000 !important; + page-break-inside: avoid; + } + + .fc-event .fc-resizer { + display: none; + } + + /* Table & Day-Row Restyling + --------------------------------------------------------------------------------------------------*/ + .fc th, +.fc td, +.fc hr, +.fc thead, +.fc tbody, +.fc-row { + border-color: #ccc !important; + background: #fff !important; + } + + /* kill the overlaid, absolutely-positioned components */ + /* common... */ + .fc-bg, +.fc-bgevent-skeleton, +.fc-highlight-skeleton, +.fc-mirror-skeleton, +.fc-bgevent-container, +.fc-business-container, +.fc-highlight-container, +.fc-mirror-container { + display: none; + } + + /* don't force a min-height on rows (for DayGrid) */ + .fc tbody .fc-row { + height: auto !important; + /* undo height that JS set in distributeHeight */ + min-height: 0 !important; + /* undo the min-height from each view's specific stylesheet */ + } + + .fc tbody .fc-row .fc-content-skeleton { + position: static; + /* undo .fc-rigid */ + padding-bottom: 0 !important; + /* use a more border-friendly method for this... */ + } + + .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { + /* only works in newer browsers */ + padding-bottom: 1em; + /* ...gives space within the skeleton. also ensures min height in a way */ + } + + .fc tbody .fc-row .fc-content-skeleton table { + /* provides a min-height for the row, but only effective for IE, which exaggerates this value, + making it look more like 3em. for other browers, it will already be this tall */ + height: 1em; + } + + /* Undo month-view event limiting. Display all events and hide the "more" links + --------------------------------------------------------------------------------------------------*/ + .fc-more-cell, +.fc-more { + display: none !important; + } + + .fc tr.fc-limited { + display: table-row !important; + } + + .fc td.fc-limited { + display: table-cell !important; + } + + .fc-popover { + display: none; + /* never display the "more.." popover in print mode */ + } + + /* TimeGrid Restyling + --------------------------------------------------------------------------------------------------*/ + /* undo the min-height 100% trick used to fill the container's height */ + .fc-time-grid { + min-height: 0 !important; + } + + /* don't display the side axis at all ("all-day" and time cells) */ + .fc-timeGrid-view .fc-axis { + display: none; + } + + /* don't display the horizontal lines */ + .fc-slats, +.fc-time-grid hr { + /* this hr is used when height is underused and needs to be filled */ + display: none !important; + /* important overrides inline declaration */ + } + + /* let the container that holds the events be naturally positioned and create real height */ + .fc-time-grid .fc-content-skeleton { + position: static; + } + + /* in case there are no events, we still want some height */ + .fc-time-grid .fc-content-skeleton table { + height: 4em; + } + + /* kill the horizontal spacing made by the event container. event margins will be done below */ + .fc-time-grid .fc-event-container { + margin: 0 !important; + } + + /* TimeGrid *Event* Restyling + --------------------------------------------------------------------------------------------------*/ + /* naturally position events, vertically stacking them */ + .fc-time-grid .fc-event { + position: static !important; + margin: 3px 2px !important; + } + + /* for events that continue to a future day, give the bottom border back */ + .fc-time-grid .fc-event.fc-not-end { + border-bottom-width: 1px !important; + } + + /* indicate the event continues via "..." text */ + .fc-time-grid .fc-event.fc-not-end:after { + content: "..."; + } + + /* for events that are continuations from previous days, give the top border back */ + .fc-time-grid .fc-event.fc-not-start { + border-top-width: 1px !important; + } + + /* indicate the event is a continuation via "..." text */ + .fc-time-grid .fc-event.fc-not-start:before { + content: "..."; + } + + /* time */ + /* undo a previous declaration and let the time text span to a second line */ + .fc-time-grid .fc-event .fc-time { + white-space: normal !important; + } + + /* hide the the time that is normally displayed... */ + .fc-time-grid .fc-event .fc-time span { + display: none; + } + + /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ + .fc-time-grid .fc-event .fc-time:after { + content: attr(data-full); + } + + /* Vertical Scroller & Containers + --------------------------------------------------------------------------------------------------*/ + /* kill the scrollbars and allow natural height */ + .fc-scroller, +.fc-day-grid-container, +.fc-time-grid-container { + /* */ + overflow: visible !important; + height: auto !important; + } + + /* kill the horizontal border/padding used to compensate for scrollbars */ + .fc-row { + border: 0 !important; + margin: 0 !important; + } + + /* Button Controls + --------------------------------------------------------------------------------------------------*/ + .fc-button-group, +.fc button { + display: none; + /* don't display any button-related controls */ + } +} \ No newline at end of file diff --git a/src/main/resources/static/packages/core/main.d.ts b/src/main/resources/static/packages/core/main.d.ts new file mode 100644 index 00000000..315849db --- /dev/null +++ b/src/main/resources/static/packages/core/main.d.ts @@ -0,0 +1,2734 @@ +// Generated by dts-bundle v0.7.3-fork.1 +// Dependencies for this module: +// ../../../../../@fullcalendar/core + +declare module '@fullcalendar/core' { + export const version = "<%= version %>"; + export { OptionsInput } from '@fullcalendar/core/types/input-types'; + export { EventInput, EventDef, EventDefHash, EventInstance, EventInstanceHash, parseEventDef, createEventInstance, EventTuple } from '@fullcalendar/core/structs/event'; + export { BusinessHoursInput, parseBusinessHours } from '@fullcalendar/core/structs/business-hours'; + export { applyAll, debounce, padStart, isInt, capitaliseFirstLetter, parseFieldSpecs, compareByFieldSpecs, compareByFieldSpec, flexibleCompare, computeVisibleDayRange, refineProps, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, isMultiDayRange, distributeHeight, undistributeHeight, preventSelection, allowSelection, preventContextMenu, allowContextMenu, compareNumbers, enableCursor, disableCursor, diffDates } from '@fullcalendar/core/util/misc'; + export { htmlEscape, cssToStr } from '@fullcalendar/core/util/html'; + export { removeExact, isArraysEqual } from '@fullcalendar/core/util/array'; + export { memoize, memoizeOutput } from '@fullcalendar/core/util/memoize'; + export { memoizeRendering, MemoizedRendering } from '@fullcalendar/core/component/memoized-rendering'; + export { intersectRects, Rect, pointInsideRect, constrainPoint, getRectCenter, diffPoints, Point, translateRect } from '@fullcalendar/core/util/geom'; + export { mapHash, filterHash, isPropsEqual } from '@fullcalendar/core/util/object'; + export { findElements, findChildren, htmlToElement, createElement, insertAfterElement, prependToElement, removeElement, appendToElement, applyStyle, applyStyleProp, elementMatches, elementClosest, forceClassName } from '@fullcalendar/core/util/dom-manip'; + export { EventStore, filterEventStoreDefs, createEmptyEventStore, mergeEventStores, getRelevantEvents, eventTupleToStore } from '@fullcalendar/core/structs/event-store'; + export { EventUiHash, EventUi, processScopedUiProps, combineEventUis } from '@fullcalendar/core/component/event-ui'; + export { default as Splitter, SplittableProps } from '@fullcalendar/core/component/event-splitting'; + export { buildGotoAnchorHtml, getAllDayHtml, getDayClasses } from '@fullcalendar/core/component/date-rendering'; + export { preventDefault, listenBySelector, whenTransitionDone } from '@fullcalendar/core/util/dom-event'; + export { computeInnerRect, computeEdges, computeHeightAndMargins, getClippingParents, computeClippingRect, computeRect } from '@fullcalendar/core/util/dom-geom'; + export { unpromisify } from '@fullcalendar/core/util/promise'; + export { default as EmitterMixin, EmitterInterface } from '@fullcalendar/core/common/EmitterMixin'; + export { DateRange, rangeContainsMarker, intersectRanges, rangesEqual, rangesIntersect, rangeContainsRange } from '@fullcalendar/core/datelib/date-range'; + export { default as Mixin } from '@fullcalendar/core/common/Mixin'; + export { default as PositionCache } from '@fullcalendar/core/common/PositionCache'; + export { default as ScrollComponent, ScrollbarWidths } from '@fullcalendar/core/common/ScrollComponent'; + export { ScrollController, ElementScrollController, WindowScrollController } from '@fullcalendar/core/common/scroll-controller'; + export { default as Theme } from '@fullcalendar/core/theme/Theme'; + export { default as Component, ComponentContext } from '@fullcalendar/core/component/Component'; + export { default as DateComponent, Seg, EventSegUiInteractionState } from '@fullcalendar/core/component/DateComponent'; + export { default as Calendar, DatePointTransform, DateSpanTransform, DateSelectionApi } from '@fullcalendar/core/Calendar'; + export { default as View, ViewProps } from '@fullcalendar/core/View'; + export { default as FgEventRenderer, buildSegCompareObj } from '@fullcalendar/core/component/renderers/FgEventRenderer'; + export { default as FillRenderer } from '@fullcalendar/core/component/renderers/FillRenderer'; + export { default as DateProfileGenerator, DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + export { ViewDef } from '@fullcalendar/core/structs/view-def'; + export { ViewSpec } from '@fullcalendar/core/structs/view-spec'; + export { DateSpan, DateSpanApi, DatePointApi, isDateSpansEqual } from '@fullcalendar/core/structs/date-span'; + export { DateMarker, addDays, startOfDay, addMs, addWeeks, diffWeeks, diffWholeWeeks, diffWholeDays, diffDayAndTime, diffDays, isValidDate } from '@fullcalendar/core/datelib/marker'; + export { Duration, createDuration, isSingleDay, multiplyDuration, addDurations, asRoughMinutes, asRoughSeconds, asRoughMs, wholeDivideDurations, greatestDurationDenominator } from '@fullcalendar/core/datelib/duration'; + export { DateEnv, DateMarkerMeta } from '@fullcalendar/core/datelib/env'; + export { DateFormatter, createFormatter, VerboseFormattingArg, formatIsoTimeString } from '@fullcalendar/core/datelib/formatting'; + export { NamedTimeZoneImpl } from '@fullcalendar/core/datelib/timezone'; + export { parse as parseMarker } from '@fullcalendar/core/datelib/parsing'; + export { EventSourceDef, EventSource, EventSourceHash } from '@fullcalendar/core/structs/event-source'; + export { Interaction, InteractionSettings, interactionSettingsToStore, interactionSettingsStore, InteractionSettingsStore } from '@fullcalendar/core/interactions/interaction'; + export { PointerDragEvent } from '@fullcalendar/core/interactions/pointer'; + export { Hit } from '@fullcalendar/core/interactions/hit'; + export { dateSelectionJoinTransformer } from '@fullcalendar/core/interactions/date-selecting'; + export { eventDragMutationMassager, EventDropTransformers } from '@fullcalendar/core/interactions/event-dragging'; + export { EventResizeJoinTransforms } from '@fullcalendar/core/interactions/event-resizing'; + export { default as ElementDragging } from '@fullcalendar/core/interactions/ElementDragging'; + export { formatDate, formatRange } from '@fullcalendar/core/formatting-api'; + export { globalDefaults, config } from '@fullcalendar/core/options'; + export { RecurringType, ParsedRecurring } from '@fullcalendar/core/structs/recurring-event'; + export { DragMetaInput, DragMeta, parseDragMeta } from '@fullcalendar/core/structs/drag-meta'; + export { createPlugin, PluginDef, PluginDefInput, ViewPropsTransformer, ViewContainerModifier } from '@fullcalendar/core/plugin-system'; + export { reducerFunc, Action, CalendarState } from '@fullcalendar/core/reducers/types'; + export { CalendarComponentProps } from '@fullcalendar/core/CalendarComponent'; + export { default as DayHeader } from '@fullcalendar/core/common/DayHeader'; + export { computeFallbackHeaderFormat, renderDateCell } from '@fullcalendar/core/common/table-utils'; + export { default as DaySeries } from '@fullcalendar/core/common/DaySeries'; + export { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + export { EventRenderRange, sliceEventStore, hasBgRendering, getElSeg, computeEventDraggable, computeEventStartResizable, computeEventEndResizable } from '@fullcalendar/core/component/event-rendering'; + export { default as DayTable, DayTableSeg, DayTableCell } from '@fullcalendar/core/common/DayTable'; + export { default as Slicer, SlicedProps } from '@fullcalendar/core/common/slicing-utils'; + export { EventMutation, applyMutationToEventStore } from '@fullcalendar/core/structs/event-mutation'; + export { Constraint, ConstraintInput, AllowFunc, isPropsValid, isInteractionValid } from '@fullcalendar/core/validation'; + export { default as EventApi } from '@fullcalendar/core/api/EventApi'; + export { default as requestJson } from '@fullcalendar/core/util/requestJson'; +} + +declare module '@fullcalendar/core/types/input-types' { + import View from '@fullcalendar/core/View'; + import { EventSourceInput, EventInputTransformer } from '@fullcalendar/core/structs/event-source'; + import { Duration, DurationInput } from '@fullcalendar/core/datelib/duration'; + import { DateInput } from '@fullcalendar/core/datelib/env'; + import { FormatterInput } from '@fullcalendar/core/datelib/formatting'; + import { DateRangeInput } from '@fullcalendar/core/datelib/date-range'; + import { BusinessHoursInput } from '@fullcalendar/core/structs/business-hours'; + import EventApi from '@fullcalendar/core/api/EventApi'; + import { AllowFunc, ConstraintInput, OverlapFunc } from '@fullcalendar/core/validation'; + import { PluginDef } from '@fullcalendar/core/plugin-system'; + import { LocaleSingularArg, RawLocale } from '@fullcalendar/core/datelib/locale'; + export interface ToolbarInput { + left?: string; + center?: string; + right?: string; + } + export interface CustomButtonInput { + text: string; + icon?: string; + themeIcon?: string; + bootstrapFontAwesome?: string; + click(element: HTMLElement): void; + } + export interface ButtonIconsInput { + prev?: string; + next?: string; + prevYear?: string; + nextYear?: string; + } + export interface ButtonTextCompoundInput { + prev?: string; + next?: string; + prevYear?: string; + nextYear?: string; + today?: string; + month?: string; + week?: string; + day?: string; + [viewId: string]: string | undefined; + } + export interface EventSegment { + event: EventApi; + start: Date; + end: Date; + isStart: boolean; + isEnd: boolean; + } + export interface CellInfo { + date: Date; + dayEl: HTMLElement; + moreEl: HTMLElement; + segs: EventSegment[]; + hiddenSegs: EventSegment[]; + } + export interface DropInfo { + start: Date; + end: Date; + } + export type EventHandlerName = '_init' | 'selectAllow' | 'eventAllow' | 'eventDataTransform' | 'datesRender' | 'datesDestroy' | 'dayRender' | 'windowResize' | 'dateClick' | 'eventClick' | 'eventMouseEnter' | 'eventMouseLeave' | 'select' | 'unselect' | 'loading' | 'eventRender' | 'eventPositioned' | '_eventsPositioned' | 'eventDestroy' | 'eventDragStart' | 'eventDragStop' | 'eventDrop' | '_destroyed' | 'drop' | 'eventResizeStart' | 'eventResizeStop' | 'eventResize' | 'eventReceive' | 'eventLeave' | 'viewSkeletonRender' | 'viewSkeletonDestroy' | '_noEventDrop' | '_noEventResize' | 'eventLimitClick' | 'resourceRender'; + export type EventHandlerArgs = Parameters any>>; + export type EventHandlerArg = EventHandlerArgs[0]; + export interface OptionsInputBase { + header?: boolean | ToolbarInput; + footer?: boolean | ToolbarInput; + customButtons?: { + [name: string]: CustomButtonInput; + }; + buttonIcons?: boolean | ButtonIconsInput; + themeSystem?: 'standard' | string; + bootstrapFontAwesome?: boolean | ButtonIconsInput; + firstDay?: number; + dir?: 'ltr' | 'rtl' | 'auto'; + weekends?: boolean; + hiddenDays?: number[]; + fixedWeekCount?: boolean; + weekNumbers?: boolean; + weekNumbersWithinDays?: boolean; + weekNumberCalculation?: 'local' | 'ISO' | ((m: Date) => number); + businessHours?: BusinessHoursInput; + showNonCurrentDates?: boolean; + height?: number | 'auto' | 'parent' | (() => number); + contentHeight?: number | 'auto' | (() => number); + aspectRatio?: number; + handleWindowResize?: boolean; + windowResizeDelay?: number; + eventLimit?: boolean | number; + eventLimitClick?: 'popover' | 'week' | 'day' | 'timeGridWeek' | 'timeGridDay' | string | ((arg: { + date: Date; + allDay: boolean; + dayEl: HTMLElement; + moreEl: HTMLElement; + segs: any[]; + hiddenSegs: any[]; + jsEvent: MouseEvent; + view: View; + }) => void); + timeZone?: string | boolean; + now?: DateInput | (() => DateInput); + defaultView?: string; + allDaySlot?: boolean; + allDayText?: string; + slotDuration?: DurationInput; + slotLabelFormat?: FormatterInput; + slotLabelInterval?: DurationInput; + snapDuration?: DurationInput; + scrollTime?: DurationInput; + minTime?: DurationInput; + maxTime?: DurationInput; + slotEventOverlap?: boolean; + listDayFormat?: FormatterInput | boolean; + listDayAltFormat?: FormatterInput | boolean; + noEventsMessage?: string; + defaultDate?: DateInput; + nowIndicator?: boolean; + visibleRange?: ((currentDate: Date) => DateRangeInput) | DateRangeInput; + validRange?: DateRangeInput; + dateIncrement?: DurationInput; + dateAlignment?: string; + duration?: DurationInput; + dayCount?: number; + locales?: RawLocale[]; + locale?: LocaleSingularArg; + eventTimeFormat?: FormatterInput; + columnHeader?: boolean; + columnHeaderFormat?: FormatterInput; + columnHeaderText?: string | ((date: DateInput) => string); + columnHeaderHtml?: string | ((date: DateInput) => string); + titleFormat?: FormatterInput; + weekLabel?: string; + displayEventTime?: boolean; + displayEventEnd?: boolean; + eventLimitText?: string | ((eventCnt: number) => string); + dayPopoverFormat?: FormatterInput; + navLinks?: boolean; + navLinkDayClick?: string | ((date: Date, jsEvent: Event) => void); + navLinkWeekClick?: string | ((weekStart: any, jsEvent: Event) => void); + selectable?: boolean; + selectMirror?: boolean; + unselectAuto?: boolean; + unselectCancel?: string; + defaultAllDayEventDuration?: DurationInput; + defaultTimedEventDuration?: DurationInput; + cmdFormatter?: string; + defaultRangeSeparator?: string; + selectConstraint?: ConstraintInput; + selectOverlap?: boolean | OverlapFunc; + selectAllow?: AllowFunc; + editable?: boolean; + eventStartEditable?: boolean; + eventDurationEditable?: boolean; + eventConstraint?: ConstraintInput; + eventOverlap?: boolean | OverlapFunc; + eventAllow?: AllowFunc; + eventClassName?: string[] | string; + eventClassNames?: string[] | string; + eventBackgroundColor?: string; + eventBorderColor?: string; + eventTextColor?: string; + eventColor?: string; + events?: EventSourceInput; + eventSources?: EventSourceInput[]; + allDayDefault?: boolean; + startParam?: string; + endParam?: string; + lazyFetching?: boolean; + nextDayThreshold?: DurationInput; + eventOrder?: string | Array<((a: EventApi, b: EventApi) => number) | (string | ((a: EventApi, b: EventApi) => number))>; + rerenderDelay?: number | null; + dragRevertDuration?: number; + dragScroll?: boolean; + longPressDelay?: number; + eventLongPressDelay?: number; + droppable?: boolean; + dropAccept?: string | ((draggable: any) => boolean); + eventDataTransform?: EventInputTransformer; + allDayMaintainDuration?: boolean; + eventResizableFromStart?: boolean; + timeGridEventMinHeight?: number; + allDayHtml?: string; + eventDragMinDistance?: number; + eventSourceFailure?: any; + eventSourceSuccess?: any; + forceEventDuration?: boolean; + progressiveEventRendering?: boolean; + selectLongPressDelay?: number; + selectMinDistance?: number; + timeZoneParam?: string; + titleRangeSeparator?: string; + datesRender?(arg: { + view: View; + el: HTMLElement; + }): void; + datesDestroy?(arg: { + view: View; + el: HTMLElement; + }): void; + dayRender?(arg: { + view: View; + date: Date; + allDay?: boolean; + el: HTMLElement; + }): void; + windowResize?(view: View): void; + dateClick?(arg: { + date: Date; + dateStr: string; + allDay: boolean; + resource?: any; + dayEl: HTMLElement; + jsEvent: MouseEvent; + view: View; + }): void; + eventClick?(arg: { + el: HTMLElement; + event: EventApi; + jsEvent: MouseEvent; + view: View; + }): boolean | void; + eventMouseEnter?(arg: { + el: HTMLElement; + event: EventApi; + jsEvent: MouseEvent; + view: View; + }): void; + eventMouseLeave?(arg: { + el: HTMLElement; + event: EventApi; + jsEvent: MouseEvent; + view: View; + }): void; + select?(arg: { + start: Date; + end: Date; + startStr: string; + endStr: string; + allDay: boolean; + resource?: any; + jsEvent: MouseEvent; + view: View; + }): void; + unselect?(arg: { + view: View; + jsEvent: Event; + }): void; + loading?(isLoading: boolean): void; + eventRender?(arg: { + isMirror: boolean; + isStart: boolean; + isEnd: boolean; + event: EventApi; + el: HTMLElement; + view: View; + }): void; + eventPositioned?(arg: { + isMirror: boolean; + isStart: boolean; + isEnd: boolean; + event: EventApi; + el: HTMLElement; + view: View; + }): void; + _eventsPositioned?(arg: { + view: View; + }): void; + eventDestroy?(arg: { + isMirror: boolean; + event: EventApi; + el: HTMLElement; + view: View; + }): void; + eventDragStart?(arg: { + event: EventApi; + el: HTMLElement; + jsEvent: MouseEvent; + view: View; + }): void; + eventDragStop?(arg: { + event: EventApi; + el: HTMLElement; + jsEvent: MouseEvent; + view: View; + }): void; + eventDrop?(arg: { + el: HTMLElement; + event: EventApi; + oldEvent: EventApi; + delta: Duration; + revert: () => void; + jsEvent: Event; + view: View; + }): void; + eventResizeStart?(arg: { + el: HTMLElement; + event: EventApi; + jsEvent: MouseEvent; + view: View; + }): void; + eventResizeStop?(arg: { + el: HTMLElement; + event: EventApi; + jsEvent: MouseEvent; + view: View; + }): void; + eventResize?(arg: { + el: HTMLElement; + startDelta: Duration; + endDelta: Duration; + prevEvent: EventApi; + event: EventApi; + revert: () => void; + jsEvent: Event; + view: View; + }): void; + drop?(arg: { + date: Date; + dateStr: string; + allDay: boolean; + draggedEl: HTMLElement; + jsEvent: MouseEvent; + view: View; + }): void; + eventReceive?(arg: { + event: EventApi; + draggedEl: HTMLElement; + view: View; + }): void; + eventLeave?(arg: { + draggedEl: HTMLElement; + event: EventApi; + view: View; + }): void; + viewSkeletonRender?(arg: { + el: HTMLElement; + view: View; + }): void; + viewSkeletonDestroy?(arg: { + el: HTMLElement; + view: View; + }): void; + _destroyed?(): void; + _init?(): void; + _noEventDrop?(): void; + _noEventResize?(): void; + resourceRender?(arg: { + resource: any; + el: HTMLElement; + view: View; + }): void; + } + export interface ViewOptionsInput extends OptionsInputBase { + type?: string; + buttonText?: string; + } + export interface OptionsInput extends OptionsInputBase { + buttonText?: ButtonTextCompoundInput; + views?: { + [viewId: string]: ViewOptionsInput; + }; + plugins?: (PluginDef | string)[]; + } +} + +declare module '@fullcalendar/core/structs/event' { + import { DateInput } from '@fullcalendar/core/datelib/env'; + import Calendar from '@fullcalendar/core/Calendar'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { UnscopedEventUiInput, EventUi } from '@fullcalendar/core/component/event-ui'; + export type EventRenderingChoice = '' | 'background' | 'inverse-background' | 'none'; + export interface EventNonDateInput extends UnscopedEventUiInput { + id?: string | number; + groupId?: string | number; + title?: string; + url?: string; + rendering?: EventRenderingChoice; + extendedProps?: object; + [extendedProp: string]: any; + } + export interface EventDateInput { + start?: DateInput; + end?: DateInput; + date?: DateInput; + allDay?: boolean; + } + export type EventInput = EventNonDateInput & EventDateInput; + export interface EventDef { + defId: string; + sourceId: string; + publicId: string; + groupId: string; + allDay: boolean; + hasEnd: boolean; + recurringDef: { + typeId: number; + typeData: any; + duration: Duration | null; + } | null; + title: string; + url: string; + rendering: EventRenderingChoice; + ui: EventUi; + extendedProps: any; + } + export interface EventInstance { + instanceId: string; + defId: string; + range: DateRange; + forcedStartTzo: number | null; + forcedEndTzo: number | null; + } + export interface EventTuple { + def: EventDef; + instance: EventInstance | null; + } + export type EventInstanceHash = { + [instanceId: string]: EventInstance; + }; + export type EventDefHash = { + [defId: string]: EventDef; + }; + export const NON_DATE_PROPS: { + id: StringConstructor; + groupId: StringConstructor; + title: StringConstructor; + url: StringConstructor; + rendering: StringConstructor; + extendedProps: any; + }; + export const DATE_PROPS: { + start: any; + date: any; + end: any; + allDay: any; + }; + export function parseEvent(raw: EventInput, sourceId: string, calendar: Calendar, allowOpenRange?: boolean): EventTuple | null; + export function parseEventDef(raw: EventNonDateInput, sourceId: string, allDay: boolean, hasEnd: boolean, calendar: Calendar): EventDef; + export type eventDefParserFunc = (def: EventDef, props: any, leftovers: any) => void; + export function createEventInstance(defId: string, range: DateRange, forcedStartTzo?: number, forcedEndTzo?: number): EventInstance; +} + +declare module '@fullcalendar/core/structs/business-hours' { + import Calendar from '@fullcalendar/core/Calendar'; + import { EventInput } from '@fullcalendar/core/structs/event'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + export type BusinessHoursInput = boolean | EventInput | EventInput[]; + export function parseBusinessHours(input: BusinessHoursInput, calendar: Calendar): EventStore; +} + +declare module '@fullcalendar/core/util/misc' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { DateEnv } from '@fullcalendar/core/datelib/env'; + import { DateRange, OpenDateRange } from '@fullcalendar/core/datelib/date-range'; + export function compensateScroll(rowEl: HTMLElement, scrollbarWidths: any): void; + export function uncompensateScroll(rowEl: HTMLElement): void; + export function disableCursor(): void; + export function enableCursor(): void; + export function distributeHeight(els: HTMLElement[], availableHeight: any, shouldRedistribute: any): void; + export function undistributeHeight(els: HTMLElement[]): void; + export function matchCellWidths(els: HTMLElement[]): number; + export function subtractInnerElHeight(outerEl: HTMLElement, innerEl: HTMLElement): number; + export function preventSelection(el: HTMLElement): void; + export function allowSelection(el: HTMLElement): void; + export function preventContextMenu(el: HTMLElement): void; + export function allowContextMenu(el: HTMLElement): void; + export function parseFieldSpecs(input: any): any[]; + export function compareByFieldSpecs(obj0: any, obj1: any, fieldSpecs: any): any; + export function compareByFieldSpec(obj0: any, obj1: any, fieldSpec: any): any; + export function flexibleCompare(a: any, b: any): number; + export function capitaliseFirstLetter(str: any): any; + export function padStart(val: any, len: any): string; + export function compareNumbers(a: any, b: any): number; + export function isInt(n: any): boolean; + export function applyAll(functions: any, thisObj: any, args: any): any; + export function firstDefined(...args: any[]): any; + export function debounce(func: any, wait: any): () => any; + export type GenericHash = { + [key: string]: any; + }; + export function refineProps(rawProps: GenericHash, processors: GenericHash, defaults?: GenericHash, leftoverProps?: GenericHash): GenericHash; + export function computeAlignedDayRange(timedRange: DateRange): DateRange; + export function computeVisibleDayRange(timedRange: OpenDateRange, nextDayThreshold?: Duration): OpenDateRange; + export function isMultiDayRange(range: DateRange): boolean; + export function diffDates(date0: DateMarker, date1: DateMarker, dateEnv: DateEnv, largeUnit?: string): Duration; +} + +declare module '@fullcalendar/core/util/html' { + export function htmlEscape(s: any): string; + export function cssToStr(cssProps: any): string; + export function attrsToStr(attrs: any): string; + export type ClassNameInput = string | string[]; + export function parseClassName(raw: ClassNameInput): string[]; +} + +declare module '@fullcalendar/core/util/array' { + export function removeMatching(array: any, testFunc: any): number; + export function removeExact(array: any, exactVal: any): number; + export function isArraysEqual(a0: any, a1: any): boolean; +} + +declare module '@fullcalendar/core/util/memoize' { + export function memoize(workerFunc: T): T; + export function memoizeOutput(workerFunc: T, equalityFunc: (output0: any, output1: any) => boolean): T; +} + +declare module '@fullcalendar/core/component/memoized-rendering' { + export interface MemoizedRendering { + (...args: ArgsType): void; + unrender: () => void; + dependents: MemoizedRendering[]; + } + export function memoizeRendering(renderFunc: (...args: ArgsType) => void, unrenderFunc?: (...args: ArgsType) => void, dependencies?: MemoizedRendering[]): MemoizedRendering; +} + +declare module '@fullcalendar/core/util/geom' { + export interface Point { + left: number; + top: number; + } + export interface Rect { + left: number; + right: number; + top: number; + bottom: number; + } + export function pointInsideRect(point: Point, rect: Rect): boolean; + export function intersectRects(rect1: Rect, rect2: Rect): Rect | false; + export function translateRect(rect: Rect, deltaX: number, deltaY: number): Rect; + export function constrainPoint(point: Point, rect: Rect): Point; + export function getRectCenter(rect: Rect): Point; + export function diffPoints(point1: Point, point2: Point): Point; +} + +declare module '@fullcalendar/core/util/object' { + export function mergeProps(propObjs: any, complexProps?: any): any; + export function filterHash(hash: any, func: any): {}; + export function mapHash(hash: { + [key: string]: InputItem; + }, func: (input: InputItem, key: string) => OutputItem): { + [key: string]: OutputItem; + }; + export function arrayToHash(a: any): { + [key: string]: true; + }; + export function hashValuesToArray(obj: any): any[]; + export function isPropsEqual(obj0: any, obj1: any): boolean; +} + +declare module '@fullcalendar/core/util/dom-manip' { + export function createElement(tagName: string, attrs: object | null, content?: ElementContent): HTMLElement; + export function htmlToElement(html: string): HTMLElement; + export function htmlToElements(html: string): HTMLElement[]; + export type ElementContent = string | Node | Node[] | NodeList; + export function appendToElement(el: HTMLElement, content: ElementContent): void; + export function prependToElement(parent: HTMLElement, content: ElementContent): void; + export function insertAfterElement(refEl: HTMLElement, content: ElementContent): void; + export function removeElement(el: HTMLElement): void; + export function elementClosest(el: HTMLElement, selector: string): HTMLElement; + export function elementMatches(el: HTMLElement, selector: string): HTMLElement; + export function findElements(container: HTMLElement[] | HTMLElement | NodeListOf, selector: string): HTMLElement[]; + export function findChildren(parent: HTMLElement[] | HTMLElement, selector?: string): HTMLElement[]; + export function forceClassName(el: HTMLElement, className: string, bool: any): void; + export function applyStyle(el: HTMLElement, props: object): void; + export function applyStyleProp(el: HTMLElement, name: string, val: any): void; +} + +declare module '@fullcalendar/core/structs/event-store' { + import { EventInput, EventDef, EventDefHash, EventInstanceHash, EventTuple } from '@fullcalendar/core/structs/event'; + import { EventSource } from '@fullcalendar/core/structs/event-source'; + import Calendar from '@fullcalendar/core/Calendar'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + export interface EventStore { + defs: EventDefHash; + instances: EventInstanceHash; + } + export function parseEvents(rawEvents: EventInput[], sourceId: string, calendar: Calendar, allowOpenRange?: boolean): EventStore; + export function eventTupleToStore(tuple: EventTuple, eventStore?: EventStore): EventStore; + export function expandRecurring(eventStore: EventStore, framingRange: DateRange, calendar: Calendar): EventStore; + export function getRelevantEvents(eventStore: EventStore, instanceId: string): EventStore; + export function transformRawEvents(rawEvents: any, eventSource: EventSource, calendar: Calendar): any; + export function createEmptyEventStore(): EventStore; + export function mergeEventStores(store0: EventStore, store1: EventStore): EventStore; + export function filterEventStoreDefs(eventStore: EventStore, filterFunc: (eventDef: EventDef) => boolean): EventStore; +} + +declare module '@fullcalendar/core/component/event-ui' { + import { Constraint, AllowFunc, ConstraintInput } from '@fullcalendar/core/validation'; + import { parseClassName } from '@fullcalendar/core/util/html'; + import Calendar from '@fullcalendar/core/Calendar'; + export interface UnscopedEventUiInput { + editable?: boolean; + startEditable?: boolean; + durationEditable?: boolean; + constraint?: ConstraintInput; + overlap?: boolean; + allow?: AllowFunc; + className?: string[] | string; + classNames?: string[] | string; + backgroundColor?: string; + borderColor?: string; + textColor?: string; + color?: string; + } + export interface EventUi { + startEditable: boolean | null; + durationEditable: boolean | null; + constraints: Constraint[]; + overlap: boolean | null; + allows: AllowFunc[]; + backgroundColor: string; + borderColor: string; + textColor: string; + classNames: string[]; + } + export type EventUiHash = { + [defId: string]: EventUi; + }; + export const UNSCOPED_EVENT_UI_PROPS: { + editable: BooleanConstructor; + startEditable: BooleanConstructor; + durationEditable: BooleanConstructor; + constraint: any; + overlap: any; + allow: any; + className: typeof parseClassName; + classNames: typeof parseClassName; + color: StringConstructor; + backgroundColor: StringConstructor; + borderColor: StringConstructor; + textColor: StringConstructor; + }; + export function processUnscopedUiProps(rawProps: UnscopedEventUiInput, calendar: Calendar, leftovers?: any): EventUi; + export function processScopedUiProps(prefix: string, rawScoped: any, calendar: Calendar, leftovers?: any): EventUi; + export function combineEventUis(uis: EventUi[]): EventUi; +} + +declare module '@fullcalendar/core/component/event-splitting' { + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventDef } from '@fullcalendar/core/structs/event'; + import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + import { EventUiHash, EventUi } from '@fullcalendar/core/component/event-ui'; + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + export interface SplittableProps { + businessHours: EventStore | null; + dateSelection: DateSpan | null; + eventStore: EventStore; + eventUiBases: EventUiHash; + eventSelection: string; + eventDrag: EventInteractionState | null; + eventResize: EventInteractionState | null; + } + export { Splitter as default, Splitter }; + abstract class Splitter { + abstract getKeyInfo(props: PropsType): { + [key: string]: { + ui?: EventUi; + businessHours?: EventStore; + }; + }; + abstract getKeysForDateSpan(dateSpan: DateSpan): string[]; + abstract getKeysForEventDef(eventDef: EventDef): string[]; + splitProps(props: PropsType): { + [key: string]: SplittableProps; + }; + } +} + +declare module '@fullcalendar/core/component/date-rendering' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { ComponentContext } from '@fullcalendar/core/component/Component'; + import { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + import { DateEnv } from '@fullcalendar/core/datelib/env'; + export function buildGotoAnchorHtml(allOptions: any, dateEnv: DateEnv, gotoOptions: any, attrs: any, innerHtml?: any): string; + export function getAllDayHtml(allOptions: any): any; + export function getDayClasses(date: DateMarker, dateProfile: DateProfile, context: ComponentContext, noThemeHighlight?: any): any[]; +} + +declare module '@fullcalendar/core/util/dom-event' { + export function preventDefault(ev: any): void; + export function listenBySelector(container: HTMLElement, eventType: string, selector: string, handler: (ev: Event, matchedTarget: HTMLElement) => void): () => void; + export function listenToHoverBySelector(container: HTMLElement, selector: string, onMouseEnter: (ev: Event, matchedTarget: HTMLElement) => void, onMouseLeave: (ev: Event, matchedTarget: HTMLElement) => void): () => void; + export function whenTransitionDone(el: HTMLElement, callback: (ev: Event) => void): void; +} + +declare module '@fullcalendar/core/util/dom-geom' { + import { Rect } from '@fullcalendar/core/util/geom'; + export interface EdgeInfo { + borderLeft: number; + borderRight: number; + borderTop: number; + borderBottom: number; + scrollbarLeft: number; + scrollbarRight: number; + scrollbarBottom: number; + paddingLeft?: number; + paddingRight?: number; + paddingTop?: number; + paddingBottom?: number; + } + export function computeEdges(el: any, getPadding?: boolean): EdgeInfo; + export function computeInnerRect(el: any, goWithinPadding?: boolean): { + left: number; + right: number; + top: number; + bottom: number; + }; + export function computeRect(el: any): Rect; + export function computeHeightAndMargins(el: HTMLElement): number; + export function computeVMargins(el: HTMLElement): number; + export function getClippingParents(el: HTMLElement): HTMLElement[]; + export function computeClippingRect(el: HTMLElement): Rect; +} + +declare module '@fullcalendar/core/util/promise' { + export function unpromisify(func: any, success: any, failure?: any): void; +} + +declare module '@fullcalendar/core/common/EmitterMixin' { + import Mixin from '@fullcalendar/core/common/Mixin'; + export interface EmitterInterface { + on(types: any, handler: any): any; + one(types: any, handler: any): any; + off(types: any, handler: any): any; + trigger(type: any, ...args: any[]): any; + triggerWith(type: any, context: any, args: any): any; + hasHandlers(type: any): any; + } + export { EmitterMixin as default, EmitterMixin }; + class EmitterMixin extends Mixin implements EmitterInterface { + _handlers: any; + _oneHandlers: any; + on(type: any, handler: any): this; + one(type: any, handler: any): this; + off(type: any, handler?: any): this; + trigger(type: any, ...args: any[]): this; + triggerWith(type: any, context: any, args: any): this; + hasHandlers(type: any): any; + } +} + +declare module '@fullcalendar/core/datelib/date-range' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { DateEnv, DateInput } from '@fullcalendar/core/datelib/env'; + export interface DateRangeInput { + start?: DateInput; + end?: DateInput; + } + export interface OpenDateRange { + start: DateMarker | null; + end: DateMarker | null; + } + export interface DateRange { + start: DateMarker; + end: DateMarker; + } + export function parseRange(input: DateRangeInput, dateEnv: DateEnv): OpenDateRange; + export function invertRanges(ranges: DateRange[], constraintRange: DateRange): DateRange[]; + export function intersectRanges(range0: OpenDateRange, range1: OpenDateRange): OpenDateRange; + export function rangesEqual(range0: OpenDateRange, range1: OpenDateRange): boolean; + export function rangesIntersect(range0: OpenDateRange, range1: OpenDateRange): boolean; + export function rangeContainsRange(outerRange: OpenDateRange, innerRange: OpenDateRange): boolean; + export function rangeContainsMarker(range: OpenDateRange, date: DateMarker | number): boolean; + export function constrainMarkerToRange(date: DateMarker, range: DateRange): DateMarker; +} + +declare module '@fullcalendar/core/common/Mixin' { + export { Mixin as default, Mixin }; + class Mixin { + static mixInto(destClass: any): void; + static mixIntoObj(destObj: any): void; + static mixOver(destClass: any): void; + } +} + +declare module '@fullcalendar/core/common/PositionCache' { + export { PositionCache as default, PositionCache }; + class PositionCache { + originClientRect: ClientRect; + els: HTMLElement[]; + originEl: HTMLElement; + isHorizontal: boolean; + isVertical: boolean; + lefts: any; + rights: any; + tops: any; + bottoms: any; + constructor(originEl: HTMLElement, els: HTMLElement[], isHorizontal: boolean, isVertical: boolean); + build(): void; + buildElHorizontals(originClientLeft: number): void; + buildElVerticals(originClientTop: number): void; + leftToIndex(leftPosition: number): any; + topToIndex(topPosition: number): any; + getWidth(leftIndex: number): number; + getHeight(topIndex: number): number; + } +} + +declare module '@fullcalendar/core/common/ScrollComponent' { + import { ElementScrollController } from '@fullcalendar/core/common/scroll-controller'; + export interface ScrollbarWidths { + left: number; + right: number; + bottom: number; + } + export { ScrollComponent as default, ScrollComponent }; + class ScrollComponent extends ElementScrollController { + overflowX: string; + overflowY: string; + constructor(overflowX: string, overflowY: string); + clear(): void; + destroy(): void; + applyOverflow(): void; + lockOverflow(scrollbarWidths: ScrollbarWidths): void; + setHeight(height: number | string): void; + getScrollbarWidths(): ScrollbarWidths; + } +} + +declare module '@fullcalendar/core/common/scroll-controller' { + export abstract class ScrollController { + abstract getScrollTop(): number; + abstract getScrollLeft(): number; + abstract setScrollTop(top: number): void; + abstract setScrollLeft(left: number): void; + abstract getClientWidth(): number; + abstract getClientHeight(): number; + abstract getScrollWidth(): number; + abstract getScrollHeight(): number; + getMaxScrollTop(): number; + getMaxScrollLeft(): number; + canScrollVertically(): boolean; + canScrollHorizontally(): boolean; + canScrollUp(): boolean; + canScrollDown(): boolean; + canScrollLeft(): boolean; + canScrollRight(): boolean; + } + export class ElementScrollController extends ScrollController { + el: HTMLElement; + constructor(el: HTMLElement); + getScrollTop(): number; + getScrollLeft(): number; + setScrollTop(top: number): void; + setScrollLeft(left: number): void; + getScrollWidth(): number; + getScrollHeight(): number; + getClientHeight(): number; + getClientWidth(): number; + } + export class WindowScrollController extends ScrollController { + getScrollTop(): number; + getScrollLeft(): number; + setScrollTop(n: number): void; + setScrollLeft(n: number): void; + getScrollWidth(): number; + getScrollHeight(): number; + getClientHeight(): number; + getClientWidth(): number; + } +} + +declare module '@fullcalendar/core/theme/Theme' { + export { Theme as default, Theme }; + class Theme { + calendarOptions: any; + classes: any; + iconClasses: any; + baseIconClass: string; + iconOverrideOption: any; + iconOverrideCustomButtonOption: any; + iconOverridePrefix: string; + constructor(calendarOptions: any); + processIconOverride(): void; + setIconOverride(iconOverrideHash: any): void; + applyIconOverridePrefix(className: any): any; + getClass(key: any): any; + getIconClass(buttonName: any): string; + getCustomButtonIconClass(customButtonProps: any): string; + } + export type ThemeClass = { + new (calendarOptions: any): Theme; + }; +} + +declare module '@fullcalendar/core/component/Component' { + import Calendar from '@fullcalendar/core/Calendar'; + import View from '@fullcalendar/core/View'; + import Theme from '@fullcalendar/core/theme/Theme'; + import { DateEnv } from '@fullcalendar/core/datelib/env'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + export class ComponentContext { + calendar: Calendar; + theme: Theme; + dateEnv: DateEnv; + options: any; + view?: View; + isRtl: boolean; + eventOrderSpecs: any; + nextDayThreshold: Duration; + constructor(calendar: Calendar, theme: Theme, dateEnv: DateEnv, options: any, view?: View); + extend(options?: any, view?: View): ComponentContext; + } + export type EqualityFuncHash = { + [propName: string]: (obj0: any, obj1: any) => boolean; + }; + export { Component as default, Component }; + class Component { + equalityFuncs: EqualityFuncHash; + uid: string; + props: PropsType | null; + context: ComponentContext; + constructor(); + static addEqualityFuncs(newFuncs: EqualityFuncHash): void; + receiveProps(props: PropsType, context: ComponentContext): void; + protected render(props: PropsType, context: ComponentContext): void; + firstContext(context: ComponentContext): void; + beforeUpdate(): void; + afterUpdate(): void; + destroy(): void; + } +} + +declare module '@fullcalendar/core/component/DateComponent' { + import Component from '@fullcalendar/core/component/Component'; + import { EventRenderRange } from '@fullcalendar/core/component/event-rendering'; + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + import { EventInstanceHash } from '@fullcalendar/core/structs/event'; + import { Hit } from '@fullcalendar/core/interactions/hit'; + import FgEventRenderer from '@fullcalendar/core/component/renderers/FgEventRenderer'; + import FillRenderer from '@fullcalendar/core/component/renderers/FillRenderer'; + import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + export type DateComponentHash = { + [uid: string]: DateComponent; + }; + export interface Seg { + component?: DateComponent; + isStart: boolean; + isEnd: boolean; + eventRange?: EventRenderRange; + el?: HTMLElement; + [otherProp: string]: any; + } + export interface EventSegUiInteractionState { + affectedInstances: EventInstanceHash; + segs: Seg[]; + isEvent: boolean; + sourceSeg: any; + } + export { DateComponent as default, DateComponent }; + class DateComponent extends Component { + fgSegSelector: string; + bgSegSelector: string; + largeUnit: any; + eventRenderer: FgEventRenderer; + mirrorRenderer: FgEventRenderer; + fillRenderer: FillRenderer; + el: HTMLElement; + constructor(el: HTMLElement); + destroy(): void; + buildPositionCaches(): void; + queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null; + isInteractionValid(interaction: EventInteractionState): boolean; + isDateSelectionValid(selection: DateSpan): boolean; + isValidSegDownEl(el: HTMLElement): boolean; + isValidDateDownEl(el: HTMLElement): boolean; + isPopover(): boolean; + isInPopover(el: HTMLElement): boolean; + } +} + +declare module '@fullcalendar/core/Calendar' { + import { EmitterInterface } from '@fullcalendar/core/common/EmitterMixin'; + import OptionsManager from '@fullcalendar/core/OptionsManager'; + import View from '@fullcalendar/core/View'; + import Theme from '@fullcalendar/core/theme/Theme'; + import { OptionsInput, EventHandlerName, EventHandlerArgs } from '@fullcalendar/core/types/input-types'; + import { RawLocaleMap } from '@fullcalendar/core/datelib/locale'; + import { DateEnv, DateInput } from '@fullcalendar/core/datelib/env'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { Duration, DurationInput } from '@fullcalendar/core/datelib/duration'; + import { DateSpan, DateSpanApi, DatePointApi } from '@fullcalendar/core/structs/date-span'; + import { DateRangeInput } from '@fullcalendar/core/datelib/date-range'; + import DateProfileGenerator from '@fullcalendar/core/DateProfileGenerator'; + import { EventSourceInput } from '@fullcalendar/core/structs/event-source'; + import { EventInput } from '@fullcalendar/core/structs/event'; + import { CalendarState, Action } from '@fullcalendar/core/reducers/types'; + import EventSourceApi from '@fullcalendar/core/api/EventSourceApi'; + import EventApi from '@fullcalendar/core/api/EventApi'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventUiHash, EventUi } from '@fullcalendar/core/component/event-ui'; + import { ViewSpecHash, ViewSpec } from '@fullcalendar/core/structs/view-spec'; + import { PluginSystem } from '@fullcalendar/core/plugin-system'; + import CalendarComponent from '@fullcalendar/core/CalendarComponent'; + import DateComponent from '@fullcalendar/core/component/DateComponent'; + import { PointerDragEvent } from '@fullcalendar/core/interactions/pointer'; + import { InteractionSettingsInput, Interaction } from '@fullcalendar/core/interactions/interaction'; + export interface DateClickApi extends DatePointApi { + dayEl: HTMLElement; + jsEvent: UIEvent; + view: View; + } + export interface DateSelectionApi extends DateSpanApi { + jsEvent: UIEvent; + view: View; + } + export type DatePointTransform = (dateSpan: DateSpan, calendar: Calendar) => any; + export type DateSpanTransform = (dateSpan: DateSpan, calendar: Calendar) => any; + export type CalendarInteraction = { + destroy(): any; + }; + export type CalendarInteractionClass = { + new (calendar: Calendar): CalendarInteraction; + }; + export type OptionChangeHandler = (propValue: any, calendar: Calendar, deepEqual: any) => void; + export type OptionChangeHandlerMap = { + [propName: string]: OptionChangeHandler; + }; + export { Calendar as default, Calendar }; + class Calendar { + static on: EmitterInterface['on']; + static off: EmitterInterface['off']; + static trigger: EmitterInterface['trigger']; + on: EmitterInterface['on']; + one: EmitterInterface['one']; + off: EmitterInterface['off']; + trigger: EmitterInterface['trigger']; + triggerWith: EmitterInterface['triggerWith']; + hasHandlers: EmitterInterface['hasHandlers']; + eventUiBases: EventUiHash; + selectionConfig: EventUi; + optionsManager: OptionsManager; + viewSpecs: ViewSpecHash; + dateProfileGenerators: { + [viewName: string]: DateProfileGenerator; + }; + theme: Theme; + dateEnv: DateEnv; + availableRawLocales: RawLocaleMap; + pluginSystem: PluginSystem; + defaultAllDayEventDuration: Duration; + defaultTimedEventDuration: Duration; + calendarInteractions: CalendarInteraction[]; + interactionsStore: { + [componentUid: string]: Interaction[]; + }; + removeNavLinkListener: any; + windowResizeProxy: any; + isHandlingWindowResize: boolean; + state: CalendarState; + actionQueue: any[]; + isReducing: boolean; + needsRerender: boolean; + isRendering: boolean; + renderingPauseDepth: number; + renderableEventStore: EventStore; + buildDelayedRerender: typeof buildDelayedRerender; + delayedRerender: any; + afterSizingTriggers: any; + isViewUpdated: boolean; + isDatesUpdated: boolean; + isEventsUpdated: boolean; + el: HTMLElement; + component: CalendarComponent; + constructor(el: HTMLElement, overrides?: OptionsInput); + addPluginInputs(pluginInputs: any): void; + readonly view: View; + render(): void; + destroy(): void; + bindHandlers(): void; + unbindHandlers(): void; + hydrate(): void; + buildInitialState(): CalendarState; + reduce(state: CalendarState, action: Action, calendar: Calendar): CalendarState; + requestRerender(): void; + tryRerender(): void; + batchRendering(func: any): void; + executeRender(): void; + renderComponent(): void; + setOption(name: string, val: any): void; + getOption(name: string): any; + opt(name: string): any; + viewOpt(name: string): any; + viewOpts(): any; + mutateOptions(updates: any, removals: string[], isDynamic?: boolean, deepEqual?: any): void; + handleOptions(options: any): void; + getAvailableLocaleCodes(): string[]; + _buildSelectionConfig(rawOpts: any): EventUi; + _buildEventUiSingleBase(rawOpts: any): EventUi; + hasPublicHandlers(name: T): boolean; + publiclyTrigger(name: T, args?: EventHandlerArgs): any; + publiclyTriggerAfterSizing(name: T, args: EventHandlerArgs): void; + releaseAfterSizingTriggers(): void; + isValidViewType(viewType: string): boolean; + changeView(viewType: string, dateOrRange?: DateRangeInput | DateInput): void; + zoomTo(dateMarker: DateMarker, viewType?: string): void; + getUnitViewSpec(unit: string): ViewSpec | null; + getInitialDate(): Date; + prev(): void; + next(): void; + prevYear(): void; + nextYear(): void; + today(): void; + gotoDate(zonedDateInput: any): void; + incrementDate(deltaInput: any): void; + getDate(): Date; + formatDate(d: DateInput, formatter: any): string; + formatRange(d0: DateInput, d1: DateInput, settings: any): any; + formatIso(d: DateInput, omitTime?: boolean): string; + windowResize(ev: Event): void; + updateSize(): void; + registerInteractiveComponent(component: DateComponent, settingsInput: InteractionSettingsInput): void; + unregisterInteractiveComponent(component: DateComponent): void; + select(dateOrObj: DateInput | any, endDate?: DateInput): void; + unselect(pev?: PointerDragEvent): void; + triggerDateSelect(selection: DateSpan, pev?: PointerDragEvent): void; + triggerDateUnselect(pev?: PointerDragEvent): void; + triggerDateClick(dateSpan: DateSpan, dayEl: HTMLElement, view: View, ev: UIEvent): void; + buildDatePointApi(dateSpan: DateSpan): import("@fullcalendar/core/structs/date-span").DatePointApi; + buildDateSpanApi(dateSpan: DateSpan): import("@fullcalendar/core/structs/date-span").DateSpanApi; + getNow(): DateMarker; + getDefaultEventEnd(allDay: boolean, marker: DateMarker): DateMarker; + addEvent(eventInput: EventInput, sourceInput?: EventSourceApi | string | number): EventApi | null; + getEventById(id: string): EventApi | null; + getEvents(): EventApi[]; + removeAllEvents(): void; + rerenderEvents(): void; + getEventSources(): EventSourceApi[]; + getEventSourceById(id: string | number): EventSourceApi | null; + addEventSource(sourceInput: EventSourceInput): EventSourceApi; + removeAllEventSources(): void; + refetchEvents(): void; + scrollToTime(timeInput: DurationInput): void; + } + function buildDelayedRerender(this: Calendar, wait: any): any; + export {}; +} + +declare module '@fullcalendar/core/View' { + import DateProfileGenerator, { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { EmitterInterface } from '@fullcalendar/core/common/EmitterMixin'; + import { ViewSpec } from '@fullcalendar/core/structs/view-spec'; + import DateComponent from '@fullcalendar/core/component/DateComponent'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventUiHash } from '@fullcalendar/core/component/event-ui'; + import { EventRenderRange } from '@fullcalendar/core/component/event-rendering'; + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + import { ComponentContext } from '@fullcalendar/core/component/Component'; + export interface ViewProps { + dateProfileGenerator: DateProfileGenerator; + dateProfile: DateProfile; + businessHours: EventStore; + eventStore: EventStore; + eventUiBases: EventUiHash; + dateSelection: DateSpan | null; + eventSelection: string; + eventDrag: EventInteractionState | null; + eventResize: EventInteractionState | null; + } + export { View as default, View }; + abstract class View extends DateComponent { + usesMinMaxTime: boolean; + dateProfileGeneratorClass: any; + on: EmitterInterface['on']; + one: EmitterInterface['one']; + off: EmitterInterface['off']; + trigger: EmitterInterface['trigger']; + triggerWith: EmitterInterface['triggerWith']; + hasHandlers: EmitterInterface['hasHandlers']; + viewSpec: ViewSpec; + type: string; + title: string; + queuedScroll: any; + isNowIndicatorRendered: boolean; + initialNowDate: DateMarker; + initialNowQueriedMs: number; + nowIndicatorTimeoutID: any; + nowIndicatorIntervalID: any; + constructor(viewSpec: ViewSpec, parentEl: HTMLElement); + initialize(): void; + readonly activeStart: Date; + readonly activeEnd: Date; + readonly currentStart: Date; + readonly currentEnd: Date; + render(props: ViewProps, context: ComponentContext): void; + beforeUpdate(): void; + destroy(): void; + updateSize(isResize: boolean, viewHeight: number, isAuto: boolean): void; + updateBaseSize(isResize: boolean, viewHeight: number, isAuto: boolean): void; + renderDatesWrap(dateProfile: DateProfile): void; + unrenderDatesWrap(): void; + renderDates(dateProfile: DateProfile): void; + unrenderDates(): void; + renderBusinessHours(businessHours: EventStore): void; + unrenderBusinessHours(): void; + renderDateSelectionWrap(selection: DateSpan): void; + unrenderDateSelectionWrap(selection: DateSpan): void; + renderDateSelection(selection: DateSpan): void; + unrenderDateSelection(selection: DateSpan): void; + renderEvents(eventStore: EventStore): void; + unrenderEvents(): void; + sliceEvents(eventStore: EventStore, allDay: boolean): EventRenderRange[]; + renderEventSelectionWrap(instanceId: string): void; + unrenderEventSelectionWrap(instanceId: string): void; + renderEventSelection(instanceId: string): void; + unrenderEventSelection(instanceId: string): void; + renderEventDragWrap(state: EventInteractionState): void; + unrenderEventDragWrap(state: EventInteractionState): void; + renderEventDrag(state: EventInteractionState): void; + unrenderEventDrag(state: EventInteractionState): void; + renderEventResizeWrap(state: EventInteractionState): void; + unrenderEventResizeWrap(state: EventInteractionState): void; + renderEventResize(state: EventInteractionState): void; + unrenderEventResize(state: EventInteractionState): void; + startNowIndicator(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): void; + updateNowIndicator(): void; + stopNowIndicator(): void; + getNowIndicatorUnit(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): void; + renderNowIndicator(date: any): void; + unrenderNowIndicator(): void; + addScroll(scroll: any, isForced?: boolean): void; + popScroll(isResize: boolean): void; + applyQueuedScroll(isResize: boolean): void; + queryScroll(): any; + applyScroll(scroll: any, isResize: boolean): void; + computeDateScroll(duration: Duration): {}; + queryDateScroll(): {}; + applyDateScroll(scroll: any): void; + scrollToDuration(duration: Duration): void; + } +} + +declare module '@fullcalendar/core/component/renderers/FgEventRenderer' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { DateFormatter } from '@fullcalendar/core/datelib/formatting'; + import { EventUi } from '@fullcalendar/core/component/event-ui'; + import { EventRenderRange } from '@fullcalendar/core/component/event-rendering'; + import { Seg } from '@fullcalendar/core/component/DateComponent'; + import { ComponentContext } from '@fullcalendar/core/component/Component'; + export { FgEventRenderer as default, FgEventRenderer }; + abstract class FgEventRenderer { + context: ComponentContext; + eventTimeFormat: DateFormatter; + displayEventTime: boolean; + displayEventEnd: boolean; + segs: Seg[]; + isSizeDirty: boolean; + renderSegs(context: ComponentContext, segs: Seg[], mirrorInfo?: any): void; + unrender(context: ComponentContext, _segs: Seg[], mirrorInfo?: any): void; + abstract renderSegHtml(seg: Seg, mirrorInfo: any): string; + abstract attachSegs(segs: Seg[], mirrorInfo: any): any; + abstract detachSegs(segs: Seg[]): any; + rangeUpdated(): void; + renderSegEls(segs: Seg[], mirrorInfo: any): Seg[]; + getSegClasses(seg: Seg, isDraggable: any, isResizable: any, mirrorInfo: any): string[]; + getTimeText(eventRange: EventRenderRange, formatter?: any, displayEnd?: any): any; + _getTimeText(start: DateMarker, end: DateMarker, allDay: any, formatter?: any, displayEnd?: any, forcedStartTzo?: number, forcedEndTzo?: number): any; + computeEventTimeFormat(): any; + computeDisplayEventTime(): boolean; + computeDisplayEventEnd(): boolean; + getSkinCss(ui: EventUi): { + 'background-color': string; + 'border-color': string; + color: string; + }; + sortEventSegs(segs: any): Seg[]; + computeSizes(force: boolean): void; + assignSizes(force: boolean): void; + computeSegSizes(segs: Seg[]): void; + assignSegSizes(segs: Seg[]): void; + hideByHash(hash: any): void; + showByHash(hash: any): void; + selectByInstanceId(instanceId: string): void; + unselectByInstanceId(instanceId: string): void; + } + export function buildSegCompareObj(seg: Seg): any; +} + +declare module '@fullcalendar/core/component/renderers/FillRenderer' { + import { Seg } from '@fullcalendar/core/component/DateComponent'; + import { ComponentContext } from '@fullcalendar/core/component/Component'; + export { FillRenderer as default, FillRenderer }; + abstract class FillRenderer { + context: ComponentContext; + fillSegTag: string; + containerElsByType: any; + segsByType: any; + dirtySizeFlags: any; + constructor(); + getSegsByType(type: string): any; + renderSegs(type: string, context: ComponentContext, segs: Seg[]): void; + unrender(type: string, context: ComponentContext): void; + renderSegEls(type: any, segs: Seg[]): Seg[]; + renderSegHtml(type: any, seg: Seg): string; + abstract attachSegs(type: any, segs: Seg[]): HTMLElement[] | void; + detachSegs(type: any, segs: Seg[]): void; + computeSizes(force: boolean): void; + assignSizes(force: boolean): void; + computeSegSizes(segs: Seg[]): void; + assignSegSizes(segs: Seg[]): void; + } +} + +declare module '@fullcalendar/core/DateProfileGenerator' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { DateRange, OpenDateRange } from '@fullcalendar/core/datelib/date-range'; + import { ViewSpec } from '@fullcalendar/core/structs/view-spec'; + import { DateEnv } from '@fullcalendar/core/datelib/env'; + import Calendar from '@fullcalendar/core/Calendar'; + export interface DateProfile { + currentRange: DateRange; + currentRangeUnit: string; + isRangeAllDay: boolean; + validRange: OpenDateRange; + activeRange: DateRange; + renderRange: DateRange; + minTime: Duration; + maxTime: Duration; + isValid: boolean; + dateIncrement: Duration; + } + export { DateProfileGenerator as default, DateProfileGenerator }; + class DateProfileGenerator { + viewSpec: ViewSpec; + options: any; + dateEnv: DateEnv; + calendar: Calendar; + isHiddenDayHash: boolean[]; + constructor(viewSpec: ViewSpec, calendar: Calendar); + buildPrev(currentDateProfile: DateProfile, currentDate: DateMarker): DateProfile; + buildNext(currentDateProfile: DateProfile, currentDate: DateMarker): DateProfile; + build(currentDate: DateMarker, direction?: any, forceToValid?: boolean): DateProfile; + buildValidRange(): OpenDateRange; + buildCurrentRangeInfo(date: DateMarker, direction: any): { + duration: any; + unit: any; + range: any; + }; + getFallbackDuration(): Duration; + adjustActiveRange(range: DateRange, minTime: Duration, maxTime: Duration): { + start: Date; + end: Date; + }; + buildRangeFromDuration(date: DateMarker, direction: any, duration: Duration, unit: any): any; + buildRangeFromDayCount(date: DateMarker, direction: any, dayCount: any): { + start: Date; + end: Date; + }; + buildCustomVisibleRange(date: DateMarker): OpenDateRange; + buildRenderRange(currentRange: DateRange, currentRangeUnit: any, isRangeAllDay: any): DateRange; + buildDateIncrement(fallback: any): Duration; + getRangeOption(name: any, ...otherArgs: any[]): OpenDateRange; + initHiddenDays(): void; + trimHiddenDays(range: DateRange): DateRange | null; + isHiddenDay(day: any): boolean; + skipHiddenDays(date: DateMarker, inc?: number, isExclusive?: boolean): Date; + } + export function isDateProfilesEqual(p0: DateProfile, p1: DateProfile): boolean; +} + +declare module '@fullcalendar/core/structs/view-def' { + import { ViewClass, ViewConfigHash } from '@fullcalendar/core/structs/view-config'; + export interface ViewDef { + type: string; + class: ViewClass; + overrides: any; + defaults: any; + } + export type ViewDefHash = { + [viewType: string]: ViewDef; + }; + export function compileViewDefs(defaultConfigs: ViewConfigHash, overrideConfigs: ViewConfigHash): ViewDefHash; +} + +declare module '@fullcalendar/core/structs/view-spec' { + import { Duration } from '@fullcalendar/core/datelib/duration'; + import OptionsManager from '@fullcalendar/core/OptionsManager'; + import { ViewConfigInputHash, ViewClass } from '@fullcalendar/core/structs/view-config'; + export interface ViewSpec { + type: string; + class: ViewClass; + duration: Duration; + durationUnit: string; + singleUnit: string; + options: any; + buttonTextOverride: string; + buttonTextDefault: string; + } + export type ViewSpecHash = { + [viewType: string]: ViewSpec; + }; + export function buildViewSpecs(defaultInputs: ViewConfigInputHash, optionsManager: OptionsManager): ViewSpecHash; +} + +declare module '@fullcalendar/core/structs/date-span' { + import { DateRange, OpenDateRange } from '@fullcalendar/core/datelib/date-range'; + import { DateInput, DateEnv } from '@fullcalendar/core/datelib/env'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { EventRenderRange } from '@fullcalendar/core/component/event-rendering'; + import { EventUiHash } from '@fullcalendar/core/component/event-ui'; + import Calendar from '@fullcalendar/core/Calendar'; + export interface OpenDateSpanInput { + start?: DateInput; + end?: DateInput; + allDay?: boolean; + [otherProp: string]: any; + } + export interface DateSpanInput extends OpenDateSpanInput { + start: DateInput; + end: DateInput; + } + export interface OpenDateSpan { + range: OpenDateRange; + allDay: boolean; + [otherProp: string]: any; + } + export interface DateSpan extends OpenDateSpan { + range: DateRange; + } + export interface DateSpanApi { + start: Date; + end: Date; + startStr: string; + endStr: string; + allDay: boolean; + } + export interface DatePointApi { + date: Date; + dateStr: string; + allDay: boolean; + } + export function parseDateSpan(raw: DateSpanInput, dateEnv: DateEnv, defaultDuration?: Duration): DateSpan | null; + export function parseOpenDateSpan(raw: OpenDateSpanInput, dateEnv: DateEnv): OpenDateSpan | null; + export function isDateSpansEqual(span0: DateSpan, span1: DateSpan): boolean; + export function buildDateSpanApi(span: DateSpan, dateEnv: DateEnv): DateSpanApi; + export function buildDatePointApi(span: DateSpan, dateEnv: DateEnv): DatePointApi; + export function fabricateEventRange(dateSpan: DateSpan, eventUiBases: EventUiHash, calendar: Calendar): EventRenderRange; +} + +declare module '@fullcalendar/core/datelib/marker' { + import { Duration } from '@fullcalendar/core/datelib/duration'; + export type DateMarker = Date; + export const DAY_IDS: string[]; + export function addWeeks(m: DateMarker, n: number): Date; + export function addDays(m: DateMarker, n: number): Date; + export function addMs(m: DateMarker, n: number): Date; + export function diffWeeks(m0: any, m1: any): number; + export function diffDays(m0: any, m1: any): number; + export function diffHours(m0: any, m1: any): number; + export function diffMinutes(m0: any, m1: any): number; + export function diffSeconds(m0: any, m1: any): number; + export function diffDayAndTime(m0: DateMarker, m1: DateMarker): Duration; + export function diffWholeWeeks(m0: DateMarker, m1: DateMarker): number; + export function diffWholeDays(m0: DateMarker, m1: DateMarker): number; + export function startOfDay(m: DateMarker): DateMarker; + export function startOfHour(m: DateMarker): Date; + export function startOfMinute(m: DateMarker): Date; + export function startOfSecond(m: DateMarker): Date; + export function weekOfYear(marker: any, dow: any, doy: any): number; + export function dateToLocalArray(date: any): any[]; + export function arrayToLocalDate(a: any): Date; + export function dateToUtcArray(date: any): any[]; + export function arrayToUtcDate(a: any): Date; + export function isValidDate(m: DateMarker): boolean; + export function timeAsMs(m: DateMarker): number; +} + +declare module '@fullcalendar/core/datelib/duration' { + export type DurationInput = DurationObjectInput | string | number; + export interface DurationObjectInput { + years?: number; + year?: number; + months?: number; + month?: number; + weeks?: number; + week?: number; + days?: number; + day?: number; + hours?: number; + hour?: number; + minutes?: number; + minute?: number; + seconds?: number; + second?: number; + milliseconds?: number; + millisecond?: number; + ms?: number; + } + export interface Duration { + years: number; + months: number; + days: number; + milliseconds: number; + } + export function createDuration(input: DurationInput, unit?: string): Duration | null; + export function getWeeksFromInput(obj: DurationObjectInput): number; + export function durationsEqual(d0: Duration, d1: Duration): boolean; + export function isSingleDay(dur: Duration): boolean; + export function addDurations(d0: Duration, d1: Duration): { + years: number; + months: number; + days: number; + milliseconds: number; + }; + export function subtractDurations(d1: Duration, d0: Duration): Duration; + export function multiplyDuration(d: Duration, n: number): { + years: number; + months: number; + days: number; + milliseconds: number; + }; + export function asRoughYears(dur: Duration): number; + export function asRoughMonths(dur: Duration): number; + export function asRoughDays(dur: Duration): number; + export function asRoughHours(dur: Duration): number; + export function asRoughMinutes(dur: Duration): number; + export function asRoughSeconds(dur: Duration): number; + export function asRoughMs(dur: Duration): number; + export function wholeDivideDurations(numerator: Duration, denominator: Duration): number; + export function greatestDurationDenominator(dur: Duration, dontReturnWeeks?: boolean): { + unit: string; + value: number; + }; +} + +declare module '@fullcalendar/core/datelib/env' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { CalendarSystem } from '@fullcalendar/core/datelib/calendar-system'; + import { Locale } from '@fullcalendar/core/datelib/locale'; + import { NamedTimeZoneImpl, NamedTimeZoneImplClass } from '@fullcalendar/core/datelib/timezone'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { DateFormatter } from '@fullcalendar/core/datelib/formatting'; + import { CmdFormatterFunc } from '@fullcalendar/core/datelib/formatting-cmd'; + export interface DateEnvSettings { + timeZone: string; + namedTimeZoneImpl?: NamedTimeZoneImplClass; + calendarSystem: string; + locale: Locale; + weekNumberCalculation?: any; + firstDay?: any; + weekLabel?: string; + cmdFormatter?: CmdFormatterFunc; + } + export type DateInput = Date | string | number | number[]; + export interface DateMarkerMeta { + marker: DateMarker; + isTimeUnspecified: boolean; + forcedTzo: number | null; + } + export class DateEnv { + timeZone: string; + namedTimeZoneImpl: NamedTimeZoneImpl; + canComputeOffset: boolean; + calendarSystem: CalendarSystem; + locale: Locale; + weekDow: number; + weekDoy: number; + weekNumberFunc: any; + weekLabel: string; + cmdFormatter?: CmdFormatterFunc; + constructor(settings: DateEnvSettings); + createMarker(input: DateInput): DateMarker; + createNowMarker(): DateMarker; + createMarkerMeta(input: DateInput): DateMarkerMeta; + parse(s: string): { + marker: Date; + isTimeUnspecified: boolean; + forcedTzo: any; + }; + getYear(marker: DateMarker): number; + getMonth(marker: DateMarker): number; + add(marker: DateMarker, dur: Duration): DateMarker; + subtract(marker: DateMarker, dur: Duration): DateMarker; + addYears(marker: DateMarker, n: number): Date; + addMonths(marker: DateMarker, n: number): Date; + diffWholeYears(m0: DateMarker, m1: DateMarker): number; + diffWholeMonths(m0: DateMarker, m1: DateMarker): number; + greatestWholeUnit(m0: DateMarker, m1: DateMarker): { + unit: string; + value: number; + }; + countDurationsBetween(m0: DateMarker, m1: DateMarker, d: Duration): number; + startOf(m: DateMarker, unit: string): Date; + startOfYear(m: DateMarker): DateMarker; + startOfMonth(m: DateMarker): DateMarker; + startOfWeek(m: DateMarker): DateMarker; + computeWeekNumber(marker: DateMarker): number; + format(marker: DateMarker, formatter: DateFormatter, dateOptions?: { + forcedTzo?: number; + }): any; + formatRange(start: DateMarker, end: DateMarker, formatter: DateFormatter, dateOptions?: { + forcedStartTzo?: number; + forcedEndTzo?: number; + isEndExclusive?: boolean; + }): any; + formatIso(marker: DateMarker, extraOptions?: any): string; + timestampToMarker(ms: number): Date; + offsetForMarker(m: DateMarker): number; + toDate(m: DateMarker, forcedTzo?: number): Date; + } +} + +declare module '@fullcalendar/core/datelib/formatting' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { CalendarSystem } from '@fullcalendar/core/datelib/calendar-system'; + import { Locale } from '@fullcalendar/core/datelib/locale'; + import { CmdFormatterFunc } from '@fullcalendar/core/datelib/formatting-cmd'; + import { FuncFormatterFunc } from '@fullcalendar/core/datelib/formatting-func'; + export interface ZonedMarker { + marker: DateMarker; + timeZoneOffset: number; + } + export interface ExpandedZonedMarker extends ZonedMarker { + array: number[]; + year: number; + month: number; + day: number; + hour: number; + minute: number; + second: number; + millisecond: number; + } + export interface VerboseFormattingArg { + date: ExpandedZonedMarker; + start: ExpandedZonedMarker; + end?: ExpandedZonedMarker; + timeZone: string; + localeCodes: string[]; + separator: string; + } + export interface DateFormattingContext { + timeZone: string; + locale: Locale; + calendarSystem: CalendarSystem; + computeWeekNumber: (d: DateMarker) => number; + weekLabel: string; + cmdFormatter?: CmdFormatterFunc; + } + export interface DateFormatter { + format(date: ZonedMarker, context: DateFormattingContext): any; + formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): any; + } + export type FormatterInput = object | string | FuncFormatterFunc; + export function createFormatter(input: FormatterInput, defaultSeparator?: string): DateFormatter; + export function buildIsoString(marker: DateMarker, timeZoneOffset?: number, stripZeroTime?: boolean): string; + export function formatIsoTimeString(marker: DateMarker): string; + export function formatTimeZoneOffset(minutes: number, doIso?: boolean): string; + export function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, separator?: string): VerboseFormattingArg; +} + +declare module '@fullcalendar/core/datelib/timezone' { + export abstract class NamedTimeZoneImpl { + timeZoneName: string; + constructor(timeZoneName: string); + abstract offsetForArray(a: number[]): number; + abstract timestampToArray(ms: number): number[]; + } + export type NamedTimeZoneImplClass = { + new (timeZoneName: string): NamedTimeZoneImpl; + }; +} + +declare module '@fullcalendar/core/datelib/parsing' { + export function parse(str: any): { + marker: Date; + isTimeUnspecified: boolean; + timeZoneOffset: any; + }; +} + +declare module '@fullcalendar/core/structs/event-source' { + import { EventInput } from '@fullcalendar/core/structs/event'; + import Calendar from '@fullcalendar/core/Calendar'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { EventSourceFunc } from '@fullcalendar/core/event-sources/func-event-source'; + import { EventUi } from '@fullcalendar/core/component/event-ui'; + import { ConstraintInput, AllowFunc } from '@fullcalendar/core/validation'; + export type EventSourceError = { + message: string; + response?: any; + [otherProp: string]: any; + }; + export type EventInputTransformer = (eventInput: EventInput) => EventInput | null; + export type EventSourceSuccessResponseHandler = (rawData: any, response: any) => EventInput[] | void; + export type EventSourceErrorResponseHandler = (error: EventSourceError) => void; + export interface ExtendedEventSourceInput { + id?: string | number; + allDayDefault?: boolean; + eventDataTransform?: EventInputTransformer; + events?: EventInput[] | EventSourceFunc; + url?: string; + method?: string; + extraParams?: object | (() => object); + startParam?: string; + endParam?: string; + timeZoneParam?: string; + success?: EventSourceSuccessResponseHandler; + failure?: EventSourceErrorResponseHandler; + editable?: boolean; + startEditable?: boolean; + durationEditable?: boolean; + constraint?: ConstraintInput; + overlap?: boolean; + allow?: AllowFunc; + className?: string[] | string; + classNames?: string[] | string; + backgroundColor?: string; + borderColor?: string; + textColor?: string; + color?: string; + [otherProp: string]: any; + } + export type EventSourceInput = ExtendedEventSourceInput | // object in extended form + EventSourceFunc | // just a function + string; + export interface EventSource { + _raw: any; + sourceId: string; + sourceDefId: number; + meta: any; + publicId: string; + isFetching: boolean; + latestFetchId: string; + fetchRange: DateRange | null; + allDayDefault: boolean | null; + eventDataTransform: EventInputTransformer; + ui: EventUi; + success: EventSourceSuccessResponseHandler | null; + failure: EventSourceErrorResponseHandler | null; + extendedProps: any; + } + export type EventSourceHash = { + [sourceId: string]: EventSource; + }; + export type EventSourceFetcher = (arg: { + eventSource: EventSource; + calendar: Calendar; + range: DateRange; + }, success: (res: { + rawEvents: EventInput[]; + xhr?: XMLHttpRequest; + }) => void, failure: (error: EventSourceError) => void) => (void | PromiseLike); + export interface EventSourceDef { + ignoreRange?: boolean; + parseMeta: (raw: EventSourceInput) => object | null; + fetch: EventSourceFetcher; + } + export function doesSourceNeedRange(eventSource: EventSource, calendar: Calendar): boolean; + export function parseEventSource(raw: EventSourceInput, calendar: Calendar): EventSource | null; +} + +declare module '@fullcalendar/core/interactions/interaction' { + import DateComponent from '@fullcalendar/core/component/DateComponent'; + export abstract class Interaction { + component: DateComponent; + constructor(settings: InteractionSettings); + destroy(): void; + } + export type InteractionClass = { + new (settings: InteractionSettings): Interaction; + }; + export interface InteractionSettingsInput { + el: HTMLElement; + useEventCenter?: boolean; + } + export interface InteractionSettings { + component: DateComponent; + el: HTMLElement; + useEventCenter: boolean; + } + export type InteractionSettingsStore = { + [componenUid: string]: InteractionSettings; + }; + export function parseInteractionSettings(component: DateComponent, input: InteractionSettingsInput): InteractionSettings; + export function interactionSettingsToStore(settings: InteractionSettings): { + [x: string]: InteractionSettings; + }; + export let interactionSettingsStore: InteractionSettingsStore; +} + +declare module '@fullcalendar/core/interactions/pointer' { + export interface PointerDragEvent { + origEvent: UIEvent; + isTouch: boolean; + subjectEl: EventTarget; + pageX: number; + pageY: number; + deltaX: number; + deltaY: number; + } +} + +declare module '@fullcalendar/core/interactions/hit' { + import DateComponent from '@fullcalendar/core/component/DateComponent'; + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + import { Rect } from '@fullcalendar/core/util/geom'; + export interface Hit { + component: DateComponent; + dateSpan: DateSpan; + dayEl: HTMLElement; + rect: Rect; + layer: number; + } +} + +declare module '@fullcalendar/core/interactions/date-selecting' { + import { Hit } from '@fullcalendar/core/interactions/hit'; + export type dateSelectionJoinTransformer = (hit0: Hit, hit1: Hit) => any; +} + +declare module '@fullcalendar/core/interactions/event-dragging' { + import Calendar from '@fullcalendar/core/Calendar'; + import { EventMutation } from '@fullcalendar/core/structs/event-mutation'; + import { Hit } from '@fullcalendar/core/interactions/hit'; + import { EventDef } from '@fullcalendar/core/structs/event'; + import { EventUi } from '@fullcalendar/core/component/event-ui'; + import { View } from '@fullcalendar/core'; + export type eventDragMutationMassager = (mutation: EventMutation, hit0: Hit, hit1: Hit) => void; + export type EventDropTransformers = (mutation: EventMutation, calendar: Calendar) => any; + export type eventIsDraggableTransformer = (val: boolean, eventDef: EventDef, eventUi: EventUi, view: View) => boolean; +} + +declare module '@fullcalendar/core/interactions/event-resizing' { + import { Hit } from '@fullcalendar/core/interactions/hit'; + export type EventResizeJoinTransforms = (hit0: Hit, hit1: Hit) => false | object; +} + +declare module '@fullcalendar/core/interactions/ElementDragging' { + import EmitterMixin from '@fullcalendar/core/common/EmitterMixin'; + export { ElementDragging as default, ElementDragging }; + abstract class ElementDragging { + emitter: EmitterMixin; + constructor(el: HTMLElement); + destroy(): void; + abstract setIgnoreMove(bool: boolean): void; + setMirrorIsVisible(bool: boolean): void; + setMirrorNeedsRevert(bool: boolean): void; + setAutoScrollEnabled(bool: boolean): void; + } + export type ElementDraggingClass = { + new (el: HTMLElement): ElementDragging; + }; +} + +declare module '@fullcalendar/core/formatting-api' { + import { DateInput } from '@fullcalendar/core/datelib/env'; + export function formatDate(dateInput: DateInput, settings?: {}): any; + export function formatRange(startInput: DateInput, endInput: DateInput, settings: any): any; +} + +declare module '@fullcalendar/core/options' { + import { PluginDef } from '@fullcalendar/core/plugin-system'; + export const config: any; + export const globalDefaults: { + defaultRangeSeparator: string; + titleRangeSeparator: string; + defaultTimedEventDuration: string; + defaultAllDayEventDuration: { + day: number; + }; + forceEventDuration: boolean; + nextDayThreshold: string; + columnHeader: boolean; + defaultView: string; + aspectRatio: number; + header: { + left: string; + center: string; + right: string; + }; + weekends: boolean; + weekNumbers: boolean; + weekNumberCalculation: string; + editable: boolean; + scrollTime: string; + minTime: string; + maxTime: string; + showNonCurrentDates: boolean; + lazyFetching: boolean; + startParam: string; + endParam: string; + timeZoneParam: string; + timeZone: string; + locales: any[]; + locale: string; + timeGridEventMinHeight: number; + themeSystem: string; + dragRevertDuration: number; + dragScroll: boolean; + allDayMaintainDuration: boolean; + unselectAuto: boolean; + dropAccept: string; + eventOrder: string; + eventLimit: boolean; + eventLimitClick: string; + dayPopoverFormat: { + month: string; + day: string; + year: string; + }; + handleWindowResize: boolean; + windowResizeDelay: number; + longPressDelay: number; + eventDragMinDistance: number; + }; + export const rtlDefaults: { + header: { + left: string; + center: string; + right: string; + }; + buttonIcons: { + prev: string; + next: string; + prevYear: string; + nextYear: string; + }; + }; + export function mergeOptions(optionObjs: any): any; + export function refinePluginDefs(pluginInputs: any[]): PluginDef[]; +} + +declare module '@fullcalendar/core/structs/recurring-event' { + import { EventInput, EventDef } from '@fullcalendar/core/structs/event'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { DateEnv } from '@fullcalendar/core/datelib/env'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + export interface ParsedRecurring { + typeData: any; + allDayGuess: boolean | null; + duration: Duration | null; + } + export interface RecurringType { + parse: (rawEvent: EventInput, leftoverProps: any, dateEnv: DateEnv) => ParsedRecurring | null; + expand: (typeData: any, framingRange: DateRange, dateEnv: DateEnv) => DateMarker[]; + } + export function parseRecurring(eventInput: EventInput, allDayDefault: boolean | null, dateEnv: DateEnv, recurringTypes: RecurringType[], leftovers: any): { + allDay: any; + duration: Duration; + typeData: any; + typeId: number; + }; + export function expandRecurringRanges(eventDef: EventDef, duration: Duration, framingRange: DateRange, dateEnv: DateEnv, recurringTypes: RecurringType[]): DateMarker[]; +} + +declare module '@fullcalendar/core/structs/drag-meta' { + import { Duration, DurationInput } from '@fullcalendar/core/datelib/duration'; + import { EventNonDateInput } from '@fullcalendar/core/structs/event'; + export interface DragMetaInput extends EventNonDateInput { + startTime?: DurationInput; + duration?: DurationInput; + create?: boolean; + sourceId?: string; + } + export interface DragMeta { + startTime: Duration | null; + duration: Duration | null; + create: boolean; + sourceId: string; + leftoverProps: object; + } + export function parseDragMeta(raw: DragMetaInput): DragMeta; +} + +declare module '@fullcalendar/core/plugin-system' { + import { reducerFunc } from '@fullcalendar/core/reducers/types'; + import { eventDefParserFunc } from '@fullcalendar/core/structs/event'; + import { eventDefMutationApplier } from '@fullcalendar/core/structs/event-mutation'; + import Calendar, { DatePointTransform, DateSpanTransform, CalendarInteractionClass, OptionChangeHandlerMap } from '@fullcalendar/core/Calendar'; + import { ViewConfigInputHash } from '@fullcalendar/core/structs/view-config'; + import { ViewSpec } from '@fullcalendar/core/structs/view-spec'; + import { ViewProps } from '@fullcalendar/core/View'; + import { CalendarComponentProps } from '@fullcalendar/core/CalendarComponent'; + import { isPropsValidTester } from '@fullcalendar/core/validation'; + import { eventDragMutationMassager, eventIsDraggableTransformer, EventDropTransformers } from '@fullcalendar/core/interactions/event-dragging'; + import { dateSelectionJoinTransformer } from '@fullcalendar/core/interactions/date-selecting'; + import { EventResizeJoinTransforms } from '@fullcalendar/core/interactions/event-resizing'; + import { ExternalDefTransform } from '@fullcalendar/core/interactions/external-element-dragging'; + import { InteractionClass } from '@fullcalendar/core/interactions/interaction'; + import { ThemeClass } from '@fullcalendar/core/theme/Theme'; + import { EventSourceDef } from '@fullcalendar/core/structs/event-source'; + import { CmdFormatterFunc } from '@fullcalendar/core/datelib/formatting-cmd'; + import { RecurringType } from '@fullcalendar/core/structs/recurring-event'; + import { NamedTimeZoneImplClass } from '@fullcalendar/core/datelib/timezone'; + import { ElementDraggingClass } from '@fullcalendar/core/interactions/ElementDragging'; + export interface PluginDefInput { + deps?: PluginDef[]; + reducers?: reducerFunc[]; + eventDefParsers?: eventDefParserFunc[]; + isDraggableTransformers?: eventIsDraggableTransformer[]; + eventDragMutationMassagers?: eventDragMutationMassager[]; + eventDefMutationAppliers?: eventDefMutationApplier[]; + dateSelectionTransformers?: dateSelectionJoinTransformer[]; + datePointTransforms?: DatePointTransform[]; + dateSpanTransforms?: DateSpanTransform[]; + views?: ViewConfigInputHash; + viewPropsTransformers?: ViewPropsTransformerClass[]; + isPropsValid?: isPropsValidTester; + externalDefTransforms?: ExternalDefTransform[]; + eventResizeJoinTransforms?: EventResizeJoinTransforms[]; + viewContainerModifiers?: ViewContainerModifier[]; + eventDropTransformers?: EventDropTransformers[]; + componentInteractions?: InteractionClass[]; + calendarInteractions?: CalendarInteractionClass[]; + themeClasses?: { + [themeSystemName: string]: ThemeClass; + }; + eventSourceDefs?: EventSourceDef[]; + cmdFormatter?: CmdFormatterFunc; + recurringTypes?: RecurringType[]; + namedTimeZonedImpl?: NamedTimeZoneImplClass; + defaultView?: string; + elementDraggingImpl?: ElementDraggingClass; + optionChangeHandlers?: OptionChangeHandlerMap; + } + export interface PluginHooks { + reducers: reducerFunc[]; + eventDefParsers: eventDefParserFunc[]; + isDraggableTransformers: eventIsDraggableTransformer[]; + eventDragMutationMassagers: eventDragMutationMassager[]; + eventDefMutationAppliers: eventDefMutationApplier[]; + dateSelectionTransformers: dateSelectionJoinTransformer[]; + datePointTransforms: DatePointTransform[]; + dateSpanTransforms: DateSpanTransform[]; + views: ViewConfigInputHash; + viewPropsTransformers: ViewPropsTransformerClass[]; + isPropsValid: isPropsValidTester | null; + externalDefTransforms: ExternalDefTransform[]; + eventResizeJoinTransforms: EventResizeJoinTransforms[]; + viewContainerModifiers: ViewContainerModifier[]; + eventDropTransformers: EventDropTransformers[]; + componentInteractions: InteractionClass[]; + calendarInteractions: CalendarInteractionClass[]; + themeClasses: { + [themeSystemName: string]: ThemeClass; + }; + eventSourceDefs: EventSourceDef[]; + cmdFormatter?: CmdFormatterFunc; + recurringTypes: RecurringType[]; + namedTimeZonedImpl?: NamedTimeZoneImplClass; + defaultView: string; + elementDraggingImpl?: ElementDraggingClass; + optionChangeHandlers: OptionChangeHandlerMap; + } + export interface PluginDef extends PluginHooks { + id: string; + deps: PluginDef[]; + } + export type ViewPropsTransformerClass = new () => ViewPropsTransformer; + export interface ViewPropsTransformer { + transform(viewProps: ViewProps, viewSpec: ViewSpec, calendarProps: CalendarComponentProps, allOptions: any): any; + } + export type ViewContainerModifier = (contentEl: HTMLElement, calendar: Calendar) => void; + export function createPlugin(input: PluginDefInput): PluginDef; + export class PluginSystem { + hooks: PluginHooks; + addedHash: { + [pluginId: string]: true; + }; + constructor(); + add(plugin: PluginDef): void; + } +} + +declare module '@fullcalendar/core/reducers/types' { + import { EventInput, EventInstanceHash } from '@fullcalendar/core/structs/event'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventMutation } from '@fullcalendar/core/structs/event-mutation'; + import { EventSource, EventSourceHash, EventSourceError } from '@fullcalendar/core/structs/event-source'; + import { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + import { DateEnv } from '@fullcalendar/core/datelib/env'; + import Calendar from '@fullcalendar/core/Calendar'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + export interface CalendarState { + eventSources: EventSourceHash; + eventSourceLoadingLevel: number; + loadingLevel: number; + viewType: string; + currentDate: DateMarker; + dateProfile: DateProfile | null; + eventStore: EventStore; + dateSelection: DateSpan | null; + eventSelection: string; + eventDrag: EventInteractionState | null; + eventResize: EventInteractionState | null; + } + export type reducerFunc = (state: CalendarState, action: Action, calendar: Calendar) => CalendarState; + export type Action = { + type: 'INIT'; + } | // wont it create another rerender? + { + type: 'PREV'; + } | { + type: 'NEXT'; + } | { + type: 'SET_DATE'; + dateMarker: DateMarker; + } | { + type: 'SET_VIEW_TYPE'; + viewType: string; + dateMarker?: DateMarker; + } | { + type: 'SELECT_DATES'; + selection: DateSpan; + } | { + type: 'UNSELECT_DATES'; + } | { + type: 'SELECT_EVENT'; + eventInstanceId: string; + } | { + type: 'UNSELECT_EVENT'; + } | { + type: 'SET_EVENT_DRAG'; + state: EventInteractionState; + } | { + type: 'UNSET_EVENT_DRAG'; + } | { + type: 'SET_EVENT_RESIZE'; + state: EventInteractionState; + } | { + type: 'UNSET_EVENT_RESIZE'; + } | { + type: 'ADD_EVENT_SOURCES'; + sources: EventSource[]; + } | { + type: 'REMOVE_EVENT_SOURCE'; + sourceId: string; + } | { + type: 'REMOVE_ALL_EVENT_SOURCES'; + } | { + type: 'FETCH_EVENT_SOURCES'; + sourceIds?: string[]; + } | // if no sourceIds, fetch all + { + type: 'CHANGE_TIMEZONE'; + oldDateEnv: DateEnv; + } | { + type: 'RECEIVE_EVENTS'; + sourceId: string; + fetchId: string; + fetchRange: DateRange | null; + rawEvents: EventInput[]; + } | { + type: 'RECEIVE_EVENT_ERROR'; + sourceId: string; + fetchId: string; + fetchRange: DateRange | null; + error: EventSourceError; + } | // need all these? + { + type: 'ADD_EVENTS'; + eventStore: EventStore; + } | { + type: 'MERGE_EVENTS'; + eventStore: EventStore; + } | { + type: 'MUTATE_EVENTS'; + instanceId: string; + mutation: EventMutation; + fromApi?: boolean; + } | { + type: 'REMOVE_EVENT_DEF'; + defId: string; + } | { + type: 'REMOVE_EVENT_INSTANCES'; + instances: EventInstanceHash; + } | { + type: 'REMOVE_ALL_EVENTS'; + } | { + type: 'RESET_EVENTS'; + }; +} + +declare module '@fullcalendar/core/CalendarComponent' { + import Component, { ComponentContext } from '@fullcalendar/core/component/Component'; + import { ViewSpec } from '@fullcalendar/core/structs/view-spec'; + import View from '@fullcalendar/core/View'; + import Toolbar from '@fullcalendar/core/Toolbar'; + import DateProfileGenerator, { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventUiHash } from '@fullcalendar/core/component/event-ui'; + import { BusinessHoursInput } from '@fullcalendar/core/structs/business-hours'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { CalendarState } from '@fullcalendar/core/reducers/types'; + export interface CalendarComponentProps extends CalendarState { + viewSpec: ViewSpec; + dateProfileGenerator: DateProfileGenerator; + eventUiBases: EventUiHash; + } + export { CalendarComponent as default, CalendarComponent }; + class CalendarComponent extends Component { + view: View; + header: Toolbar; + footer: Toolbar; + computeTitle: (dateProfile: any, viewOptions: any) => string; + parseBusinessHours: (input: BusinessHoursInput) => EventStore; + el: HTMLElement; + contentEl: HTMLElement; + elClassNames: string[]; + savedScroll: any; + isHeightAuto: boolean; + viewHeight: number; + constructor(el: HTMLElement); + render(props: CalendarComponentProps, context: ComponentContext): void; + destroy(): void; + _renderSkeleton(context: ComponentContext): void; + _unrenderSkeleton(): void; + removeElClassNames(): void; + updateElClassNames(context: ComponentContext): void; + _renderToolbars(viewSpec: ViewSpec, dateProfile: DateProfile, currentDate: DateMarker, title: string): void; + _unrenderToolbars(): void; + renderView(props: CalendarComponentProps, title: string): void; + updateSize(isResize?: boolean): void; + computeHeightVars(): void; + queryToolbarsHeight(): number; + freezeHeight(): void; + thawHeight(): void; + } +} + +declare module '@fullcalendar/core/common/DayHeader' { + import Component, { ComponentContext } from '@fullcalendar/core/component/Component'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + export interface DayTableHeaderProps { + dates: DateMarker[]; + dateProfile: DateProfile; + datesRepDistinctDays: boolean; + renderIntroHtml?: () => string; + } + export { DayHeader as default, DayHeader }; + class DayHeader extends Component { + parentEl: HTMLElement; + el: HTMLElement; + thead: HTMLElement; + constructor(parentEl: HTMLElement); + render(props: DayTableHeaderProps, context: ComponentContext): void; + destroy(): void; + _renderSkeleton(context: ComponentContext): void; + _unrenderSkeleton(): void; + } +} + +declare module '@fullcalendar/core/common/table-utils' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + import { ComponentContext } from '@fullcalendar/core/component/Component'; + export function computeFallbackHeaderFormat(datesRepDistinctDays: boolean, dayCnt: number): { + weekday: string; + month?: undefined; + day?: undefined; + omitCommas?: undefined; + } | { + weekday: string; + month: string; + day: string; + omitCommas: boolean; + }; + export function renderDateCell(dateMarker: DateMarker, dateProfile: DateProfile, datesRepDistinctDays: any, colCnt: any, colHeadFormat: any, context: ComponentContext, colspan?: any, otherAttrs?: any): string; +} + +declare module '@fullcalendar/core/common/DaySeries' { + import DateProfileGenerator from '@fullcalendar/core/DateProfileGenerator'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + export interface DaySeriesSeg { + firstIndex: number; + lastIndex: number; + isStart: boolean; + isEnd: boolean; + } + export { DaySeries as default, DaySeries }; + class DaySeries { + cnt: number; + dates: DateMarker[]; + indices: number[]; + constructor(range: DateRange, dateProfileGenerator: DateProfileGenerator); + sliceRange(range: DateRange): DaySeriesSeg | null; + } +} + +declare module '@fullcalendar/core/interactions/event-interaction-state' { + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { Seg } from '@fullcalendar/core/component/DateComponent'; + export interface EventInteractionState { + affectedEvents: EventStore; + mutatedEvents: EventStore; + isEvent: boolean; + origSeg: Seg | null; + } +} + +declare module '@fullcalendar/core/component/event-rendering' { + import { EventDef, EventTuple, EventDefHash } from '@fullcalendar/core/structs/event'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { Seg } from '@fullcalendar/core/component/DateComponent'; + import { EventUi, EventUiHash } from '@fullcalendar/core/component/event-ui'; + import { ComponentContext } from '@fullcalendar/core/component/Component'; + export interface EventRenderRange extends EventTuple { + ui: EventUi; + range: DateRange; + isStart: boolean; + isEnd: boolean; + } + export function sliceEventStore(eventStore: EventStore, eventUiBases: EventUiHash, framingRange: DateRange, nextDayThreshold?: Duration): { + bg: EventRenderRange[]; + fg: EventRenderRange[]; + }; + export function hasBgRendering(def: EventDef): boolean; + export function filterSegsViaEls(context: ComponentContext, segs: Seg[], isMirror: boolean): Seg[]; + export function getElSeg(el: HTMLElement): Seg | null; + export function compileEventUis(eventDefs: EventDefHash, eventUiBases: EventUiHash): { + [key: string]: EventUi; + }; + export function compileEventUi(eventDef: EventDef, eventUiBases: EventUiHash): EventUi; + export function triggerRenderedSegs(context: ComponentContext, segs: Seg[], isMirrors: boolean): void; + export function triggerWillRemoveSegs(context: ComponentContext, segs: Seg[], isMirrors: boolean): void; + export function computeEventDraggable(context: ComponentContext, eventDef: EventDef, eventUi: EventUi): boolean; + export function computeEventStartResizable(context: ComponentContext, eventDef: EventDef, eventUi: EventUi): any; + export function computeEventEndResizable(context: ComponentContext, eventDef: EventDef, eventUi: EventUi): boolean; +} + +declare module '@fullcalendar/core/common/DayTable' { + import DaySeries from '@fullcalendar/core/common/DaySeries'; + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import { Seg } from '@fullcalendar/core/component/DateComponent'; + export interface DayTableSeg extends Seg { + row: number; + firstCol: number; + lastCol: number; + } + export interface DayTableCell { + date: DateMarker; + htmlAttrs?: string; + } + export { DayTable as default, DayTable }; + class DayTable { + rowCnt: number; + colCnt: number; + cells: DayTableCell[][]; + headerDates: DateMarker[]; + constructor(daySeries: DaySeries, breakOnWeeks: boolean); + sliceRange(range: DateRange): DayTableSeg[]; + } +} + +declare module '@fullcalendar/core/common/slicing-utils' { + import { DateRange } from '@fullcalendar/core/datelib/date-range'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventUiHash } from '@fullcalendar/core/component/event-ui'; + import { DateProfile } from '@fullcalendar/core/DateProfileGenerator'; + import DateComponent, { Seg, EventSegUiInteractionState } from '@fullcalendar/core/component/DateComponent'; + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + import Calendar from '@fullcalendar/core/Calendar'; + export interface SliceableProps { + dateSelection: DateSpan; + businessHours: EventStore; + eventStore: EventStore; + eventDrag: EventInteractionState | null; + eventResize: EventInteractionState | null; + eventSelection: string; + eventUiBases: EventUiHash; + } + export interface SlicedProps { + dateSelectionSegs: SegType[]; + businessHourSegs: SegType[]; + fgEventSegs: SegType[]; + bgEventSegs: SegType[]; + eventDrag: EventSegUiInteractionState | null; + eventResize: EventSegUiInteractionState | null; + eventSelection: string; + } + export { Slicer as default, Slicer }; + abstract class Slicer { + abstract sliceRange(dateRange: DateRange, ...extraArgs: ExtraArgs): SegType[]; + sliceProps(props: SliceableProps, dateProfile: DateProfile, nextDayThreshold: Duration | null, calendar: Calendar, component: DateComponent, // TODO: kill + ...extraArgs: ExtraArgs): SlicedProps; + sliceNowDate(// does not memoize + date: DateMarker, component: DateComponent, // TODO: kill + ...extraArgs: ExtraArgs): SegType[]; + } +} + +declare module '@fullcalendar/core/structs/event-mutation' { + import { Duration } from '@fullcalendar/core/datelib/duration'; + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import { EventDef } from '@fullcalendar/core/structs/event'; + import Calendar from '@fullcalendar/core/Calendar'; + import { EventUiHash } from '@fullcalendar/core/component/event-ui'; + export interface EventMutation { + datesDelta?: Duration; + startDelta?: Duration; + endDelta?: Duration; + standardProps?: any; + extendedProps?: any; + } + export function applyMutationToEventStore(eventStore: EventStore, eventConfigBase: EventUiHash, mutation: EventMutation, calendar: Calendar): EventStore; + export type eventDefMutationApplier = (eventDef: EventDef, mutation: EventMutation, calendar: Calendar) => void; +} + +declare module '@fullcalendar/core/validation' { + import { EventStore } from '@fullcalendar/core/structs/event-store'; + import Calendar from '@fullcalendar/core/Calendar'; + import { DateSpan, DateSpanApi } from '@fullcalendar/core/structs/date-span'; + import EventApi from '@fullcalendar/core/api/EventApi'; + import { EventInput } from '@fullcalendar/core/structs/event'; + import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state'; + import { SplittableProps } from '@fullcalendar/core/component/event-splitting'; + export type ConstraintInput = 'businessHours' | string | EventInput | EventInput[]; + export type Constraint = 'businessHours' | string | EventStore | false; + export type OverlapFunc = ((stillEvent: EventApi, movingEvent: EventApi | null) => boolean); + export type AllowFunc = (span: DateSpanApi, movingEvent: EventApi | null) => boolean; + export type isPropsValidTester = (props: SplittableProps, calendar: Calendar) => boolean; + export function isInteractionValid(interaction: EventInteractionState, calendar: Calendar): boolean; + export function isDateSelectionValid(dateSelection: DateSpan, calendar: Calendar): boolean; + export function isPropsValid(state: SplittableProps, calendar: Calendar, dateSpanMeta?: {}, filterConfig?: any): boolean; + export function normalizeConstraint(input: ConstraintInput, calendar: Calendar): Constraint | null; +} + +declare module '@fullcalendar/core/api/EventApi' { + import Calendar from '@fullcalendar/core/Calendar'; + import { EventDef, EventInstance } from '@fullcalendar/core/structs/event'; + import { EventMutation } from '@fullcalendar/core/structs/event-mutation'; + import { DateInput } from '@fullcalendar/core/datelib/env'; + import { DurationInput } from '@fullcalendar/core/datelib/duration'; + import { FormatterInput } from '@fullcalendar/core/datelib/formatting'; + import EventSourceApi from '@fullcalendar/core/api/EventSourceApi'; + export { EventApi as default, EventApi }; + class EventApi { + _calendar: Calendar; + _def: EventDef; + _instance: EventInstance | null; + constructor(calendar: Calendar, def: EventDef, instance?: EventInstance); + setProp(name: string, val: string): void; + setExtendedProp(name: string, val: any): void; + setStart(startInput: DateInput, options?: { + granularity?: string; + maintainDuration?: boolean; + }): void; + setEnd(endInput: DateInput | null, options?: { + granularity?: string; + }): void; + setDates(startInput: DateInput, endInput: DateInput | null, options?: { + allDay?: boolean; + granularity?: string; + }): void; + moveStart(deltaInput: DurationInput): void; + moveEnd(deltaInput: DurationInput): void; + moveDates(deltaInput: DurationInput): void; + setAllDay(allDay: boolean, options?: { + maintainDuration?: boolean; + }): void; + formatRange(formatInput: FormatterInput): any; + mutate(mutation: EventMutation): void; + remove(): void; + readonly source: EventSourceApi | null; + readonly start: Date | null; + readonly end: Date | null; + readonly id: string; + readonly groupId: string; + readonly allDay: boolean; + readonly title: string; + readonly url: string; + readonly rendering: string; + readonly startEditable: boolean; + readonly durationEditable: boolean; + readonly constraint: any; + readonly overlap: any; + readonly allow: any; + readonly backgroundColor: string; + readonly borderColor: string; + readonly textColor: string; + readonly classNames: string[]; + readonly extendedProps: any; + } +} + +declare module '@fullcalendar/core/util/requestJson' { + export default function requestJson(method: string, url: string, params: object, successCallback: any, failureCallback: any): void; +} + +declare module '@fullcalendar/core/datelib/locale' { + export type LocaleCodeArg = string | string[]; + export type LocaleSingularArg = LocaleCodeArg | RawLocale; + export interface Locale { + codeArg: LocaleCodeArg; + codes: string[]; + week: { + dow: number; + doy: number; + }; + simpleNumberFormat: Intl.NumberFormat; + options: any; + } + export interface RawLocale { + code: string; + [otherProp: string]: any; + } + export type RawLocaleMap = { + [code: string]: RawLocale; + }; + export interface RawLocaleInfo { + map: RawLocaleMap; + defaultCode: string; + } + export function parseRawLocales(explicitRawLocales: RawLocale[]): RawLocaleInfo; + export function buildLocale(inputSingular: LocaleSingularArg, available: RawLocaleMap): Locale; +} + +declare module '@fullcalendar/core/OptionsManager' { + export { OptionsManager as default, OptionsManager }; + class OptionsManager { + dirDefaults: any; + localeDefaults: any; + overrides: any; + dynamicOverrides: any; + computed: any; + constructor(overrides: any); + mutate(updates: any, removals: string[], isDynamic?: boolean): void; + compute(): void; + } +} + +declare module '@fullcalendar/core/api/EventSourceApi' { + import Calendar from '@fullcalendar/core/Calendar'; + import { EventSource } from '@fullcalendar/core/structs/event-source'; + export { EventSourceApi as default, EventSourceApi }; + class EventSourceApi { + calendar: Calendar; + internalEventSource: EventSource; + constructor(calendar: Calendar, internalEventSource: EventSource); + remove(): void; + refetch(): void; + readonly id: string; + readonly url: string; + } +} + +declare module '@fullcalendar/core/structs/view-config' { + import View from '@fullcalendar/core/View'; + import { ViewSpec } from '@fullcalendar/core/structs/view-spec'; + export type ViewClass = new (viewSpec: ViewSpec, parentEl: HTMLElement) => View; + export interface ViewConfigObjectInput { + type?: string; + class?: ViewClass; + [optionName: string]: any; + } + export type ViewConfigInput = ViewClass | ViewConfigObjectInput; + export type ViewConfigInputHash = { + [viewType: string]: ViewConfigInput; + }; + export interface ViewConfig { + superType: string; + class: ViewClass | null; + options: any; + } + export type ViewConfigHash = { + [viewType: string]: ViewConfig; + }; + export function parseViewConfigs(inputs: ViewConfigInputHash): ViewConfigHash; +} + +declare module '@fullcalendar/core/datelib/calendar-system' { + import { DateMarker } from '@fullcalendar/core/datelib/marker'; + export interface CalendarSystem { + getMarkerYear(d: DateMarker): number; + getMarkerMonth(d: DateMarker): number; + getMarkerDay(d: DateMarker): number; + arrayToMarker(arr: number[]): DateMarker; + markerToArray(d: DateMarker): number[]; + } + export function registerCalendarSystem(name: any, theClass: any): void; + export function createCalendarSystem(name: any): any; +} + +declare module '@fullcalendar/core/datelib/formatting-cmd' { + import { DateFormatter, DateFormattingContext, ZonedMarker, VerboseFormattingArg } from '@fullcalendar/core/datelib/formatting'; + export type CmdFormatterFunc = (cmd: string, arg: VerboseFormattingArg) => string; + export class CmdFormatter implements DateFormatter { + cmdStr: string; + separator: string; + constructor(cmdStr: string, separator?: string); + format(date: ZonedMarker, context: DateFormattingContext): string; + formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): string; + } +} + +declare module '@fullcalendar/core/datelib/formatting-func' { + import { DateFormatter, DateFormattingContext, ZonedMarker, VerboseFormattingArg } from '@fullcalendar/core/datelib/formatting'; + export type FuncFormatterFunc = (arg: VerboseFormattingArg) => string; + export class FuncFormatter implements DateFormatter { + func: FuncFormatterFunc; + constructor(func: FuncFormatterFunc); + format(date: ZonedMarker, context: DateFormattingContext): string; + formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): string; + } +} + +declare module '@fullcalendar/core/event-sources/func-event-source' { + import { EventSourceError } from '@fullcalendar/core/structs/event-source'; + import { EventInput } from '@fullcalendar/core/structs/event'; + export type EventSourceFunc = (arg: { + start: Date; + end: Date; + timeZone: string; + }, successCallback: (events: EventInput[]) => void, failureCallback: (error: EventSourceError) => void) => (void | PromiseLike); + const _default: import("@fullcalendar/core/plugin-system").PluginDef; + export default _default; +} + +declare module '@fullcalendar/core/interactions/external-element-dragging' { + import { DateSpan } from '@fullcalendar/core/structs/date-span'; + import { DragMeta } from '@fullcalendar/core/structs/drag-meta'; + export type ExternalDefTransform = (dateSpan: DateSpan, dragMeta: DragMeta) => any; +} + +declare module '@fullcalendar/core/Toolbar' { + import Component from '@fullcalendar/core/component/Component'; + export interface ToolbarRenderProps { + layout: any; + title: string; + activeButton: string; + isTodayEnabled: boolean; + isPrevEnabled: boolean; + isNextEnabled: boolean; + } + export { Toolbar as default, Toolbar }; + class Toolbar extends Component { + el: HTMLElement; + viewsWithButtons: any; + constructor(extraClassName: any); + destroy(): void; + render(props: ToolbarRenderProps): void; + renderLayout(layout: any): void; + unrenderLayout(): void; + renderSection(position: any, buttonStr: any): HTMLElement; + updateToday(isTodayEnabled: any): void; + updatePrev(isPrevEnabled: any): void; + updateNext(isNextEnabled: any): void; + updateTitle(text: any): void; + updateActiveButton(buttonName?: any): void; + toggleButtonEnabled(buttonName: any, bool: any): void; + } +} + diff --git a/src/main/resources/static/packages/core/main.esm.js b/src/main/resources/static/packages/core/main.esm.js new file mode 100644 index 00000000..6e36d9d5 --- /dev/null +++ b/src/main/resources/static/packages/core/main.esm.js @@ -0,0 +1,8577 @@ +/*! +FullCalendar Core Package v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +// Creating +// ---------------------------------------------------------------------------------------------------------------- +var elementPropHash = { + className: true, + colSpan: true, + rowSpan: true +}; +var containerTagHash = { + '= rect.left && + point.left < rect.right && + point.top >= rect.top && + point.top < rect.bottom; +} +// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false +function intersectRects(rect1, rect2) { + var res = { + left: Math.max(rect1.left, rect2.left), + right: Math.min(rect1.right, rect2.right), + top: Math.max(rect1.top, rect2.top), + bottom: Math.min(rect1.bottom, rect2.bottom) + }; + if (res.left < res.right && res.top < res.bottom) { + return res; + } + return false; +} +function translateRect(rect, deltaX, deltaY) { + return { + left: rect.left + deltaX, + right: rect.right + deltaX, + top: rect.top + deltaY, + bottom: rect.bottom + deltaY + }; +} +// Returns a new point that will have been moved to reside within the given rectangle +function constrainPoint(point, rect) { + return { + left: Math.min(Math.max(point.left, rect.left), rect.right), + top: Math.min(Math.max(point.top, rect.top), rect.bottom) + }; +} +// Returns a point that is the center of the given rectangle +function getRectCenter(rect) { + return { + left: (rect.left + rect.right) / 2, + top: (rect.top + rect.bottom) / 2 + }; +} +// Subtracts point2's coordinates from point1's coordinates, returning a delta +function diffPoints(point1, point2) { + return { + left: point1.left - point2.left, + top: point1.top - point2.top + }; +} + +// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side +var isRtlScrollbarOnLeft = null; +function getIsRtlScrollbarOnLeft() { + if (isRtlScrollbarOnLeft === null) { + isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft(); + } + return isRtlScrollbarOnLeft; +} +function computeIsRtlScrollbarOnLeft() { + var outerEl = createElement('div', { + style: { + position: 'absolute', + top: -1000, + left: 0, + border: 0, + padding: 0, + overflow: 'scroll', + direction: 'rtl' + } + }, '
'); + document.body.appendChild(outerEl); + var innerEl = outerEl.firstChild; + var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left; + removeElement(outerEl); + return res; +} +// The scrollbar width computations in computeEdges are sometimes flawed when it comes to +// retina displays, rounding, and IE11. Massage them into a usable value. +function sanitizeScrollbarWidth(width) { + width = Math.max(0, width); // no negatives + width = Math.round(width); + return width; +} + +function computeEdges(el, getPadding) { + if (getPadding === void 0) { getPadding = false; } + var computedStyle = window.getComputedStyle(el); + var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0; + var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0; + var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0; + var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0; + // must use offset(Width|Height) because compatible with client(Width|Height) + var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight); + var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom); + var res = { + borderLeft: borderLeft, + borderRight: borderRight, + borderTop: borderTop, + borderBottom: borderBottom, + scrollbarBottom: scrollbarBottom, + scrollbarLeft: 0, + scrollbarRight: 0 + }; + if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side? + res.scrollbarLeft = scrollbarLeftRight; + } + else { + res.scrollbarRight = scrollbarLeftRight; + } + if (getPadding) { + res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0; + res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0; + res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0; + res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0; + } + return res; +} +function computeInnerRect(el, goWithinPadding) { + if (goWithinPadding === void 0) { goWithinPadding = false; } + var outerRect = computeRect(el); + var edges = computeEdges(el, goWithinPadding); + var res = { + left: outerRect.left + edges.borderLeft + edges.scrollbarLeft, + right: outerRect.right - edges.borderRight - edges.scrollbarRight, + top: outerRect.top + edges.borderTop, + bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom + }; + if (goWithinPadding) { + res.left += edges.paddingLeft; + res.right -= edges.paddingRight; + res.top += edges.paddingTop; + res.bottom -= edges.paddingBottom; + } + return res; +} +function computeRect(el) { + var rect = el.getBoundingClientRect(); + return { + left: rect.left + window.pageXOffset, + top: rect.top + window.pageYOffset, + right: rect.right + window.pageXOffset, + bottom: rect.bottom + window.pageYOffset + }; +} +function computeViewportRect() { + return { + left: window.pageXOffset, + right: window.pageXOffset + document.documentElement.clientWidth, + top: window.pageYOffset, + bottom: window.pageYOffset + document.documentElement.clientHeight + }; +} +function computeHeightAndMargins(el) { + return el.getBoundingClientRect().height + computeVMargins(el); +} +function computeVMargins(el) { + var computed = window.getComputedStyle(el); + return parseInt(computed.marginTop, 10) + + parseInt(computed.marginBottom, 10); +} +// does not return window +function getClippingParents(el) { + var parents = []; + while (el instanceof HTMLElement) { // will stop when gets to document or null + var computedStyle = window.getComputedStyle(el); + if (computedStyle.position === 'fixed') { + break; + } + if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) { + parents.push(el); + } + el = el.parentNode; + } + return parents; +} +function computeClippingRect(el) { + return getClippingParents(el) + .map(function (el) { + return computeInnerRect(el); + }) + .concat(computeViewportRect()) + .reduce(function (rect0, rect1) { + return intersectRects(rect0, rect1) || rect1; // should always intersect + }); +} + +// Stops a mouse/touch event from doing it's native browser action +function preventDefault(ev) { + ev.preventDefault(); +} +// Event Delegation +// ---------------------------------------------------------------------------------------------------------------- +function listenBySelector(container, eventType, selector, handler) { + function realHandler(ev) { + var matchedChild = elementClosest(ev.target, selector); + if (matchedChild) { + handler.call(matchedChild, ev, matchedChild); + } + } + container.addEventListener(eventType, realHandler); + return function () { + container.removeEventListener(eventType, realHandler); + }; +} +function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) { + var currentMatchedChild; + return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) { + if (matchedChild !== currentMatchedChild) { + currentMatchedChild = matchedChild; + onMouseEnter(ev, matchedChild); + var realOnMouseLeave_1 = function (ev) { + currentMatchedChild = null; + onMouseLeave(ev, matchedChild); + matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1); + }; + // listen to the next mouseleave, and then unattach + matchedChild.addEventListener('mouseleave', realOnMouseLeave_1); + } + }); +} +// Animation +// ---------------------------------------------------------------------------------------------------------------- +var transitionEventNames = [ + 'webkitTransitionEnd', + 'otransitionend', + 'oTransitionEnd', + 'msTransitionEnd', + 'transitionend' +]; +// triggered only when the next single subsequent transition finishes +function whenTransitionDone(el, callback) { + var realCallback = function (ev) { + callback(ev); + transitionEventNames.forEach(function (eventName) { + el.removeEventListener(eventName, realCallback); + }); + }; + transitionEventNames.forEach(function (eventName) { + el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes + }); +} + +var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; +// Adding +function addWeeks(m, n) { + var a = dateToUtcArray(m); + a[2] += n * 7; + return arrayToUtcDate(a); +} +function addDays(m, n) { + var a = dateToUtcArray(m); + a[2] += n; + return arrayToUtcDate(a); +} +function addMs(m, n) { + var a = dateToUtcArray(m); + a[6] += n; + return arrayToUtcDate(a); +} +// Diffing (all return floats) +function diffWeeks(m0, m1) { + return diffDays(m0, m1) / 7; +} +function diffDays(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24); +} +function diffHours(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60); +} +function diffMinutes(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / (1000 * 60); +} +function diffSeconds(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / 1000; +} +function diffDayAndTime(m0, m1) { + var m0day = startOfDay(m0); + var m1day = startOfDay(m1); + return { + years: 0, + months: 0, + days: Math.round(diffDays(m0day, m1day)), + milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()) + }; +} +// Diffing Whole Units +function diffWholeWeeks(m0, m1) { + var d = diffWholeDays(m0, m1); + if (d !== null && d % 7 === 0) { + return d / 7; + } + return null; +} +function diffWholeDays(m0, m1) { + if (timeAsMs(m0) === timeAsMs(m1)) { + return Math.round(diffDays(m0, m1)); + } + return null; +} +// Start-Of +function startOfDay(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate() + ]); +} +function startOfHour(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate(), + m.getUTCHours() + ]); +} +function startOfMinute(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate(), + m.getUTCHours(), + m.getUTCMinutes() + ]); +} +function startOfSecond(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate(), + m.getUTCHours(), + m.getUTCMinutes(), + m.getUTCSeconds() + ]); +} +// Week Computation +function weekOfYear(marker, dow, doy) { + var y = marker.getUTCFullYear(); + var w = weekOfGivenYear(marker, y, dow, doy); + if (w < 1) { + return weekOfGivenYear(marker, y - 1, dow, doy); + } + var nextW = weekOfGivenYear(marker, y + 1, dow, doy); + if (nextW >= 1) { + return Math.min(w, nextW); + } + return w; +} +function weekOfGivenYear(marker, year, dow, doy) { + var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]); + var dayStart = startOfDay(marker); + var days = Math.round(diffDays(firstWeekStart, dayStart)); + return Math.floor(days / 7) + 1; // zero-indexed +} +// start-of-first-week - start-of-year +function firstWeekOffset(year, dow, doy) { + // first-week day -- which january is always in the first week (4 for iso, 1 for other) + var fwd = 7 + dow - doy; + // first-week day local weekday -- which local weekday is fwd + var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7; + return -fwdlw + fwd - 1; +} +// Array Conversion +function dateToLocalArray(date) { + return [ + date.getFullYear(), + date.getMonth(), + date.getDate(), + date.getHours(), + date.getMinutes(), + date.getSeconds(), + date.getMilliseconds() + ]; +} +function arrayToLocalDate(a) { + return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month + a[3] || 0, a[4] || 0, a[5] || 0); +} +function dateToUtcArray(date) { + return [ + date.getUTCFullYear(), + date.getUTCMonth(), + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds(), + date.getUTCMilliseconds() + ]; +} +function arrayToUtcDate(a) { + // according to web standards (and Safari), a month index is required. + // massage if only given a year. + if (a.length === 1) { + a = a.concat([0]); + } + return new Date(Date.UTC.apply(Date, a)); +} +// Other Utils +function isValidDate(m) { + return !isNaN(m.valueOf()); +} +function timeAsMs(m) { + return m.getUTCHours() * 1000 * 60 * 60 + + m.getUTCMinutes() * 1000 * 60 + + m.getUTCSeconds() * 1000 + + m.getUTCMilliseconds(); +} + +var INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds']; +var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/; +// Parsing and Creation +function createDuration(input, unit) { + var _a; + if (typeof input === 'string') { + return parseString(input); + } + else if (typeof input === 'object' && input) { // non-null object + return normalizeObject(input); + } + else if (typeof input === 'number') { + return normalizeObject((_a = {}, _a[unit || 'milliseconds'] = input, _a)); + } + else { + return null; + } +} +function parseString(s) { + var m = PARSE_RE.exec(s); + if (m) { + var sign = m[1] ? -1 : 1; + return { + years: 0, + months: 0, + days: sign * (m[2] ? parseInt(m[2], 10) : 0), + milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours + (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes + (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds + (m[6] ? parseInt(m[6], 10) : 0) // ms + ) + }; + } + return null; +} +function normalizeObject(obj) { + return { + years: obj.years || obj.year || 0, + months: obj.months || obj.month || 0, + days: (obj.days || obj.day || 0) + + getWeeksFromInput(obj) * 7, + milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours + (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes + (obj.seconds || obj.second || 0) * 1000 + // seconds + (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms + }; +} +function getWeeksFromInput(obj) { + return obj.weeks || obj.week || 0; +} +// Equality +function durationsEqual(d0, d1) { + return d0.years === d1.years && + d0.months === d1.months && + d0.days === d1.days && + d0.milliseconds === d1.milliseconds; +} +function isSingleDay(dur) { + return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0; +} +// Simple Math +function addDurations(d0, d1) { + return { + years: d0.years + d1.years, + months: d0.months + d1.months, + days: d0.days + d1.days, + milliseconds: d0.milliseconds + d1.milliseconds + }; +} +function subtractDurations(d1, d0) { + return { + years: d1.years - d0.years, + months: d1.months - d0.months, + days: d1.days - d0.days, + milliseconds: d1.milliseconds - d0.milliseconds + }; +} +function multiplyDuration(d, n) { + return { + years: d.years * n, + months: d.months * n, + days: d.days * n, + milliseconds: d.milliseconds * n + }; +} +// Conversions +// "Rough" because they are based on average-case Gregorian months/years +function asRoughYears(dur) { + return asRoughDays(dur) / 365; +} +function asRoughMonths(dur) { + return asRoughDays(dur) / 30; +} +function asRoughDays(dur) { + return asRoughMs(dur) / 864e5; +} +function asRoughMinutes(dur) { + return asRoughMs(dur) / (1000 * 60); +} +function asRoughSeconds(dur) { + return asRoughMs(dur) / 1000; +} +function asRoughMs(dur) { + return dur.years * (365 * 864e5) + + dur.months * (30 * 864e5) + + dur.days * 864e5 + + dur.milliseconds; +} +// Advanced Math +function wholeDivideDurations(numerator, denominator) { + var res = null; + for (var i = 0; i < INTERNAL_UNITS.length; i++) { + var unit = INTERNAL_UNITS[i]; + if (denominator[unit]) { + var localRes = numerator[unit] / denominator[unit]; + if (!isInt(localRes) || (res !== null && res !== localRes)) { + return null; + } + res = localRes; + } + else if (numerator[unit]) { + // needs to divide by something but can't! + return null; + } + } + return res; +} +function greatestDurationDenominator(dur, dontReturnWeeks) { + var ms = dur.milliseconds; + if (ms) { + if (ms % 1000 !== 0) { + return { unit: 'millisecond', value: ms }; + } + if (ms % (1000 * 60) !== 0) { + return { unit: 'second', value: ms / 1000 }; + } + if (ms % (1000 * 60 * 60) !== 0) { + return { unit: 'minute', value: ms / (1000 * 60) }; + } + if (ms) { + return { unit: 'hour', value: ms / (1000 * 60 * 60) }; + } + } + if (dur.days) { + if (!dontReturnWeeks && dur.days % 7 === 0) { + return { unit: 'week', value: dur.days / 7 }; + } + return { unit: 'day', value: dur.days }; + } + if (dur.months) { + return { unit: 'month', value: dur.months }; + } + if (dur.years) { + return { unit: 'year', value: dur.years }; + } + return { unit: 'millisecond', value: 0 }; +} + +/* FullCalendar-specific DOM Utilities +----------------------------------------------------------------------------------------------------------------------*/ +// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left +// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that. +function compensateScroll(rowEl, scrollbarWidths) { + if (scrollbarWidths.left) { + applyStyle(rowEl, { + borderLeftWidth: 1, + marginLeft: scrollbarWidths.left - 1 + }); + } + if (scrollbarWidths.right) { + applyStyle(rowEl, { + borderRightWidth: 1, + marginRight: scrollbarWidths.right - 1 + }); + } +} +// Undoes compensateScroll and restores all borders/margins +function uncompensateScroll(rowEl) { + applyStyle(rowEl, { + marginLeft: '', + marginRight: '', + borderLeftWidth: '', + borderRightWidth: '' + }); +} +// Make the mouse cursor express that an event is not allowed in the current area +function disableCursor() { + document.body.classList.add('fc-not-allowed'); +} +// Returns the mouse cursor to its original look +function enableCursor() { + document.body.classList.remove('fc-not-allowed'); +} +// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate. +// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering +// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and +// reduces the available height. +function distributeHeight(els, availableHeight, shouldRedistribute) { + // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions, + // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars. + var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element + var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE* + var flexEls = []; // elements that are allowed to expand. array of DOM nodes + var flexOffsets = []; // amount of vertical space it takes up + var flexHeights = []; // actual css height + var usedHeight = 0; + undistributeHeight(els); // give all elements their natural height + // find elements that are below the recommended height (expandable). + // important to query for heights in a single first pass (to avoid reflow oscillation). + els.forEach(function (el, i) { + var minOffset = i === els.length - 1 ? minOffset2 : minOffset1; + var naturalHeight = el.getBoundingClientRect().height; + var naturalOffset = naturalHeight + computeVMargins(el); + if (naturalOffset < minOffset) { + flexEls.push(el); + flexOffsets.push(naturalOffset); + flexHeights.push(naturalHeight); + } + else { + // this element stretches past recommended height (non-expandable). mark the space as occupied. + usedHeight += naturalOffset; + } + }); + // readjust the recommended height to only consider the height available to non-maxed-out rows. + if (shouldRedistribute) { + availableHeight -= usedHeight; + minOffset1 = Math.floor(availableHeight / flexEls.length); + minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE* + } + // assign heights to all expandable elements + flexEls.forEach(function (el, i) { + var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1; + var naturalOffset = flexOffsets[i]; + var naturalHeight = flexHeights[i]; + var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding + if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things + el.style.height = newHeight + 'px'; + } + }); +} +// Undoes distrubuteHeight, restoring all els to their natural height +function undistributeHeight(els) { + els.forEach(function (el) { + el.style.height = ''; + }); +} +// Given `els`, a set of cells, find the cell with the largest natural width and set the widths of all the +// cells to be that width. +// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline +function matchCellWidths(els) { + var maxInnerWidth = 0; + els.forEach(function (el) { + var innerEl = el.firstChild; // hopefully an element + if (innerEl instanceof HTMLElement) { + var innerWidth_1 = innerEl.getBoundingClientRect().width; + if (innerWidth_1 > maxInnerWidth) { + maxInnerWidth = innerWidth_1; + } + } + }); + maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance + els.forEach(function (el) { + el.style.width = maxInnerWidth + 'px'; + }); + return maxInnerWidth; +} +// Given one element that resides inside another, +// Subtracts the height of the inner element from the outer element. +function subtractInnerElHeight(outerEl, innerEl) { + // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked + var reflowStyleProps = { + position: 'relative', + left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll + }; + applyStyle(outerEl, reflowStyleProps); + applyStyle(innerEl, reflowStyleProps); + var diff = // grab the dimensions + outerEl.getBoundingClientRect().height - + innerEl.getBoundingClientRect().height; + // undo hack + var resetStyleProps = { position: '', left: '' }; + applyStyle(outerEl, resetStyleProps); + applyStyle(innerEl, resetStyleProps); + return diff; +} +/* Selection +----------------------------------------------------------------------------------------------------------------------*/ +function preventSelection(el) { + el.classList.add('fc-unselectable'); + el.addEventListener('selectstart', preventDefault); +} +function allowSelection(el) { + el.classList.remove('fc-unselectable'); + el.removeEventListener('selectstart', preventDefault); +} +/* Context Menu +----------------------------------------------------------------------------------------------------------------------*/ +function preventContextMenu(el) { + el.addEventListener('contextmenu', preventDefault); +} +function allowContextMenu(el) { + el.removeEventListener('contextmenu', preventDefault); +} +/* Object Ordering by Field +----------------------------------------------------------------------------------------------------------------------*/ +function parseFieldSpecs(input) { + var specs = []; + var tokens = []; + var i; + var token; + if (typeof input === 'string') { + tokens = input.split(/\s*,\s*/); + } + else if (typeof input === 'function') { + tokens = [input]; + } + else if (Array.isArray(input)) { + tokens = input; + } + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + if (typeof token === 'string') { + specs.push(token.charAt(0) === '-' ? + { field: token.substring(1), order: -1 } : + { field: token, order: 1 }); + } + else if (typeof token === 'function') { + specs.push({ func: token }); + } + } + return specs; +} +function compareByFieldSpecs(obj0, obj1, fieldSpecs) { + var i; + var cmp; + for (i = 0; i < fieldSpecs.length; i++) { + cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]); + if (cmp) { + return cmp; + } + } + return 0; +} +function compareByFieldSpec(obj0, obj1, fieldSpec) { + if (fieldSpec.func) { + return fieldSpec.func(obj0, obj1); + } + return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field]) + * (fieldSpec.order || 1); +} +function flexibleCompare(a, b) { + if (!a && !b) { + return 0; + } + if (b == null) { + return -1; + } + if (a == null) { + return 1; + } + if (typeof a === 'string' || typeof b === 'string') { + return String(a).localeCompare(String(b)); + } + return a - b; +} +/* String Utilities +----------------------------------------------------------------------------------------------------------------------*/ +function capitaliseFirstLetter(str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} +function padStart(val, len) { + var s = String(val); + return '000'.substr(0, len - s.length) + s; +} +/* Number Utilities +----------------------------------------------------------------------------------------------------------------------*/ +function compareNumbers(a, b) { + return a - b; +} +function isInt(n) { + return n % 1 === 0; +} +/* Weird Utilities +----------------------------------------------------------------------------------------------------------------------*/ +function applyAll(functions, thisObj, args) { + if (typeof functions === 'function') { // supplied a single function + functions = [functions]; + } + if (functions) { + var i = void 0; + var ret = void 0; + for (i = 0; i < functions.length; i++) { + ret = functions[i].apply(thisObj, args) || ret; + } + return ret; + } +} +function firstDefined() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + for (var i = 0; i < args.length; i++) { + if (args[i] !== undefined) { + return args[i]; + } + } +} +// Returns a function, that, as long as it continues to be invoked, will not +// be triggered. The function will be called after it stops being called for +// N milliseconds. If `immediate` is passed, trigger the function on the +// leading edge, instead of the trailing. +// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714 +function debounce(func, wait) { + var timeout; + var args; + var context; + var timestamp; + var result; + var later = function () { + var last = new Date().valueOf() - timestamp; + if (last < wait) { + timeout = setTimeout(later, wait - last); + } + else { + timeout = null; + result = func.apply(context, args); + context = args = null; + } + }; + return function () { + context = this; + args = arguments; + timestamp = new Date().valueOf(); + if (!timeout) { + timeout = setTimeout(later, wait); + } + return result; + }; +} +// Number and Boolean are only types that defaults or not computed for +// TODO: write more comments +function refineProps(rawProps, processors, defaults, leftoverProps) { + if (defaults === void 0) { defaults = {}; } + var refined = {}; + for (var key in processors) { + var processor = processors[key]; + if (rawProps[key] !== undefined) { + // found + if (processor === Function) { + refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null; + } + else if (processor) { // a refining function? + refined[key] = processor(rawProps[key]); + } + else { + refined[key] = rawProps[key]; + } + } + else if (defaults[key] !== undefined) { + // there's an explicit default + refined[key] = defaults[key]; + } + else { + // must compute a default + if (processor === String) { + refined[key] = ''; // empty string is default for String + } + else if (!processor || processor === Number || processor === Boolean || processor === Function) { + refined[key] = null; // assign null for other non-custom processor funcs + } + else { + refined[key] = processor(null); // run the custom processor func + } + } + } + if (leftoverProps) { + for (var key in rawProps) { + if (processors[key] === undefined) { + leftoverProps[key] = rawProps[key]; + } + } + } + return refined; +} +/* Date stuff that doesn't belong in datelib core +----------------------------------------------------------------------------------------------------------------------*/ +// given a timed range, computes an all-day range that has the same exact duration, +// but whose start time is aligned with the start of the day. +function computeAlignedDayRange(timedRange) { + var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1; + var start = startOfDay(timedRange.start); + var end = addDays(start, dayCnt); + return { start: start, end: end }; +} +// given a timed range, computes an all-day range based on how for the end date bleeds into the next day +// TODO: give nextDayThreshold a default arg +function computeVisibleDayRange(timedRange, nextDayThreshold) { + if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); } + var startDay = null; + var endDay = null; + if (timedRange.end) { + endDay = startOfDay(timedRange.end); + var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay` + // If the end time is actually inclusively part of the next day and is equal to or + // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`. + // Otherwise, leaving it as inclusive will cause it to exclude `endDay`. + if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) { + endDay = addDays(endDay, 1); + } + } + if (timedRange.start) { + startDay = startOfDay(timedRange.start); // the beginning of the day the range starts + // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day. + if (endDay && endDay <= startDay) { + endDay = addDays(startDay, 1); + } + } + return { start: startDay, end: endDay }; +} +// spans from one day into another? +function isMultiDayRange(range) { + var visibleRange = computeVisibleDayRange(range); + return diffDays(visibleRange.start, visibleRange.end) > 1; +} +function diffDates(date0, date1, dateEnv, largeUnit) { + if (largeUnit === 'year') { + return createDuration(dateEnv.diffWholeYears(date0, date1), 'year'); + } + else if (largeUnit === 'month') { + return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month'); + } + else { + return diffDayAndTime(date0, date1); // returns a duration + } +} + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function parseRecurring(eventInput, allDayDefault, dateEnv, recurringTypes, leftovers) { + for (var i = 0; i < recurringTypes.length; i++) { + var localLeftovers = {}; + var parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv); + if (parsed) { + var allDay = localLeftovers.allDay; + delete localLeftovers.allDay; // remove from leftovers + if (allDay == null) { + allDay = allDayDefault; + if (allDay == null) { + allDay = parsed.allDayGuess; + if (allDay == null) { + allDay = false; + } + } + } + __assign(leftovers, localLeftovers); + return { + allDay: allDay, + duration: parsed.duration, + typeData: parsed.typeData, + typeId: i + }; + } + } + return null; +} +/* +Event MUST have a recurringDef +*/ +function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) { + var typeDef = recurringTypes[eventDef.recurringDef.typeId]; + var markers = typeDef.expand(eventDef.recurringDef.typeData, { + start: dateEnv.subtract(framingRange.start, duration), + end: framingRange.end + }, dateEnv); + // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to + if (eventDef.allDay) { + markers = markers.map(startOfDay); + } + return markers; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; +// Merges an array of objects into a single object. +// The second argument allows for an array of property names who's object values will be merged together. +function mergeProps(propObjs, complexProps) { + var dest = {}; + var i; + var name; + var complexObjs; + var j; + var val; + var props; + if (complexProps) { + for (i = 0; i < complexProps.length; i++) { + name = complexProps[i]; + complexObjs = []; + // collect the trailing object values, stopping when a non-object is discovered + for (j = propObjs.length - 1; j >= 0; j--) { + val = propObjs[j][name]; + if (typeof val === 'object' && val) { // non-null object + complexObjs.unshift(val); + } + else if (val !== undefined) { + dest[name] = val; // if there were no objects, this value will be used + break; + } + } + // if the trailing values were objects, use the merged value + if (complexObjs.length) { + dest[name] = mergeProps(complexObjs); + } + } + } + // copy values into the destination, going from last to first + for (i = propObjs.length - 1; i >= 0; i--) { + props = propObjs[i]; + for (name in props) { + if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign + dest[name] = props[name]; + } + } + } + return dest; +} +function filterHash(hash, func) { + var filtered = {}; + for (var key in hash) { + if (func(hash[key], key)) { + filtered[key] = hash[key]; + } + } + return filtered; +} +function mapHash(hash, func) { + var newHash = {}; + for (var key in hash) { + newHash[key] = func(hash[key], key); + } + return newHash; +} +function arrayToHash(a) { + var hash = {}; + for (var _i = 0, a_1 = a; _i < a_1.length; _i++) { + var item = a_1[_i]; + hash[item] = true; + } + return hash; +} +function hashValuesToArray(obj) { + var a = []; + for (var key in obj) { + a.push(obj[key]); + } + return a; +} +function isPropsEqual(obj0, obj1) { + for (var key in obj0) { + if (hasOwnProperty.call(obj0, key)) { + if (!(key in obj1)) { + return false; + } + } + } + for (var key in obj1) { + if (hasOwnProperty.call(obj1, key)) { + if (obj0[key] !== obj1[key]) { + return false; + } + } + } + return true; +} + +function parseEvents(rawEvents, sourceId, calendar, allowOpenRange) { + var eventStore = createEmptyEventStore(); + for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) { + var rawEvent = rawEvents_1[_i]; + var tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange); + if (tuple) { + eventTupleToStore(tuple, eventStore); + } + } + return eventStore; +} +function eventTupleToStore(tuple, eventStore) { + if (eventStore === void 0) { eventStore = createEmptyEventStore(); } + eventStore.defs[tuple.def.defId] = tuple.def; + if (tuple.instance) { + eventStore.instances[tuple.instance.instanceId] = tuple.instance; + } + return eventStore; +} +function expandRecurring(eventStore, framingRange, calendar) { + var dateEnv = calendar.dateEnv; + var defs = eventStore.defs, instances = eventStore.instances; + // remove existing recurring instances + instances = filterHash(instances, function (instance) { + return !defs[instance.defId].recurringDef; + }); + for (var defId in defs) { + var def = defs[defId]; + if (def.recurringDef) { + var duration = def.recurringDef.duration; + if (!duration) { + duration = def.allDay ? + calendar.defaultAllDayEventDuration : + calendar.defaultTimedEventDuration; + } + var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes); + for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) { + var start = starts_1[_i]; + var instance = createEventInstance(defId, { + start: start, + end: dateEnv.add(start, duration) + }); + instances[instance.instanceId] = instance; + } + } + } + return { defs: defs, instances: instances }; +} +// retrieves events that have the same groupId as the instance specified by `instanceId` +// or they are the same as the instance. +// why might instanceId not be in the store? an event from another calendar? +function getRelevantEvents(eventStore, instanceId) { + var instance = eventStore.instances[instanceId]; + if (instance) { + var def_1 = eventStore.defs[instance.defId]; + // get events/instances with same group + var newStore = filterEventStoreDefs(eventStore, function (lookDef) { + return isEventDefsGrouped(def_1, lookDef); + }); + // add the original + // TODO: wish we could use eventTupleToStore or something like it + newStore.defs[def_1.defId] = def_1; + newStore.instances[instance.instanceId] = instance; + return newStore; + } + return createEmptyEventStore(); +} +function isEventDefsGrouped(def0, def1) { + return Boolean(def0.groupId && def0.groupId === def1.groupId); +} +function transformRawEvents(rawEvents, eventSource, calendar) { + var calEachTransform = calendar.opt('eventDataTransform'); + var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null; + if (sourceEachTransform) { + rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform); + } + if (calEachTransform) { + rawEvents = transformEachRawEvent(rawEvents, calEachTransform); + } + return rawEvents; +} +function transformEachRawEvent(rawEvents, func) { + var refinedEvents; + if (!func) { + refinedEvents = rawEvents; + } + else { + refinedEvents = []; + for (var _i = 0, rawEvents_2 = rawEvents; _i < rawEvents_2.length; _i++) { + var rawEvent = rawEvents_2[_i]; + var refinedEvent = func(rawEvent); + if (refinedEvent) { + refinedEvents.push(refinedEvent); + } + else if (refinedEvent == null) { + refinedEvents.push(rawEvent); + } // if a different falsy value, do nothing + } + } + return refinedEvents; +} +function createEmptyEventStore() { + return { defs: {}, instances: {} }; +} +function mergeEventStores(store0, store1) { + return { + defs: __assign({}, store0.defs, store1.defs), + instances: __assign({}, store0.instances, store1.instances) + }; +} +function filterEventStoreDefs(eventStore, filterFunc) { + var defs = filterHash(eventStore.defs, filterFunc); + var instances = filterHash(eventStore.instances, function (instance) { + return defs[instance.defId]; // still exists? + }); + return { defs: defs, instances: instances }; +} + +function parseRange(input, dateEnv) { + var start = null; + var end = null; + if (input.start) { + start = dateEnv.createMarker(input.start); + } + if (input.end) { + end = dateEnv.createMarker(input.end); + } + if (!start && !end) { + return null; + } + if (start && end && end < start) { + return null; + } + return { start: start, end: end }; +} +// SIDE-EFFECT: will mutate ranges. +// Will return a new array result. +function invertRanges(ranges, constraintRange) { + var invertedRanges = []; + var start = constraintRange.start; // the end of the previous range. the start of the new range + var i; + var dateRange; + // ranges need to be in order. required for our date-walking algorithm + ranges.sort(compareRanges); + for (i = 0; i < ranges.length; i++) { + dateRange = ranges[i]; + // add the span of time before the event (if there is any) + if (dateRange.start > start) { // compare millisecond time (skip any ambig logic) + invertedRanges.push({ start: start, end: dateRange.start }); + } + if (dateRange.end > start) { + start = dateRange.end; + } + } + // add the span of time after the last event (if there is any) + if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic) + invertedRanges.push({ start: start, end: constraintRange.end }); + } + return invertedRanges; +} +function compareRanges(range0, range1) { + return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first +} +function intersectRanges(range0, range1) { + var start = range0.start; + var end = range0.end; + var newRange = null; + if (range1.start !== null) { + if (start === null) { + start = range1.start; + } + else { + start = new Date(Math.max(start.valueOf(), range1.start.valueOf())); + } + } + if (range1.end != null) { + if (end === null) { + end = range1.end; + } + else { + end = new Date(Math.min(end.valueOf(), range1.end.valueOf())); + } + } + if (start === null || end === null || start < end) { + newRange = { start: start, end: end }; + } + return newRange; +} +function rangesEqual(range0, range1) { + return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) && + (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf()); +} +function rangesIntersect(range0, range1) { + return (range0.end === null || range1.start === null || range0.end > range1.start) && + (range0.start === null || range1.end === null || range0.start < range1.end); +} +function rangeContainsRange(outerRange, innerRange) { + return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) && + (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end)); +} +function rangeContainsMarker(range, date) { + return (range.start === null || date >= range.start) && + (range.end === null || date < range.end); +} +// If the given date is not within the given range, move it inside. +// (If it's past the end, make it one millisecond before the end). +function constrainMarkerToRange(date, range) { + if (range.start != null && date < range.start) { + return range.start; + } + if (range.end != null && date >= range.end) { + return new Date(range.end.valueOf() - 1); + } + return date; +} + +function removeExact(array, exactVal) { + var removeCnt = 0; + var i = 0; + while (i < array.length) { + if (array[i] === exactVal) { + array.splice(i, 1); + removeCnt++; + } + else { + i++; + } + } + return removeCnt; +} +function isArraysEqual(a0, a1) { + var len = a0.length; + var i; + if (len !== a1.length) { // not array? or not same length? + return false; + } + for (i = 0; i < len; i++) { + if (a0[i] !== a1[i]) { + return false; + } + } + return true; +} + +function memoize(workerFunc) { + var args; + var res; + return function () { + if (!args || !isArraysEqual(args, arguments)) { + args = arguments; + res = workerFunc.apply(this, arguments); + } + return res; + }; +} +/* +always executes the workerFunc, but if the result is equal to the previous result, +return the previous result instead. +*/ +function memoizeOutput(workerFunc, equalityFunc) { + var cachedRes = null; + return function () { + var newRes = workerFunc.apply(this, arguments); + if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) { + cachedRes = newRes; + } + return cachedRes; + }; +} + +var EXTENDED_SETTINGS_AND_SEVERITIES = { + week: 3, + separator: 0, + omitZeroMinute: 0, + meridiem: 0, + omitCommas: 0 +}; +var STANDARD_DATE_PROP_SEVERITIES = { + timeZoneName: 7, + era: 6, + year: 5, + month: 4, + day: 2, + weekday: 2, + hour: 1, + minute: 1, + second: 1 +}; +var MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too +var COMMA_RE = /,/g; // we need re for globalness +var MULTI_SPACE_RE = /\s+/g; +var LTR_RE = /\u200e/g; // control character +var UTC_RE = /UTC|GMT/; +var NativeFormatter = /** @class */ (function () { + function NativeFormatter(formatSettings) { + var standardDateProps = {}; + var extendedSettings = {}; + var severity = 0; + for (var name_1 in formatSettings) { + if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) { + extendedSettings[name_1] = formatSettings[name_1]; + severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity); + } + else { + standardDateProps[name_1] = formatSettings[name_1]; + if (name_1 in STANDARD_DATE_PROP_SEVERITIES) { + severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity); + } + } + } + this.standardDateProps = standardDateProps; + this.extendedSettings = extendedSettings; + this.severity = severity; + this.buildFormattingFunc = memoize(buildFormattingFunc); + } + NativeFormatter.prototype.format = function (date, context) { + return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date); + }; + NativeFormatter.prototype.formatRange = function (start, end, context) { + var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings; + var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem); + if (!diffSeverity) { + return this.format(start, context); + } + var biggestUnitForPartial = diffSeverity; + if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time + (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') && + (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') && + (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) { + biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time + } + var full0 = this.format(start, context); + var full1 = this.format(end, context); + if (full0 === full1) { + return full0; + } + var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial); + var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context); + var partial0 = partialFormattingFunc(start); + var partial1 = partialFormattingFunc(end); + var insertion = findCommonInsertion(full0, partial0, full1, partial1); + var separator = extendedSettings.separator || ''; + if (insertion) { + return insertion.before + partial0 + separator + partial1 + insertion.after; + } + return full0 + separator + full1; + }; + NativeFormatter.prototype.getLargestUnit = function () { + switch (this.severity) { + case 7: + case 6: + case 5: + return 'year'; + case 4: + return 'month'; + case 3: + return 'week'; + default: + return 'day'; + } + }; + return NativeFormatter; +}()); +function buildFormattingFunc(standardDateProps, extendedSettings, context) { + var standardDatePropCnt = Object.keys(standardDateProps).length; + if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') { + return function (date) { + return formatTimeZoneOffset(date.timeZoneOffset); + }; + } + if (standardDatePropCnt === 0 && extendedSettings.week) { + return function (date) { + return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekLabel, context.locale, extendedSettings.week); + }; + } + return buildNativeFormattingFunc(standardDateProps, extendedSettings, context); +} +function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) { + standardDateProps = __assign({}, standardDateProps); // copy + extendedSettings = __assign({}, extendedSettings); // copy + sanitizeSettings(standardDateProps, extendedSettings); + standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers + var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps); + var zeroFormat; // needed? + if (extendedSettings.omitZeroMinute) { + var zeroProps = __assign({}, standardDateProps); + delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings + zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps); + } + return function (date) { + var marker = date.marker; + var format; + if (zeroFormat && !marker.getUTCMinutes()) { + format = zeroFormat; + } + else { + format = normalFormat; + } + var s = format.format(marker); + return postProcess(s, date, standardDateProps, extendedSettings, context); + }; +} +function sanitizeSettings(standardDateProps, extendedSettings) { + // deal with a browser inconsistency where formatting the timezone + // requires that the hour/minute be present. + if (standardDateProps.timeZoneName) { + if (!standardDateProps.hour) { + standardDateProps.hour = '2-digit'; + } + if (!standardDateProps.minute) { + standardDateProps.minute = '2-digit'; + } + } + // only support short timezone names + if (standardDateProps.timeZoneName === 'long') { + standardDateProps.timeZoneName = 'short'; + } + // if requesting to display seconds, MUST display minutes + if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) { + delete extendedSettings.omitZeroMinute; + } +} +function postProcess(s, date, standardDateProps, extendedSettings, context) { + s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes + if (standardDateProps.timeZoneName === 'short') { + s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ? + 'UTC' : // important to normalize for IE, which does "GMT" + formatTimeZoneOffset(date.timeZoneOffset)); + } + if (extendedSettings.omitCommas) { + s = s.replace(COMMA_RE, '').trim(); + } + if (extendedSettings.omitZeroMinute) { + s = s.replace(':00', ''); // zeroFormat doesn't always achieve this + } + // ^ do anything that might create adjacent spaces before this point, + // because MERIDIEM_RE likes to eat up loading spaces + if (extendedSettings.meridiem === false) { + s = s.replace(MERIDIEM_RE, '').trim(); + } + else if (extendedSettings.meridiem === 'narrow') { // a/p + s = s.replace(MERIDIEM_RE, function (m0, m1) { + return m1.toLocaleLowerCase(); + }); + } + else if (extendedSettings.meridiem === 'short') { // am/pm + s = s.replace(MERIDIEM_RE, function (m0, m1) { + return m1.toLocaleLowerCase() + 'm'; + }); + } + else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase + s = s.replace(MERIDIEM_RE, function (m0) { + return m0.toLocaleLowerCase(); + }); + } + s = s.replace(MULTI_SPACE_RE, ' '); + s = s.trim(); + return s; +} +function injectTzoStr(s, tzoStr) { + var replaced = false; + s = s.replace(UTC_RE, function () { + replaced = true; + return tzoStr; + }); + // IE11 doesn't include UTC/GMT in the original string, so append to end + if (!replaced) { + s += ' ' + tzoStr; + } + return s; +} +function formatWeekNumber(num, weekLabel, locale, display) { + var parts = []; + if (display === 'narrow') { + parts.push(weekLabel); + } + else if (display === 'short') { + parts.push(weekLabel, ' '); + } + // otherwise, considered 'numeric' + parts.push(locale.simpleNumberFormat.format(num)); + if (locale.options.isRtl) { // TODO: use control characters instead? + parts.reverse(); + } + return parts.join(''); +} +// Range Formatting Utils +// 0 = exactly the same +// 1 = different by time +// and bigger +function computeMarkerDiffSeverity(d0, d1, ca) { + if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) { + return 5; + } + if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) { + return 4; + } + if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) { + return 2; + } + if (timeAsMs(d0) !== timeAsMs(d1)) { + return 1; + } + return 0; +} +function computePartialFormattingOptions(options, biggestUnit) { + var partialOptions = {}; + for (var name_2 in options) { + if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone) + STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) { + partialOptions[name_2] = options[name_2]; + } + } + return partialOptions; +} +function findCommonInsertion(full0, partial0, full1, partial1) { + var i0 = 0; + while (i0 < full0.length) { + var found0 = full0.indexOf(partial0, i0); + if (found0 === -1) { + break; + } + var before0 = full0.substr(0, found0); + i0 = found0 + partial0.length; + var after0 = full0.substr(i0); + var i1 = 0; + while (i1 < full1.length) { + var found1 = full1.indexOf(partial1, i1); + if (found1 === -1) { + break; + } + var before1 = full1.substr(0, found1); + i1 = found1 + partial1.length; + var after1 = full1.substr(i1); + if (before0 === before1 && after0 === after1) { + return { + before: before0, + after: after0 + }; + } + } + } + return null; +} + +/* +TODO: fix the terminology of "formatter" vs "formatting func" +*/ +/* +At the time of instantiation, this object does not know which cmd-formatting system it will use. +It receives this at the time of formatting, as a setting. +*/ +var CmdFormatter = /** @class */ (function () { + function CmdFormatter(cmdStr, separator) { + this.cmdStr = cmdStr; + this.separator = separator; + } + CmdFormatter.prototype.format = function (date, context) { + return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator)); + }; + CmdFormatter.prototype.formatRange = function (start, end, context) { + return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator)); + }; + return CmdFormatter; +}()); + +var FuncFormatter = /** @class */ (function () { + function FuncFormatter(func) { + this.func = func; + } + FuncFormatter.prototype.format = function (date, context) { + return this.func(createVerboseFormattingArg(date, null, context)); + }; + FuncFormatter.prototype.formatRange = function (start, end, context) { + return this.func(createVerboseFormattingArg(start, end, context)); + }; + return FuncFormatter; +}()); + +// Formatter Object Creation +function createFormatter(input, defaultSeparator) { + if (typeof input === 'object' && input) { // non-null object + if (typeof defaultSeparator === 'string') { + input = __assign({ separator: defaultSeparator }, input); + } + return new NativeFormatter(input); + } + else if (typeof input === 'string') { + return new CmdFormatter(input, defaultSeparator); + } + else if (typeof input === 'function') { + return new FuncFormatter(input); + } +} +// String Utils +// timeZoneOffset is in minutes +function buildIsoString(marker, timeZoneOffset, stripZeroTime) { + if (stripZeroTime === void 0) { stripZeroTime = false; } + var s = marker.toISOString(); + s = s.replace('.000', ''); + if (stripZeroTime) { + s = s.replace('T00:00:00Z', ''); + } + if (s.length > 10) { // time part wasn't stripped, can add timezone info + if (timeZoneOffset == null) { + s = s.replace('Z', ''); + } + else if (timeZoneOffset !== 0) { + s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true)); + } + // otherwise, its UTC-0 and we want to keep the Z + } + return s; +} +function formatIsoTimeString(marker) { + return padStart(marker.getUTCHours(), 2) + ':' + + padStart(marker.getUTCMinutes(), 2) + ':' + + padStart(marker.getUTCSeconds(), 2); +} +function formatTimeZoneOffset(minutes, doIso) { + if (doIso === void 0) { doIso = false; } + var sign = minutes < 0 ? '-' : '+'; + var abs = Math.abs(minutes); + var hours = Math.floor(abs / 60); + var mins = Math.round(abs % 60); + if (doIso) { + return sign + padStart(hours, 2) + ':' + padStart(mins, 2); + } + else { + return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : ''); + } +} +// Arg Utils +function createVerboseFormattingArg(start, end, context, separator) { + var startInfo = expandZonedMarker(start, context.calendarSystem); + var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null; + return { + date: startInfo, + start: startInfo, + end: endInfo, + timeZone: context.timeZone, + localeCodes: context.locale.codes, + separator: separator + }; +} +function expandZonedMarker(dateInfo, calendarSystem) { + var a = calendarSystem.markerToArray(dateInfo.marker); + return { + marker: dateInfo.marker, + timeZoneOffset: dateInfo.timeZoneOffset, + array: a, + year: a[0], + month: a[1], + day: a[2], + hour: a[3], + minute: a[4], + second: a[5], + millisecond: a[6] + }; +} + +var EventSourceApi = /** @class */ (function () { + function EventSourceApi(calendar, internalEventSource) { + this.calendar = calendar; + this.internalEventSource = internalEventSource; + } + EventSourceApi.prototype.remove = function () { + this.calendar.dispatch({ + type: 'REMOVE_EVENT_SOURCE', + sourceId: this.internalEventSource.sourceId + }); + }; + EventSourceApi.prototype.refetch = function () { + this.calendar.dispatch({ + type: 'FETCH_EVENT_SOURCES', + sourceIds: [this.internalEventSource.sourceId] + }); + }; + Object.defineProperty(EventSourceApi.prototype, "id", { + get: function () { + return this.internalEventSource.publicId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventSourceApi.prototype, "url", { + // only relevant to json-feed event sources + get: function () { + return this.internalEventSource.meta.url; + }, + enumerable: true, + configurable: true + }); + return EventSourceApi; +}()); + +var EventApi = /** @class */ (function () { + function EventApi(calendar, def, instance) { + this._calendar = calendar; + this._def = def; + this._instance = instance || null; + } + /* + TODO: make event struct more responsible for this + */ + EventApi.prototype.setProp = function (name, val) { + var _a, _b; + if (name in DATE_PROPS) ; + else if (name in NON_DATE_PROPS) { + if (typeof NON_DATE_PROPS[name] === 'function') { + val = NON_DATE_PROPS[name](val); + } + this.mutate({ + standardProps: (_a = {}, _a[name] = val, _a) + }); + } + else if (name in UNSCOPED_EVENT_UI_PROPS) { + var ui = void 0; + if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') { + val = UNSCOPED_EVENT_UI_PROPS[name](val); + } + if (name === 'color') { + ui = { backgroundColor: val, borderColor: val }; + } + else if (name === 'editable') { + ui = { startEditable: val, durationEditable: val }; + } + else { + ui = (_b = {}, _b[name] = val, _b); + } + this.mutate({ + standardProps: { ui: ui } + }); + } + }; + EventApi.prototype.setExtendedProp = function (name, val) { + var _a; + this.mutate({ + extendedProps: (_a = {}, _a[name] = val, _a) + }); + }; + EventApi.prototype.setStart = function (startInput, options) { + if (options === void 0) { options = {}; } + var dateEnv = this._calendar.dateEnv; + var start = dateEnv.createMarker(startInput); + if (start && this._instance) { // TODO: warning if parsed bad + var instanceRange = this._instance.range; + var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!? + if (options.maintainDuration) { + this.mutate({ datesDelta: startDelta }); + } + else { + this.mutate({ startDelta: startDelta }); + } + } + }; + EventApi.prototype.setEnd = function (endInput, options) { + if (options === void 0) { options = {}; } + var dateEnv = this._calendar.dateEnv; + var end; + if (endInput != null) { + end = dateEnv.createMarker(endInput); + if (!end) { + return; // TODO: warning if parsed bad + } + } + if (this._instance) { + if (end) { + var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity); + this.mutate({ endDelta: endDelta }); + } + else { + this.mutate({ standardProps: { hasEnd: false } }); + } + } + }; + EventApi.prototype.setDates = function (startInput, endInput, options) { + if (options === void 0) { options = {}; } + var dateEnv = this._calendar.dateEnv; + var standardProps = { allDay: options.allDay }; + var start = dateEnv.createMarker(startInput); + var end; + if (!start) { + return; // TODO: warning if parsed bad + } + if (endInput != null) { + end = dateEnv.createMarker(endInput); + if (!end) { // TODO: warning if parsed bad + return; + } + } + if (this._instance) { + var instanceRange = this._instance.range; + // when computing the diff for an event being converted to all-day, + // compute diff off of the all-day values the way event-mutation does. + if (options.allDay === true) { + instanceRange = computeAlignedDayRange(instanceRange); + } + var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); + if (end) { + var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity); + if (durationsEqual(startDelta, endDelta)) { + this.mutate({ datesDelta: startDelta, standardProps: standardProps }); + } + else { + this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps }); + } + } + else { // means "clear the end" + standardProps.hasEnd = false; + this.mutate({ datesDelta: startDelta, standardProps: standardProps }); + } + } + }; + EventApi.prototype.moveStart = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // TODO: warning if parsed bad + this.mutate({ startDelta: delta }); + } + }; + EventApi.prototype.moveEnd = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // TODO: warning if parsed bad + this.mutate({ endDelta: delta }); + } + }; + EventApi.prototype.moveDates = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // TODO: warning if parsed bad + this.mutate({ datesDelta: delta }); + } + }; + EventApi.prototype.setAllDay = function (allDay, options) { + if (options === void 0) { options = {}; } + var standardProps = { allDay: allDay }; + var maintainDuration = options.maintainDuration; + if (maintainDuration == null) { + maintainDuration = this._calendar.opt('allDayMaintainDuration'); + } + if (this._def.allDay !== allDay) { + standardProps.hasEnd = maintainDuration; + } + this.mutate({ standardProps: standardProps }); + }; + EventApi.prototype.formatRange = function (formatInput) { + var dateEnv = this._calendar.dateEnv; + var instance = this._instance; + var formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator')); + if (this._def.hasEnd) { + return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, { + forcedStartTzo: instance.forcedStartTzo, + forcedEndTzo: instance.forcedEndTzo + }); + } + else { + return dateEnv.format(instance.range.start, formatter, { + forcedTzo: instance.forcedStartTzo + }); + } + }; + EventApi.prototype.mutate = function (mutation) { + var def = this._def; + var instance = this._instance; + if (instance) { + this._calendar.dispatch({ + type: 'MUTATE_EVENTS', + instanceId: instance.instanceId, + mutation: mutation, + fromApi: true + }); + var eventStore = this._calendar.state.eventStore; + this._def = eventStore.defs[def.defId]; + this._instance = eventStore.instances[instance.instanceId]; + } + }; + EventApi.prototype.remove = function () { + this._calendar.dispatch({ + type: 'REMOVE_EVENT_DEF', + defId: this._def.defId + }); + }; + Object.defineProperty(EventApi.prototype, "source", { + get: function () { + var sourceId = this._def.sourceId; + if (sourceId) { + return new EventSourceApi(this._calendar, this._calendar.state.eventSources[sourceId]); + } + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "start", { + get: function () { + return this._instance ? + this._calendar.dateEnv.toDate(this._instance.range.start) : + null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "end", { + get: function () { + return (this._instance && this._def.hasEnd) ? + this._calendar.dateEnv.toDate(this._instance.range.end) : + null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "id", { + // computable props that all access the def + // TODO: find a TypeScript-compatible way to do this at scale + get: function () { return this._def.publicId; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "groupId", { + get: function () { return this._def.groupId; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "allDay", { + get: function () { return this._def.allDay; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "title", { + get: function () { return this._def.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "url", { + get: function () { return this._def.url; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "rendering", { + get: function () { return this._def.rendering; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "startEditable", { + get: function () { return this._def.ui.startEditable; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "durationEditable", { + get: function () { return this._def.ui.durationEditable; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "constraint", { + get: function () { return this._def.ui.constraints[0] || null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "overlap", { + get: function () { return this._def.ui.overlap; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "allow", { + get: function () { return this._def.ui.allows[0] || null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "backgroundColor", { + get: function () { return this._def.ui.backgroundColor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "borderColor", { + get: function () { return this._def.ui.borderColor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "textColor", { + get: function () { return this._def.ui.textColor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "classNames", { + // NOTE: user can't modify these because Object.freeze was called in event-def parsing + get: function () { return this._def.ui.classNames; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "extendedProps", { + get: function () { return this._def.extendedProps; }, + enumerable: true, + configurable: true + }); + return EventApi; +}()); + +/* +Specifying nextDayThreshold signals that all-day ranges should be sliced. +*/ +function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) { + var inverseBgByGroupId = {}; + var inverseBgByDefId = {}; + var defByGroupId = {}; + var bgRanges = []; + var fgRanges = []; + var eventUis = compileEventUis(eventStore.defs, eventUiBases); + for (var defId in eventStore.defs) { + var def = eventStore.defs[defId]; + if (def.rendering === 'inverse-background') { + if (def.groupId) { + inverseBgByGroupId[def.groupId] = []; + if (!defByGroupId[def.groupId]) { + defByGroupId[def.groupId] = def; + } + } + else { + inverseBgByDefId[defId] = []; + } + } + } + for (var instanceId in eventStore.instances) { + var instance = eventStore.instances[instanceId]; + var def = eventStore.defs[instance.defId]; + var ui = eventUis[def.defId]; + var origRange = instance.range; + var normalRange = (!def.allDay && nextDayThreshold) ? + computeVisibleDayRange(origRange, nextDayThreshold) : + origRange; + var slicedRange = intersectRanges(normalRange, framingRange); + if (slicedRange) { + if (def.rendering === 'inverse-background') { + if (def.groupId) { + inverseBgByGroupId[def.groupId].push(slicedRange); + } + else { + inverseBgByDefId[instance.defId].push(slicedRange); + } + } + else { + (def.rendering === 'background' ? bgRanges : fgRanges).push({ + def: def, + ui: ui, + instance: instance, + range: slicedRange, + isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(), + isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf() + }); + } + } + } + for (var groupId in inverseBgByGroupId) { // BY GROUP + var ranges = inverseBgByGroupId[groupId]; + var invertedRanges = invertRanges(ranges, framingRange); + for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) { + var invertedRange = invertedRanges_1[_i]; + var def = defByGroupId[groupId]; + var ui = eventUis[def.defId]; + bgRanges.push({ + def: def, + ui: ui, + instance: null, + range: invertedRange, + isStart: false, + isEnd: false + }); + } + } + for (var defId in inverseBgByDefId) { + var ranges = inverseBgByDefId[defId]; + var invertedRanges = invertRanges(ranges, framingRange); + for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) { + var invertedRange = invertedRanges_2[_a]; + bgRanges.push({ + def: eventStore.defs[defId], + ui: eventUis[defId], + instance: null, + range: invertedRange, + isStart: false, + isEnd: false + }); + } + } + return { bg: bgRanges, fg: fgRanges }; +} +function hasBgRendering(def) { + return def.rendering === 'background' || def.rendering === 'inverse-background'; +} +function filterSegsViaEls(context, segs, isMirror) { + var calendar = context.calendar, view = context.view; + if (calendar.hasPublicHandlers('eventRender')) { + segs = segs.filter(function (seg) { + var custom = calendar.publiclyTrigger('eventRender', [ + { + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + isMirror: isMirror, + isStart: seg.isStart, + isEnd: seg.isEnd, + // TODO: include seg.range once all components consistently generate it + el: seg.el, + view: view + } + ]); + if (custom === false) { // means don't render at all + return false; + } + else if (custom && custom !== true) { + seg.el = custom; + } + return true; + }); + } + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + setElSeg(seg.el, seg); + } + return segs; +} +function setElSeg(el, seg) { + el.fcSeg = seg; +} +function getElSeg(el) { + return el.fcSeg || null; +} +// event ui computation +function compileEventUis(eventDefs, eventUiBases) { + return mapHash(eventDefs, function (eventDef) { + return compileEventUi(eventDef, eventUiBases); + }); +} +function compileEventUi(eventDef, eventUiBases) { + var uis = []; + if (eventUiBases['']) { + uis.push(eventUiBases['']); + } + if (eventUiBases[eventDef.defId]) { + uis.push(eventUiBases[eventDef.defId]); + } + uis.push(eventDef.ui); + return combineEventUis(uis); +} +// triggers +function triggerRenderedSegs(context, segs, isMirrors) { + var calendar = context.calendar, view = context.view; + if (calendar.hasPublicHandlers('eventPositioned')) { + for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) { + var seg = segs_2[_i]; + calendar.publiclyTriggerAfterSizing('eventPositioned', [ + { + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + isMirror: isMirrors, + isStart: seg.isStart, + isEnd: seg.isEnd, + el: seg.el, + view: view + } + ]); + } + } + if (!calendar.state.loadingLevel) { // avoid initial empty state while pending + calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once + } +} +function triggerWillRemoveSegs(context, segs, isMirrors) { + var calendar = context.calendar, view = context.view; + for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) { + var seg = segs_3[_i]; + calendar.trigger('eventElRemove', seg.el); + } + if (calendar.hasPublicHandlers('eventDestroy')) { + for (var _a = 0, segs_4 = segs; _a < segs_4.length; _a++) { + var seg = segs_4[_a]; + calendar.publiclyTrigger('eventDestroy', [ + { + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + isMirror: isMirrors, + el: seg.el, + view: view + } + ]); + } + } +} +// is-interactable +function computeEventDraggable(context, eventDef, eventUi) { + var calendar = context.calendar, view = context.view; + var transformers = calendar.pluginSystem.hooks.isDraggableTransformers; + var val = eventUi.startEditable; + for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) { + var transformer = transformers_1[_i]; + val = transformer(val, eventDef, eventUi, view); + } + return val; +} +function computeEventStartResizable(context, eventDef, eventUi) { + return eventUi.durationEditable && context.options.eventResizableFromStart; +} +function computeEventEndResizable(context, eventDef, eventUi) { + return eventUi.durationEditable; +} + +// applies the mutation to ALL defs/instances within the event store +function applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) { + var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase); + var dest = createEmptyEventStore(); + for (var defId in eventStore.defs) { + var def = eventStore.defs[defId]; + dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar); + } + for (var instanceId in eventStore.instances) { + var instance = eventStore.instances[instanceId]; + var def = dest.defs[instance.defId]; // important to grab the newly modified def + dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar); + } + return dest; +} +function applyMutationToEventDef(eventDef, eventConfig, mutation, appliers, calendar) { + var standardProps = mutation.standardProps || {}; + // if hasEnd has not been specified, guess a good value based on deltas. + // if duration will change, there's no way the default duration will persist, + // and thus, we need to mark the event as having a real end + if (standardProps.hasEnd == null && + eventConfig.durationEditable && + (mutation.startDelta || mutation.endDelta)) { + standardProps.hasEnd = true; // TODO: is this mutation okay? + } + var copy = __assign({}, eventDef, standardProps, { ui: __assign({}, eventDef.ui, standardProps.ui) }); + if (mutation.extendedProps) { + copy.extendedProps = __assign({}, copy.extendedProps, mutation.extendedProps); + } + for (var _i = 0, appliers_1 = appliers; _i < appliers_1.length; _i++) { + var applier = appliers_1[_i]; + applier(copy, mutation, calendar); + } + if (!copy.hasEnd && calendar.opt('forceEventDuration')) { + copy.hasEnd = true; + } + return copy; +} +function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef +eventConfig, mutation, calendar) { + var dateEnv = calendar.dateEnv; + var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true; + var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false; + var copy = __assign({}, eventInstance); + if (forceAllDay) { + copy.range = computeAlignedDayRange(copy.range); + } + if (mutation.datesDelta && eventConfig.startEditable) { + copy.range = { + start: dateEnv.add(copy.range.start, mutation.datesDelta), + end: dateEnv.add(copy.range.end, mutation.datesDelta) + }; + } + if (mutation.startDelta && eventConfig.durationEditable) { + copy.range = { + start: dateEnv.add(copy.range.start, mutation.startDelta), + end: copy.range.end + }; + } + if (mutation.endDelta && eventConfig.durationEditable) { + copy.range = { + start: copy.range.start, + end: dateEnv.add(copy.range.end, mutation.endDelta) + }; + } + if (clearEnd) { + copy.range = { + start: copy.range.start, + end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start) + }; + } + // in case event was all-day but the supplied deltas were not + // better util for this? + if (eventDef.allDay) { + copy.range = { + start: startOfDay(copy.range.start), + end: startOfDay(copy.range.end) + }; + } + // handle invalid durations + if (copy.range.end < copy.range.start) { + copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start); + } + return copy; +} + +function reduceEventStore (eventStore, action, eventSources, dateProfile, calendar) { + switch (action.type) { + case 'RECEIVE_EVENTS': // raw + return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, calendar); + case 'ADD_EVENTS': // already parsed, but not expanded + return addEvent(eventStore, action.eventStore, // new ones + dateProfile ? dateProfile.activeRange : null, calendar); + case 'MERGE_EVENTS': // already parsed and expanded + return mergeEventStores(eventStore, action.eventStore); + case 'PREV': // TODO: how do we track all actions that affect dateProfile :( + case 'NEXT': + case 'SET_DATE': + case 'SET_VIEW_TYPE': + if (dateProfile) { + return expandRecurring(eventStore, dateProfile.activeRange, calendar); + } + else { + return eventStore; + } + case 'CHANGE_TIMEZONE': + return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv); + case 'MUTATE_EVENTS': + return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar); + case 'REMOVE_EVENT_INSTANCES': + return excludeInstances(eventStore, action.instances); + case 'REMOVE_EVENT_DEF': + return filterEventStoreDefs(eventStore, function (eventDef) { + return eventDef.defId !== action.defId; + }); + case 'REMOVE_EVENT_SOURCE': + return excludeEventsBySourceId(eventStore, action.sourceId); + case 'REMOVE_ALL_EVENT_SOURCES': + return filterEventStoreDefs(eventStore, function (eventDef) { + return !eventDef.sourceId; // only keep events with no source id + }); + case 'REMOVE_ALL_EVENTS': + return createEmptyEventStore(); + case 'RESET_EVENTS': + return { + defs: eventStore.defs, + instances: eventStore.instances + }; + default: + return eventStore; + } +} +function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, calendar) { + if (eventSource && // not already removed + fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources + ) { + var subset = parseEvents(transformRawEvents(rawEvents, eventSource, calendar), eventSource.sourceId, calendar); + if (fetchRange) { + subset = expandRecurring(subset, fetchRange, calendar); + } + return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset); + } + return eventStore; +} +function addEvent(eventStore, subset, expandRange, calendar) { + if (expandRange) { + subset = expandRecurring(subset, expandRange, calendar); + } + return mergeEventStores(eventStore, subset); +} +function rezoneDates(eventStore, oldDateEnv, newDateEnv) { + var defs = eventStore.defs; + var instances = mapHash(eventStore.instances, function (instance) { + var def = defs[instance.defId]; + if (def.allDay || def.recurringDef) { + return instance; // isn't dependent on timezone + } + else { + return __assign({}, instance, { range: { + start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)), + end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)) + }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo }); + } + }); + return { defs: defs, instances: instances }; +} +function applyMutationToRelated(eventStore, instanceId, mutation, fromApi, calendar) { + var relevant = getRelevantEvents(eventStore, instanceId); + var eventConfigBase = fromApi ? + { '': { + startEditable: true, + durationEditable: true, + constraints: [], + overlap: null, + allows: [], + backgroundColor: '', + borderColor: '', + textColor: '', + classNames: [] + } } : + calendar.eventUiBases; + relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar); + return mergeEventStores(eventStore, relevant); +} +function excludeEventsBySourceId(eventStore, sourceId) { + return filterEventStoreDefs(eventStore, function (eventDef) { + return eventDef.sourceId !== sourceId; + }); +} +// QUESTION: why not just return instances? do a general object-property-exclusion util +function excludeInstances(eventStore, removals) { + return { + defs: eventStore.defs, + instances: filterHash(eventStore.instances, function (instance) { + return !removals[instance.instanceId]; + }) + }; +} + +// high-level segmenting-aware tester functions +// ------------------------------------------------------------------------------------------------------------------------ +function isInteractionValid(interaction, calendar) { + return isNewPropsValid({ eventDrag: interaction }, calendar); // HACK: the eventDrag props is used for ALL interactions +} +function isDateSelectionValid(dateSelection, calendar) { + return isNewPropsValid({ dateSelection: dateSelection }, calendar); +} +function isNewPropsValid(newProps, calendar) { + var view = calendar.view; + var props = __assign({ businessHours: view ? view.props.businessHours : createEmptyEventStore(), dateSelection: '', eventStore: calendar.state.eventStore, eventUiBases: calendar.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps); + return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar); +} +function isPropsValid(state, calendar, dateSpanMeta, filterConfig) { + if (dateSpanMeta === void 0) { dateSpanMeta = {}; } + if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) { + return false; + } + if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) { + return false; + } + return true; +} +// Moving Event Validation +// ------------------------------------------------------------------------------------------------------------------------ +function isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig) { + var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions + var subjectEventStore = interaction.mutatedEvents; + var subjectDefs = subjectEventStore.defs; + var subjectInstances = subjectEventStore.instances; + var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ? + state.eventUiBases : + { '': calendar.selectionConfig } // if not a real event, validate as a selection + ); + if (filterConfig) { + subjectConfigs = mapHash(subjectConfigs, filterConfig); + } + var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too? + var otherDefs = otherEventStore.defs; + var otherInstances = otherEventStore.instances; + var otherConfigs = compileEventUis(otherDefs, state.eventUiBases); + for (var subjectInstanceId in subjectInstances) { + var subjectInstance = subjectInstances[subjectInstanceId]; + var subjectRange = subjectInstance.range; + var subjectConfig = subjectConfigs[subjectInstance.defId]; + var subjectDef = subjectDefs[subjectInstance.defId]; + // constraint + if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) { + return false; + } + // overlap + var overlapFunc = calendar.opt('eventOverlap'); + if (typeof overlapFunc !== 'function') { + overlapFunc = null; + } + for (var otherInstanceId in otherInstances) { + var otherInstance = otherInstances[otherInstanceId]; + // intersect! evaluate + if (rangesIntersect(subjectRange, otherInstance.range)) { + var otherOverlap = otherConfigs[otherInstance.defId].overlap; + // consider the other event's overlap. only do this if the subject event is a "real" event + if (otherOverlap === false && interaction.isEvent) { + return false; + } + if (subjectConfig.overlap === false) { + return false; + } + if (overlapFunc && !overlapFunc(new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event + new EventApi(calendar, subjectDef, subjectInstance) // moving event + )) { + return false; + } + } + } + // allow (a function) + var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state + for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) { + var subjectAllow = _a[_i]; + var subjectDateSpan = __assign({}, dateSpanMeta, { range: subjectInstance.range, allDay: subjectDef.allDay }); + var origDef = calendarEventStore.defs[subjectDef.defId]; + var origInstance = calendarEventStore.instances[subjectInstanceId]; + var eventApi = void 0; + if (origDef) { // was previously in the calendar + eventApi = new EventApi(calendar, origDef, origInstance); + } + else { // was an external event + eventApi = new EventApi(calendar, subjectDef); // no instance, because had no dates + } + if (!subjectAllow(calendar.buildDateSpanApi(subjectDateSpan), eventApi)) { + return false; + } + } + } + return true; +} +// Date Selection Validation +// ------------------------------------------------------------------------------------------------------------------------ +function isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig) { + var relevantEventStore = state.eventStore; + var relevantDefs = relevantEventStore.defs; + var relevantInstances = relevantEventStore.instances; + var selection = state.dateSelection; + var selectionRange = selection.range; + var selectionConfig = calendar.selectionConfig; + if (filterConfig) { + selectionConfig = filterConfig(selectionConfig); + } + // constraint + if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) { + return false; + } + // overlap + var overlapFunc = calendar.opt('selectOverlap'); + if (typeof overlapFunc !== 'function') { + overlapFunc = null; + } + for (var relevantInstanceId in relevantInstances) { + var relevantInstance = relevantInstances[relevantInstanceId]; + // intersect! evaluate + if (rangesIntersect(selectionRange, relevantInstance.range)) { + if (selectionConfig.overlap === false) { + return false; + } + if (overlapFunc && !overlapFunc(new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance))) { + return false; + } + } + } + // allow (a function) + for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) { + var selectionAllow = _a[_i]; + var fullDateSpan = __assign({}, dateSpanMeta, selection); + if (!selectionAllow(calendar.buildDateSpanApi(fullDateSpan), null)) { + return false; + } + } + return true; +} +// Constraint Utils +// ------------------------------------------------------------------------------------------------------------------------ +function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, calendar) { + for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) { + var constraint = constraints_1[_i]; + if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar), subjectRange)) { + return false; + } + } + return true; +} +function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours +otherEventStore, // for if constraint is an even group ID +businessHoursUnexpanded, // for if constraint is 'businessHours' +calendar // for expanding businesshours +) { + if (constraint === 'businessHours') { + return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, calendar)); + } + else if (typeof constraint === 'string') { // an group ID + return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) { + return eventDef.groupId === constraint; + })); + } + else if (typeof constraint === 'object' && constraint) { // non-null object + return eventStoreToRanges(expandRecurring(constraint, subjectRange, calendar)); + } + return []; // if it's false +} +// TODO: move to event-store file? +function eventStoreToRanges(eventStore) { + var instances = eventStore.instances; + var ranges = []; + for (var instanceId in instances) { + ranges.push(instances[instanceId].range); + } + return ranges; +} +// TODO: move to geom file? +function anyRangesContainRange(outerRanges, innerRange) { + for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) { + var outerRange = outerRanges_1[_i]; + if (rangeContainsRange(outerRange, innerRange)) { + return true; + } + } + return false; +} +// Parsing +// ------------------------------------------------------------------------------------------------------------------------ +function normalizeConstraint(input, calendar) { + if (Array.isArray(input)) { + return parseEvents(input, '', calendar, true); // allowOpenRange=true + } + else if (typeof input === 'object' && input) { // non-null object + return parseEvents([input], '', calendar, true); // allowOpenRange=true + } + else if (input != null) { + return String(input); + } + else { + return null; + } +} + +function htmlEscape(s) { + return (s + '').replace(/&/g, '&') + .replace(//g, '>') + .replace(/'/g, ''') + .replace(/"/g, '"') + .replace(/\n/g, '
'); +} +// Given a hash of CSS properties, returns a string of CSS. +// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values. +function cssToStr(cssProps) { + var statements = []; + for (var name_1 in cssProps) { + var val = cssProps[name_1]; + if (val != null && val !== '') { + statements.push(name_1 + ':' + val); + } + } + return statements.join(';'); +} +// Given an object hash of HTML attribute names to values, +// generates a string that can be injected between < > in HTML +function attrsToStr(attrs) { + var parts = []; + for (var name_2 in attrs) { + var val = attrs[name_2]; + if (val != null) { + parts.push(name_2 + '="' + htmlEscape(val) + '"'); + } + } + return parts.join(' '); +} +function parseClassName(raw) { + if (Array.isArray(raw)) { + return raw; + } + else if (typeof raw === 'string') { + return raw.split(/\s+/); + } + else { + return []; + } +} + +var UNSCOPED_EVENT_UI_PROPS = { + editable: Boolean, + startEditable: Boolean, + durationEditable: Boolean, + constraint: null, + overlap: null, + allow: null, + className: parseClassName, + classNames: parseClassName, + color: String, + backgroundColor: String, + borderColor: String, + textColor: String +}; +function processUnscopedUiProps(rawProps, calendar, leftovers) { + var props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers); + var constraint = normalizeConstraint(props.constraint, calendar); + return { + startEditable: props.startEditable != null ? props.startEditable : props.editable, + durationEditable: props.durationEditable != null ? props.durationEditable : props.editable, + constraints: constraint != null ? [constraint] : [], + overlap: props.overlap, + allows: props.allow != null ? [props.allow] : [], + backgroundColor: props.backgroundColor || props.color, + borderColor: props.borderColor || props.color, + textColor: props.textColor, + classNames: props.classNames.concat(props.className) + }; +} +function processScopedUiProps(prefix, rawScoped, calendar, leftovers) { + var rawUnscoped = {}; + var wasFound = {}; + for (var key in UNSCOPED_EVENT_UI_PROPS) { + var scopedKey = prefix + capitaliseFirstLetter(key); + rawUnscoped[key] = rawScoped[scopedKey]; + wasFound[scopedKey] = true; + } + if (prefix === 'event') { + rawUnscoped.editable = rawScoped.editable; // special case. there is no 'eventEditable', just 'editable' + } + if (leftovers) { + for (var key in rawScoped) { + if (!wasFound[key]) { + leftovers[key] = rawScoped[key]; + } + } + } + return processUnscopedUiProps(rawUnscoped, calendar); +} +var EMPTY_EVENT_UI = { + startEditable: null, + durationEditable: null, + constraints: [], + overlap: null, + allows: [], + backgroundColor: '', + borderColor: '', + textColor: '', + classNames: [] +}; +// prevent against problems with <2 args! +function combineEventUis(uis) { + return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI); +} +function combineTwoEventUis(item0, item1) { + return { + startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable, + durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable, + constraints: item0.constraints.concat(item1.constraints), + overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap, + allows: item0.allows.concat(item1.allows), + backgroundColor: item1.backgroundColor || item0.backgroundColor, + borderColor: item1.borderColor || item0.borderColor, + textColor: item1.textColor || item0.textColor, + classNames: item0.classNames.concat(item1.classNames) + }; +} + +var NON_DATE_PROPS = { + id: String, + groupId: String, + title: String, + url: String, + rendering: String, + extendedProps: null +}; +var DATE_PROPS = { + start: null, + date: null, + end: null, + allDay: null +}; +var uid = 0; +function parseEvent(raw, sourceId, calendar, allowOpenRange) { + var allDayDefault = computeIsAllDayDefault(sourceId, calendar); + var leftovers0 = {}; + var recurringRes = parseRecurring(raw, // raw, but with single-event stuff stripped out + allDayDefault, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes, leftovers0 // will populate with non-recurring props + ); + if (recurringRes) { + var def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar); + def.recurringDef = { + typeId: recurringRes.typeId, + typeData: recurringRes.typeData, + duration: recurringRes.duration + }; + return { def: def, instance: null }; + } + else { + var leftovers1 = {}; + var singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange); + if (singleRes) { + var def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar); + var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo); + return { def: def, instance: instance }; + } + } + return null; +} +/* +Will NOT populate extendedProps with the leftover properties. +Will NOT populate date-related props. +The EventNonDateInput has been normalized (id => publicId, etc). +*/ +function parseEventDef(raw, sourceId, allDay, hasEnd, calendar) { + var leftovers = {}; + var def = pluckNonDateProps(raw, calendar, leftovers); + def.defId = String(uid++); + def.sourceId = sourceId; + def.allDay = allDay; + def.hasEnd = hasEnd; + for (var _i = 0, _a = calendar.pluginSystem.hooks.eventDefParsers; _i < _a.length; _i++) { + var eventDefParser = _a[_i]; + var newLeftovers = {}; + eventDefParser(def, leftovers, newLeftovers); + leftovers = newLeftovers; + } + def.extendedProps = __assign(leftovers, def.extendedProps || {}); + // help out EventApi from having user modify props + Object.freeze(def.ui.classNames); + Object.freeze(def.extendedProps); + return def; +} +function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) { + return { + instanceId: String(uid++), + defId: defId, + range: range, + forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo, + forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo + }; +} +function parseSingle(raw, allDayDefault, calendar, leftovers, allowOpenRange) { + var props = pluckDateProps(raw, leftovers); + var allDay = props.allDay; + var startMeta; + var startMarker = null; + var hasEnd = false; + var endMeta; + var endMarker = null; + startMeta = calendar.dateEnv.createMarkerMeta(props.start); + if (startMeta) { + startMarker = startMeta.marker; + } + else if (!allowOpenRange) { + return null; + } + if (props.end != null) { + endMeta = calendar.dateEnv.createMarkerMeta(props.end); + } + if (allDay == null) { + if (allDayDefault != null) { + allDay = allDayDefault; + } + else { + // fall back to the date props LAST + allDay = (!startMeta || startMeta.isTimeUnspecified) && + (!endMeta || endMeta.isTimeUnspecified); + } + } + if (allDay && startMarker) { + startMarker = startOfDay(startMarker); + } + if (endMeta) { + endMarker = endMeta.marker; + if (allDay) { + endMarker = startOfDay(endMarker); + } + if (startMarker && endMarker <= startMarker) { + endMarker = null; + } + } + if (endMarker) { + hasEnd = true; + } + else if (!allowOpenRange) { + hasEnd = calendar.opt('forceEventDuration') || false; + endMarker = calendar.dateEnv.add(startMarker, allDay ? + calendar.defaultAllDayEventDuration : + calendar.defaultTimedEventDuration); + } + return { + allDay: allDay, + hasEnd: hasEnd, + range: { start: startMarker, end: endMarker }, + forcedStartTzo: startMeta ? startMeta.forcedTzo : null, + forcedEndTzo: endMeta ? endMeta.forcedTzo : null + }; +} +function pluckDateProps(raw, leftovers) { + var props = refineProps(raw, DATE_PROPS, {}, leftovers); + props.start = (props.start !== null) ? props.start : props.date; + delete props.date; + return props; +} +function pluckNonDateProps(raw, calendar, leftovers) { + var preLeftovers = {}; + var props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers); + var ui = processUnscopedUiProps(preLeftovers, calendar, leftovers); + props.publicId = props.id; + delete props.id; + props.ui = ui; + return props; +} +function computeIsAllDayDefault(sourceId, calendar) { + var res = null; + if (sourceId) { + var source = calendar.state.eventSources[sourceId]; + res = source.allDayDefault; + } + if (res == null) { + res = calendar.opt('allDayDefault'); + } + return res; +} + +var DEF_DEFAULTS = { + startTime: '09:00', + endTime: '17:00', + daysOfWeek: [1, 2, 3, 4, 5], + rendering: 'inverse-background', + classNames: 'fc-nonbusiness', + groupId: '_businessHours' // so multiple defs get grouped +}; +/* +TODO: pass around as EventDefHash!!! +*/ +function parseBusinessHours(input, calendar) { + return parseEvents(refineInputs(input), '', calendar); +} +function refineInputs(input) { + var rawDefs; + if (input === true) { + rawDefs = [{}]; // will get DEF_DEFAULTS verbatim + } + else if (Array.isArray(input)) { + // if specifying an array, every sub-definition NEEDS a day-of-week + rawDefs = input.filter(function (rawDef) { + return rawDef.daysOfWeek; + }); + } + else if (typeof input === 'object' && input) { // non-null object + rawDefs = [input]; + } + else { // is probably false + rawDefs = []; + } + rawDefs = rawDefs.map(function (rawDef) { + return __assign({}, DEF_DEFAULTS, rawDef); + }); + return rawDefs; +} + +function memoizeRendering(renderFunc, unrenderFunc, dependencies) { + if (dependencies === void 0) { dependencies = []; } + var dependents = []; + var thisContext; + var prevArgs; + function unrender() { + if (prevArgs) { + for (var _i = 0, dependents_1 = dependents; _i < dependents_1.length; _i++) { + var dependent = dependents_1[_i]; + dependent.unrender(); + } + if (unrenderFunc) { + unrenderFunc.apply(thisContext, prevArgs); + } + prevArgs = null; + } + } + function res() { + if (!prevArgs || !isArraysEqual(prevArgs, arguments)) { + unrender(); + thisContext = this; + prevArgs = arguments; + renderFunc.apply(this, arguments); + } + } + res.dependents = dependents; + res.unrender = unrender; + for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) { + var dependency = dependencies_1[_i]; + dependency.dependents.push(res); + } + return res; +} + +var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere +var Splitter = /** @class */ (function () { + function Splitter() { + this.getKeysForEventDefs = memoize(this._getKeysForEventDefs); + this.splitDateSelection = memoize(this._splitDateSpan); + this.splitEventStore = memoize(this._splitEventStore); + this.splitIndividualUi = memoize(this._splitIndividualUi); + this.splitEventDrag = memoize(this._splitInteraction); + this.splitEventResize = memoize(this._splitInteraction); + this.eventUiBuilders = {}; // TODO: typescript protection + } + Splitter.prototype.splitProps = function (props) { + var _this = this; + var keyInfos = this.getKeyInfo(props); + var defKeys = this.getKeysForEventDefs(props.eventStore); + var dateSelections = this.splitDateSelection(props.dateSelection); + var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases* + var eventStores = this.splitEventStore(props.eventStore, defKeys); + var eventDrags = this.splitEventDrag(props.eventDrag); + var eventResizes = this.splitEventResize(props.eventResize); + var splitProps = {}; + this.eventUiBuilders = mapHash(keyInfos, function (info, key) { + return _this.eventUiBuilders[key] || memoize(buildEventUiForKey); + }); + for (var key in keyInfos) { + var keyInfo = keyInfos[key]; + var eventStore = eventStores[key] || EMPTY_EVENT_STORE; + var buildEventUi = this.eventUiBuilders[key]; + splitProps[key] = { + businessHours: keyInfo.businessHours || props.businessHours, + dateSelection: dateSelections[key] || null, + eventStore: eventStore, + eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]), + eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '', + eventDrag: eventDrags[key] || null, + eventResize: eventResizes[key] || null + }; + } + return splitProps; + }; + Splitter.prototype._splitDateSpan = function (dateSpan) { + var dateSpans = {}; + if (dateSpan) { + var keys = this.getKeysForDateSpan(dateSpan); + for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { + var key = keys_1[_i]; + dateSpans[key] = dateSpan; + } + } + return dateSpans; + }; + Splitter.prototype._getKeysForEventDefs = function (eventStore) { + var _this = this; + return mapHash(eventStore.defs, function (eventDef) { + return _this.getKeysForEventDef(eventDef); + }); + }; + Splitter.prototype._splitEventStore = function (eventStore, defKeys) { + var defs = eventStore.defs, instances = eventStore.instances; + var splitStores = {}; + for (var defId in defs) { + for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) { + var key = _a[_i]; + if (!splitStores[key]) { + splitStores[key] = createEmptyEventStore(); + } + splitStores[key].defs[defId] = defs[defId]; + } + } + for (var instanceId in instances) { + var instance = instances[instanceId]; + for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) { + var key = _c[_b]; + if (splitStores[key]) { // must have already been created + splitStores[key].instances[instanceId] = instance; + } + } + } + return splitStores; + }; + Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) { + var splitHashes = {}; + for (var defId in eventUiBases) { + if (defId) { // not the '' key + for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) { + var key = _a[_i]; + if (!splitHashes[key]) { + splitHashes[key] = {}; + } + splitHashes[key][defId] = eventUiBases[defId]; + } + } + } + return splitHashes; + }; + Splitter.prototype._splitInteraction = function (interaction) { + var splitStates = {}; + if (interaction) { + var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar + ); + // can't rely on defKeys because event data is mutated + var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents); + var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId); + var populate = function (key) { + if (!splitStates[key]) { + splitStates[key] = { + affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE, + mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE, + isEvent: interaction.isEvent, + origSeg: interaction.origSeg + }; + } + }; + for (var key in affectedStores_1) { + populate(key); + } + for (var key in mutatedStores_1) { + populate(key); + } + } + return splitStates; + }; + return Splitter; +}()); +function buildEventUiForKey(allUi, eventUiForKey, individualUi) { + var baseParts = []; + if (allUi) { + baseParts.push(allUi); + } + if (eventUiForKey) { + baseParts.push(eventUiForKey); + } + var stuff = { + '': combineEventUis(baseParts) + }; + if (individualUi) { + __assign(stuff, individualUi); + } + return stuff; +} + +// Generates HTML for an anchor to another view into the calendar. +// Will either generate an
tag or a non-clickable tag, depending on enabled settings. +// `gotoOptions` can either be a DateMarker, or an object with the form: +// { date, type, forceOff } +// `type` is a view-type like "day" or "week". default value is "day". +// `attrs` and `innerHtml` are use to generate the rest of the HTML tag. +function buildGotoAnchorHtml(allOptions, dateEnv, gotoOptions, attrs, innerHtml) { + var date; + var type; + var forceOff; + var finalOptions; + if (gotoOptions instanceof Date) { + date = gotoOptions; // a single date-like input + } + else { + date = gotoOptions.date; + type = gotoOptions.type; + forceOff = gotoOptions.forceOff; + } + finalOptions = { + date: dateEnv.formatIso(date, { omitTime: true }), + type: type || 'day' + }; + if (typeof attrs === 'string') { + innerHtml = attrs; + attrs = null; + } + attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space + innerHtml = innerHtml || ''; + if (!forceOff && allOptions.navLinks) { + return '' + + innerHtml + + ''; + } + else { + return '' + + innerHtml + + ''; + } +} +function getAllDayHtml(allOptions) { + return allOptions.allDayHtml || htmlEscape(allOptions.allDayText); +} +// Computes HTML classNames for a single-day element +function getDayClasses(date, dateProfile, context, noThemeHighlight) { + var calendar = context.calendar, options = context.options, theme = context.theme, dateEnv = context.dateEnv; + var classes = []; + var todayStart; + var todayEnd; + if (!rangeContainsMarker(dateProfile.activeRange, date)) { + classes.push('fc-disabled-day'); + } + else { + classes.push('fc-' + DAY_IDS[date.getUTCDay()]); + if (options.monthMode && + dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) { + classes.push('fc-other-month'); + } + todayStart = startOfDay(calendar.getNow()); + todayEnd = addDays(todayStart, 1); + if (date < todayStart) { + classes.push('fc-past'); + } + else if (date >= todayEnd) { + classes.push('fc-future'); + } + else { + classes.push('fc-today'); + if (noThemeHighlight !== true) { + classes.push(theme.getClass('today')); + } + } + } + return classes; +} + +// given a function that resolves a result asynchronously. +// the function can either call passed-in success and failure callbacks, +// or it can return a promise. +// if you need to pass additional params to func, bind them first. +function unpromisify(func, success, failure) { + // guard against success/failure callbacks being called more than once + // and guard against a promise AND callback being used together. + var isResolved = false; + var wrappedSuccess = function () { + if (!isResolved) { + isResolved = true; + success.apply(this, arguments); + } + }; + var wrappedFailure = function () { + if (!isResolved) { + isResolved = true; + if (failure) { + failure.apply(this, arguments); + } + } + }; + var res = func(wrappedSuccess, wrappedFailure); + if (res && typeof res.then === 'function') { + res.then(wrappedSuccess, wrappedFailure); + } +} + +var Mixin = /** @class */ (function () { + function Mixin() { + } + // mix into a CLASS + Mixin.mixInto = function (destClass) { + this.mixIntoObj(destClass.prototype); + }; + // mix into ANY object + Mixin.mixIntoObj = function (destObj) { + var _this = this; + Object.getOwnPropertyNames(this.prototype).forEach(function (name) { + if (!destObj[name]) { // if destination doesn't already define it + destObj[name] = _this.prototype[name]; + } + }); + }; + /* + will override existing methods + TODO: remove! not used anymore + */ + Mixin.mixOver = function (destClass) { + var _this = this; + Object.getOwnPropertyNames(this.prototype).forEach(function (name) { + destClass.prototype[name] = _this.prototype[name]; + }); + }; + return Mixin; +}()); + +/* +USAGE: + import { default as EmitterMixin, EmitterInterface } from './EmitterMixin' +in class: + on: EmitterInterface['on'] + one: EmitterInterface['one'] + off: EmitterInterface['off'] + trigger: EmitterInterface['trigger'] + triggerWith: EmitterInterface['triggerWith'] + hasHandlers: EmitterInterface['hasHandlers'] +after class: + EmitterMixin.mixInto(TheClass) +*/ +var EmitterMixin = /** @class */ (function (_super) { + __extends(EmitterMixin, _super); + function EmitterMixin() { + return _super !== null && _super.apply(this, arguments) || this; + } + EmitterMixin.prototype.on = function (type, handler) { + addToHash(this._handlers || (this._handlers = {}), type, handler); + return this; // for chaining + }; + // todo: add comments + EmitterMixin.prototype.one = function (type, handler) { + addToHash(this._oneHandlers || (this._oneHandlers = {}), type, handler); + return this; // for chaining + }; + EmitterMixin.prototype.off = function (type, handler) { + if (this._handlers) { + removeFromHash(this._handlers, type, handler); + } + if (this._oneHandlers) { + removeFromHash(this._oneHandlers, type, handler); + } + return this; // for chaining + }; + EmitterMixin.prototype.trigger = function (type) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + this.triggerWith(type, this, args); + return this; // for chaining + }; + EmitterMixin.prototype.triggerWith = function (type, context, args) { + if (this._handlers) { + applyAll(this._handlers[type], context, args); + } + if (this._oneHandlers) { + applyAll(this._oneHandlers[type], context, args); + delete this._oneHandlers[type]; // will never fire again + } + return this; // for chaining + }; + EmitterMixin.prototype.hasHandlers = function (type) { + return (this._handlers && this._handlers[type] && this._handlers[type].length) || + (this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length); + }; + return EmitterMixin; +}(Mixin)); +function addToHash(hash, type, handler) { + (hash[type] || (hash[type] = [])) + .push(handler); +} +function removeFromHash(hash, type, handler) { + if (handler) { + if (hash[type]) { + hash[type] = hash[type].filter(function (func) { + return func !== handler; + }); + } + } + else { + delete hash[type]; // remove all handler funcs for this type + } +} + +/* +Records offset information for a set of elements, relative to an origin element. +Can record the left/right OR the top/bottom OR both. +Provides methods for querying the cache by position. +*/ +var PositionCache = /** @class */ (function () { + function PositionCache(originEl, els, isHorizontal, isVertical) { + this.originEl = originEl; + this.els = els; + this.isHorizontal = isHorizontal; + this.isVertical = isVertical; + } + // Queries the els for coordinates and stores them. + // Call this method before using and of the get* methods below. + PositionCache.prototype.build = function () { + var originEl = this.originEl; + var originClientRect = this.originClientRect = + originEl.getBoundingClientRect(); // relative to viewport top-left + if (this.isHorizontal) { + this.buildElHorizontals(originClientRect.left); + } + if (this.isVertical) { + this.buildElVerticals(originClientRect.top); + } + }; + // Populates the left/right internal coordinate arrays + PositionCache.prototype.buildElHorizontals = function (originClientLeft) { + var lefts = []; + var rights = []; + for (var _i = 0, _a = this.els; _i < _a.length; _i++) { + var el = _a[_i]; + var rect = el.getBoundingClientRect(); + lefts.push(rect.left - originClientLeft); + rights.push(rect.right - originClientLeft); + } + this.lefts = lefts; + this.rights = rights; + }; + // Populates the top/bottom internal coordinate arrays + PositionCache.prototype.buildElVerticals = function (originClientTop) { + var tops = []; + var bottoms = []; + for (var _i = 0, _a = this.els; _i < _a.length; _i++) { + var el = _a[_i]; + var rect = el.getBoundingClientRect(); + tops.push(rect.top - originClientTop); + bottoms.push(rect.bottom - originClientTop); + } + this.tops = tops; + this.bottoms = bottoms; + }; + // Given a left offset (from document left), returns the index of the el that it horizontally intersects. + // If no intersection is made, returns undefined. + PositionCache.prototype.leftToIndex = function (leftPosition) { + var lefts = this.lefts; + var rights = this.rights; + var len = lefts.length; + var i; + for (i = 0; i < len; i++) { + if (leftPosition >= lefts[i] && leftPosition < rights[i]) { + return i; + } + } + }; + // Given a top offset (from document top), returns the index of the el that it vertically intersects. + // If no intersection is made, returns undefined. + PositionCache.prototype.topToIndex = function (topPosition) { + var tops = this.tops; + var bottoms = this.bottoms; + var len = tops.length; + var i; + for (i = 0; i < len; i++) { + if (topPosition >= tops[i] && topPosition < bottoms[i]) { + return i; + } + } + }; + // Gets the width of the element at the given index + PositionCache.prototype.getWidth = function (leftIndex) { + return this.rights[leftIndex] - this.lefts[leftIndex]; + }; + // Gets the height of the element at the given index + PositionCache.prototype.getHeight = function (topIndex) { + return this.bottoms[topIndex] - this.tops[topIndex]; + }; + return PositionCache; +}()); + +/* +An object for getting/setting scroll-related information for an element. +Internally, this is done very differently for window versus DOM element, +so this object serves as a common interface. +*/ +var ScrollController = /** @class */ (function () { + function ScrollController() { + } + ScrollController.prototype.getMaxScrollTop = function () { + return this.getScrollHeight() - this.getClientHeight(); + }; + ScrollController.prototype.getMaxScrollLeft = function () { + return this.getScrollWidth() - this.getClientWidth(); + }; + ScrollController.prototype.canScrollVertically = function () { + return this.getMaxScrollTop() > 0; + }; + ScrollController.prototype.canScrollHorizontally = function () { + return this.getMaxScrollLeft() > 0; + }; + ScrollController.prototype.canScrollUp = function () { + return this.getScrollTop() > 0; + }; + ScrollController.prototype.canScrollDown = function () { + return this.getScrollTop() < this.getMaxScrollTop(); + }; + ScrollController.prototype.canScrollLeft = function () { + return this.getScrollLeft() > 0; + }; + ScrollController.prototype.canScrollRight = function () { + return this.getScrollLeft() < this.getMaxScrollLeft(); + }; + return ScrollController; +}()); +var ElementScrollController = /** @class */ (function (_super) { + __extends(ElementScrollController, _super); + function ElementScrollController(el) { + var _this = _super.call(this) || this; + _this.el = el; + return _this; + } + ElementScrollController.prototype.getScrollTop = function () { + return this.el.scrollTop; + }; + ElementScrollController.prototype.getScrollLeft = function () { + return this.el.scrollLeft; + }; + ElementScrollController.prototype.setScrollTop = function (top) { + this.el.scrollTop = top; + }; + ElementScrollController.prototype.setScrollLeft = function (left) { + this.el.scrollLeft = left; + }; + ElementScrollController.prototype.getScrollWidth = function () { + return this.el.scrollWidth; + }; + ElementScrollController.prototype.getScrollHeight = function () { + return this.el.scrollHeight; + }; + ElementScrollController.prototype.getClientHeight = function () { + return this.el.clientHeight; + }; + ElementScrollController.prototype.getClientWidth = function () { + return this.el.clientWidth; + }; + return ElementScrollController; +}(ScrollController)); +var WindowScrollController = /** @class */ (function (_super) { + __extends(WindowScrollController, _super); + function WindowScrollController() { + return _super !== null && _super.apply(this, arguments) || this; + } + WindowScrollController.prototype.getScrollTop = function () { + return window.pageYOffset; + }; + WindowScrollController.prototype.getScrollLeft = function () { + return window.pageXOffset; + }; + WindowScrollController.prototype.setScrollTop = function (n) { + window.scroll(window.pageXOffset, n); + }; + WindowScrollController.prototype.setScrollLeft = function (n) { + window.scroll(n, window.pageYOffset); + }; + WindowScrollController.prototype.getScrollWidth = function () { + return document.documentElement.scrollWidth; + }; + WindowScrollController.prototype.getScrollHeight = function () { + return document.documentElement.scrollHeight; + }; + WindowScrollController.prototype.getClientHeight = function () { + return document.documentElement.clientHeight; + }; + WindowScrollController.prototype.getClientWidth = function () { + return document.documentElement.clientWidth; + }; + return WindowScrollController; +}(ScrollController)); + +/* +Embodies a div that has potential scrollbars +*/ +var ScrollComponent = /** @class */ (function (_super) { + __extends(ScrollComponent, _super); + function ScrollComponent(overflowX, overflowY) { + var _this = _super.call(this, createElement('div', { + className: 'fc-scroller' + })) || this; + _this.overflowX = overflowX; + _this.overflowY = overflowY; + _this.applyOverflow(); + return _this; + } + // sets to natural height, unlocks overflow + ScrollComponent.prototype.clear = function () { + this.setHeight('auto'); + this.applyOverflow(); + }; + ScrollComponent.prototype.destroy = function () { + removeElement(this.el); + }; + // Overflow + // ----------------------------------------------------------------------------------------------------------------- + ScrollComponent.prototype.applyOverflow = function () { + applyStyle(this.el, { + overflowX: this.overflowX, + overflowY: this.overflowY + }); + }; + // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'. + // Useful for preserving scrollbar widths regardless of future resizes. + // Can pass in scrollbarWidths for optimization. + ScrollComponent.prototype.lockOverflow = function (scrollbarWidths) { + var overflowX = this.overflowX; + var overflowY = this.overflowY; + scrollbarWidths = scrollbarWidths || this.getScrollbarWidths(); + if (overflowX === 'auto') { + overflowX = (scrollbarWidths.bottom || // horizontal scrollbars? + this.canScrollHorizontally() // OR scrolling pane with massless scrollbars? + ) ? 'scroll' : 'hidden'; + } + if (overflowY === 'auto') { + overflowY = (scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars? + this.canScrollVertically() // OR scrolling pane with massless scrollbars? + ) ? 'scroll' : 'hidden'; + } + applyStyle(this.el, { overflowX: overflowX, overflowY: overflowY }); + }; + ScrollComponent.prototype.setHeight = function (height) { + applyStyleProp(this.el, 'height', height); + }; + ScrollComponent.prototype.getScrollbarWidths = function () { + var edges = computeEdges(this.el); + return { + left: edges.scrollbarLeft, + right: edges.scrollbarRight, + bottom: edges.scrollbarBottom + }; + }; + return ScrollComponent; +}(ElementScrollController)); + +var Theme = /** @class */ (function () { + function Theme(calendarOptions) { + this.calendarOptions = calendarOptions; + this.processIconOverride(); + } + Theme.prototype.processIconOverride = function () { + if (this.iconOverrideOption) { + this.setIconOverride(this.calendarOptions[this.iconOverrideOption]); + } + }; + Theme.prototype.setIconOverride = function (iconOverrideHash) { + var iconClassesCopy; + var buttonName; + if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object + iconClassesCopy = __assign({}, this.iconClasses); + for (buttonName in iconOverrideHash) { + iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]); + } + this.iconClasses = iconClassesCopy; + } + else if (iconOverrideHash === false) { + this.iconClasses = {}; + } + }; + Theme.prototype.applyIconOverridePrefix = function (className) { + var prefix = this.iconOverridePrefix; + if (prefix && className.indexOf(prefix) !== 0) { // if not already present + className = prefix + className; + } + return className; + }; + Theme.prototype.getClass = function (key) { + return this.classes[key] || ''; + }; + Theme.prototype.getIconClass = function (buttonName) { + var className = this.iconClasses[buttonName]; + if (className) { + return this.baseIconClass + ' ' + className; + } + return ''; + }; + Theme.prototype.getCustomButtonIconClass = function (customButtonProps) { + var className; + if (this.iconOverrideCustomButtonOption) { + className = customButtonProps[this.iconOverrideCustomButtonOption]; + if (className) { + return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className); + } + } + return ''; + }; + return Theme; +}()); +Theme.prototype.classes = {}; +Theme.prototype.iconClasses = {}; +Theme.prototype.baseIconClass = ''; +Theme.prototype.iconOverridePrefix = ''; + +var guid = 0; +var ComponentContext = /** @class */ (function () { + function ComponentContext(calendar, theme, dateEnv, options, view) { + this.calendar = calendar; + this.theme = theme; + this.dateEnv = dateEnv; + this.options = options; + this.view = view; + this.isRtl = options.dir === 'rtl'; + this.eventOrderSpecs = parseFieldSpecs(options.eventOrder); + this.nextDayThreshold = createDuration(options.nextDayThreshold); + } + ComponentContext.prototype.extend = function (options, view) { + return new ComponentContext(this.calendar, this.theme, this.dateEnv, options || this.options, view || this.view); + }; + return ComponentContext; +}()); +var Component = /** @class */ (function () { + function Component() { + this.uid = String(guid++); + } + Component.addEqualityFuncs = function (newFuncs) { + this.prototype.equalityFuncs = __assign({}, this.prototype.equalityFuncs, newFuncs); + }; + Component.prototype.receiveProps = function (props, context) { + var oldContext = this.context; + this.context = context; + if (!oldContext) { + this.firstContext(context); + } + var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps; + this.props = comboProps; + if (anyChanges) { + if (oldContext) { + this.beforeUpdate(); + } + this.render(comboProps, context); + if (oldContext) { + this.afterUpdate(); + } + } + }; + Component.prototype.render = function (props, context) { + }; + Component.prototype.firstContext = function (context) { + }; + Component.prototype.beforeUpdate = function () { + }; + Component.prototype.afterUpdate = function () { + }; + // after destroy is called, this component won't ever be used again + Component.prototype.destroy = function () { + }; + return Component; +}()); +Component.prototype.equalityFuncs = {}; +/* +Reuses old values when equal. If anything is unequal, returns newProps as-is. +Great for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing. +*/ +function recycleProps(oldProps, newProps, equalityFuncs) { + var comboProps = {}; // some old, some new + var anyChanges = false; + for (var key in newProps) { + if (key in oldProps && (oldProps[key] === newProps[key] || + (equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key])))) { + // equal to old? use old prop + comboProps[key] = oldProps[key]; + } + else { + comboProps[key] = newProps[key]; + anyChanges = true; + } + } + for (var key in oldProps) { + if (!(key in newProps)) { + anyChanges = true; + break; + } + } + return { anyChanges: anyChanges, comboProps: comboProps }; +} + +/* +PURPOSES: +- hook up to fg, fill, and mirror renderers +- interface for dragging and hits +*/ +var DateComponent = /** @class */ (function (_super) { + __extends(DateComponent, _super); + function DateComponent(el) { + var _this = _super.call(this) || this; + _this.el = el; + return _this; + } + DateComponent.prototype.destroy = function () { + _super.prototype.destroy.call(this); + removeElement(this.el); + }; + // Hit System + // ----------------------------------------------------------------------------------------------------------------- + DateComponent.prototype.buildPositionCaches = function () { + }; + DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) { + return null; // this should be abstract + }; + // Validation + // ----------------------------------------------------------------------------------------------------------------- + DateComponent.prototype.isInteractionValid = function (interaction) { + var calendar = this.context.calendar; + var dateProfile = this.props.dateProfile; // HACK + var instances = interaction.mutatedEvents.instances; + if (dateProfile) { // HACK for DayTile + for (var instanceId in instances) { + if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) { + return false; + } + } + } + return isInteractionValid(interaction, calendar); + }; + DateComponent.prototype.isDateSelectionValid = function (selection) { + var calendar = this.context.calendar; + var dateProfile = this.props.dateProfile; // HACK + if (dateProfile && // HACK for DayTile + !rangeContainsRange(dateProfile.validRange, selection.range)) { + return false; + } + return isDateSelectionValid(selection, calendar); + }; + // Pointer Interaction Utils + // ----------------------------------------------------------------------------------------------------------------- + DateComponent.prototype.isValidSegDownEl = function (el) { + return !this.props.eventDrag && // HACK + !this.props.eventResize && // HACK + !elementClosest(el, '.fc-mirror') && + (this.isPopover() || !this.isInPopover(el)); + // ^above line ensures we don't detect a seg interaction within a nested component. + // it's a HACK because it only supports a popover as the nested component. + }; + DateComponent.prototype.isValidDateDownEl = function (el) { + var segEl = elementClosest(el, this.fgSegSelector); + return (!segEl || segEl.classList.contains('fc-mirror')) && + !elementClosest(el, '.fc-more') && // a "more.." link + !elementClosest(el, 'a[data-goto]') && // a clickable nav link + !this.isInPopover(el); + }; + DateComponent.prototype.isPopover = function () { + return this.el.classList.contains('fc-popover'); + }; + DateComponent.prototype.isInPopover = function (el) { + return Boolean(elementClosest(el, '.fc-popover')); + }; + return DateComponent; +}(Component)); +DateComponent.prototype.fgSegSelector = '.fc-event-container > *'; +DateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)'; + +var uid$1 = 0; +function createPlugin(input) { + return { + id: String(uid$1++), + deps: input.deps || [], + reducers: input.reducers || [], + eventDefParsers: input.eventDefParsers || [], + isDraggableTransformers: input.isDraggableTransformers || [], + eventDragMutationMassagers: input.eventDragMutationMassagers || [], + eventDefMutationAppliers: input.eventDefMutationAppliers || [], + dateSelectionTransformers: input.dateSelectionTransformers || [], + datePointTransforms: input.datePointTransforms || [], + dateSpanTransforms: input.dateSpanTransforms || [], + views: input.views || {}, + viewPropsTransformers: input.viewPropsTransformers || [], + isPropsValid: input.isPropsValid || null, + externalDefTransforms: input.externalDefTransforms || [], + eventResizeJoinTransforms: input.eventResizeJoinTransforms || [], + viewContainerModifiers: input.viewContainerModifiers || [], + eventDropTransformers: input.eventDropTransformers || [], + componentInteractions: input.componentInteractions || [], + calendarInteractions: input.calendarInteractions || [], + themeClasses: input.themeClasses || {}, + eventSourceDefs: input.eventSourceDefs || [], + cmdFormatter: input.cmdFormatter, + recurringTypes: input.recurringTypes || [], + namedTimeZonedImpl: input.namedTimeZonedImpl, + defaultView: input.defaultView || '', + elementDraggingImpl: input.elementDraggingImpl, + optionChangeHandlers: input.optionChangeHandlers || {} + }; +} +var PluginSystem = /** @class */ (function () { + function PluginSystem() { + this.hooks = { + reducers: [], + eventDefParsers: [], + isDraggableTransformers: [], + eventDragMutationMassagers: [], + eventDefMutationAppliers: [], + dateSelectionTransformers: [], + datePointTransforms: [], + dateSpanTransforms: [], + views: {}, + viewPropsTransformers: [], + isPropsValid: null, + externalDefTransforms: [], + eventResizeJoinTransforms: [], + viewContainerModifiers: [], + eventDropTransformers: [], + componentInteractions: [], + calendarInteractions: [], + themeClasses: {}, + eventSourceDefs: [], + cmdFormatter: null, + recurringTypes: [], + namedTimeZonedImpl: null, + defaultView: '', + elementDraggingImpl: null, + optionChangeHandlers: {} + }; + this.addedHash = {}; + } + PluginSystem.prototype.add = function (plugin) { + if (!this.addedHash[plugin.id]) { + this.addedHash[plugin.id] = true; + for (var _i = 0, _a = plugin.deps; _i < _a.length; _i++) { + var dep = _a[_i]; + this.add(dep); + } + this.hooks = combineHooks(this.hooks, plugin); + } + }; + return PluginSystem; +}()); +function combineHooks(hooks0, hooks1) { + return { + reducers: hooks0.reducers.concat(hooks1.reducers), + eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers), + isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers), + eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers), + eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers), + dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers), + datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms), + dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms), + views: __assign({}, hooks0.views, hooks1.views), + viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers), + isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid, + externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms), + eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms), + viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers), + eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers), + calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions), + componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions), + themeClasses: __assign({}, hooks0.themeClasses, hooks1.themeClasses), + eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs), + cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter, + recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes), + namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl, + defaultView: hooks0.defaultView || hooks1.defaultView, + elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl, + optionChangeHandlers: __assign({}, hooks0.optionChangeHandlers, hooks1.optionChangeHandlers) + }; +} + +var eventSourceDef = { + ignoreRange: true, + parseMeta: function (raw) { + if (Array.isArray(raw)) { // short form + return raw; + } + else if (Array.isArray(raw.events)) { + return raw.events; + } + return null; + }, + fetch: function (arg, success) { + success({ + rawEvents: arg.eventSource.meta + }); + } +}; +var ArrayEventSourcePlugin = createPlugin({ + eventSourceDefs: [eventSourceDef] +}); + +var eventSourceDef$1 = { + parseMeta: function (raw) { + if (typeof raw === 'function') { // short form + return raw; + } + else if (typeof raw.events === 'function') { + return raw.events; + } + return null; + }, + fetch: function (arg, success, failure) { + var dateEnv = arg.calendar.dateEnv; + var func = arg.eventSource.meta; + unpromisify(func.bind(null, { + start: dateEnv.toDate(arg.range.start), + end: dateEnv.toDate(arg.range.end), + startStr: dateEnv.formatIso(arg.range.start), + endStr: dateEnv.formatIso(arg.range.end), + timeZone: dateEnv.timeZone + }), function (rawEvents) { + success({ rawEvents: rawEvents }); // needs an object response + }, failure // send errorObj directly to failure callback + ); + } +}; +var FuncEventSourcePlugin = createPlugin({ + eventSourceDefs: [eventSourceDef$1] +}); + +function requestJson(method, url, params, successCallback, failureCallback) { + method = method.toUpperCase(); + var body = null; + if (method === 'GET') { + url = injectQueryStringParams(url, params); + } + else { + body = encodeParams(params); + } + var xhr = new XMLHttpRequest(); + xhr.open(method, url, true); + if (method !== 'GET') { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + } + xhr.onload = function () { + if (xhr.status >= 200 && xhr.status < 400) { + try { + var res = JSON.parse(xhr.responseText); + successCallback(res, xhr); + } + catch (err) { + failureCallback('Failure parsing JSON', xhr); + } + } + else { + failureCallback('Request failed', xhr); + } + }; + xhr.onerror = function () { + failureCallback('Request failed', xhr); + }; + xhr.send(body); +} +function injectQueryStringParams(url, params) { + return url + + (url.indexOf('?') === -1 ? '?' : '&') + + encodeParams(params); +} +function encodeParams(params) { + var parts = []; + for (var key in params) { + parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key])); + } + return parts.join('&'); +} + +var eventSourceDef$2 = { + parseMeta: function (raw) { + if (typeof raw === 'string') { // short form + raw = { url: raw }; + } + else if (!raw || typeof raw !== 'object' || !raw.url) { + return null; + } + return { + url: raw.url, + method: (raw.method || 'GET').toUpperCase(), + extraParams: raw.extraParams, + startParam: raw.startParam, + endParam: raw.endParam, + timeZoneParam: raw.timeZoneParam + }; + }, + fetch: function (arg, success, failure) { + var meta = arg.eventSource.meta; + var requestParams = buildRequestParams(meta, arg.range, arg.calendar); + requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) { + success({ rawEvents: rawEvents, xhr: xhr }); + }, function (errorMessage, xhr) { + failure({ message: errorMessage, xhr: xhr }); + }); + } +}; +var JsonFeedEventSourcePlugin = createPlugin({ + eventSourceDefs: [eventSourceDef$2] +}); +function buildRequestParams(meta, range, calendar) { + var dateEnv = calendar.dateEnv; + var startParam; + var endParam; + var timeZoneParam; + var customRequestParams; + var params = {}; + startParam = meta.startParam; + if (startParam == null) { + startParam = calendar.opt('startParam'); + } + endParam = meta.endParam; + if (endParam == null) { + endParam = calendar.opt('endParam'); + } + timeZoneParam = meta.timeZoneParam; + if (timeZoneParam == null) { + timeZoneParam = calendar.opt('timeZoneParam'); + } + // retrieve any outbound GET/POST data from the options + if (typeof meta.extraParams === 'function') { + // supplied as a function that returns a key/value object + customRequestParams = meta.extraParams(); + } + else { + // probably supplied as a straight key/value object + customRequestParams = meta.extraParams || {}; + } + __assign(params, customRequestParams); + params[startParam] = dateEnv.formatIso(range.start); + params[endParam] = dateEnv.formatIso(range.end); + if (dateEnv.timeZone !== 'local') { + params[timeZoneParam] = dateEnv.timeZone; + } + return params; +} + +var recurring = { + parse: function (rawEvent, leftoverProps, dateEnv) { + var createMarker = dateEnv.createMarker.bind(dateEnv); + var processors = { + daysOfWeek: null, + startTime: createDuration, + endTime: createDuration, + startRecur: createMarker, + endRecur: createMarker + }; + var props = refineProps(rawEvent, processors, {}, leftoverProps); + var anyValid = false; + for (var propName in props) { + if (props[propName] != null) { + anyValid = true; + break; + } + } + if (anyValid) { + var duration = null; + if ('duration' in leftoverProps) { + duration = createDuration(leftoverProps.duration); + delete leftoverProps.duration; + } + if (!duration && props.startTime && props.endTime) { + duration = subtractDurations(props.endTime, props.startTime); + } + return { + allDayGuess: Boolean(!props.startTime && !props.endTime), + duration: duration, + typeData: props // doesn't need endTime anymore but oh well + }; + } + return null; + }, + expand: function (typeData, framingRange, dateEnv) { + var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur }); + if (clippedFramingRange) { + return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv); + } + else { + return []; + } + } +}; +var SimpleRecurrencePlugin = createPlugin({ + recurringTypes: [recurring] +}); +function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) { + var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null; + var dayMarker = startOfDay(framingRange.start); + var endMarker = framingRange.end; + var instanceStarts = []; + while (dayMarker < endMarker) { + var instanceStart + // if everyday, or this particular day-of-week + = void 0; + // if everyday, or this particular day-of-week + if (!dowHash || dowHash[dayMarker.getUTCDay()]) { + if (startTime) { + instanceStart = dateEnv.add(dayMarker, startTime); + } + else { + instanceStart = dayMarker; + } + instanceStarts.push(instanceStart); + } + dayMarker = addDays(dayMarker, 1); + } + return instanceStarts; +} + +var DefaultOptionChangeHandlers = createPlugin({ + optionChangeHandlers: { + events: function (events, calendar, deepEqual) { + handleEventSources([events], calendar, deepEqual); + }, + eventSources: handleEventSources, + plugins: handlePlugins + } +}); +function handleEventSources(inputs, calendar, deepEqual) { + var unfoundSources = hashValuesToArray(calendar.state.eventSources); + var newInputs = []; + for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) { + var input = inputs_1[_i]; + var inputFound = false; + for (var i = 0; i < unfoundSources.length; i++) { + if (deepEqual(unfoundSources[i]._raw, input)) { + unfoundSources.splice(i, 1); // delete + inputFound = true; + break; + } + } + if (!inputFound) { + newInputs.push(input); + } + } + for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) { + var unfoundSource = unfoundSources_1[_a]; + calendar.dispatch({ + type: 'REMOVE_EVENT_SOURCE', + sourceId: unfoundSource.sourceId + }); + } + for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) { + var newInput = newInputs_1[_b]; + calendar.addEventSource(newInput); + } +} +// shortcoming: won't remove plugins +function handlePlugins(inputs, calendar) { + calendar.addPluginInputs(inputs); // will gracefully handle duplicates +} + +var config = {}; // TODO: make these options +var globalDefaults = { + defaultRangeSeparator: ' - ', + titleRangeSeparator: ' \u2013 ', + defaultTimedEventDuration: '01:00:00', + defaultAllDayEventDuration: { day: 1 }, + forceEventDuration: false, + nextDayThreshold: '00:00:00', + // display + columnHeader: true, + defaultView: '', + aspectRatio: 1.35, + header: { + left: 'title', + center: '', + right: 'today prev,next' + }, + weekends: true, + weekNumbers: false, + weekNumberCalculation: 'local', + editable: false, + // nowIndicator: false, + scrollTime: '06:00:00', + minTime: '00:00:00', + maxTime: '24:00:00', + showNonCurrentDates: true, + // event ajax + lazyFetching: true, + startParam: 'start', + endParam: 'end', + timeZoneParam: 'timeZone', + timeZone: 'local', + // allDayDefault: undefined, + // locale + locales: [], + locale: '', + // dir: will get this from the default locale + // buttonIcons: null, + // allows setting a min-height to the event segment to prevent short events overlapping each other + timeGridEventMinHeight: 0, + themeSystem: 'standard', + // eventResizableFromStart: false, + dragRevertDuration: 500, + dragScroll: true, + allDayMaintainDuration: false, + // selectable: false, + unselectAuto: true, + // selectMinDistance: 0, + dropAccept: '*', + eventOrder: 'start,-duration,allDay,title', + // ^ if start tie, longer events go before shorter. final tie-breaker is title text + // rerenderDelay: null, + eventLimit: false, + eventLimitClick: 'popover', + dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' }, + handleWindowResize: true, + windowResizeDelay: 100, + longPressDelay: 1000, + eventDragMinDistance: 5 // only applies to mouse +}; +var rtlDefaults = { + header: { + left: 'next,prev today', + center: '', + right: 'title' + }, + buttonIcons: { + // TODO: make RTL support the responibility of the theme + prev: 'fc-icon-chevron-right', + next: 'fc-icon-chevron-left', + prevYear: 'fc-icon-chevrons-right', + nextYear: 'fc-icon-chevrons-left' + } +}; +var complexOptions = [ + 'header', + 'footer', + 'buttonText', + 'buttonIcons' +]; +// Merges an array of option objects into a single object +function mergeOptions(optionObjs) { + return mergeProps(optionObjs, complexOptions); +} +// TODO: move this stuff to a "plugin"-related file... +var INTERNAL_PLUGINS = [ + ArrayEventSourcePlugin, + FuncEventSourcePlugin, + JsonFeedEventSourcePlugin, + SimpleRecurrencePlugin, + DefaultOptionChangeHandlers +]; +function refinePluginDefs(pluginInputs) { + var plugins = []; + for (var _i = 0, pluginInputs_1 = pluginInputs; _i < pluginInputs_1.length; _i++) { + var pluginInput = pluginInputs_1[_i]; + if (typeof pluginInput === 'string') { + var globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput); + if (!window[globalName]) { + console.warn('Plugin file not loaded for ' + pluginInput); + } + else { + plugins.push(window[globalName].default); // is an ES6 module + } + } + else { + plugins.push(pluginInput); + } + } + return INTERNAL_PLUGINS.concat(plugins); +} + +var RAW_EN_LOCALE = { + code: 'en', + week: { + dow: 0, + doy: 4 // 4 days need to be within the year to be considered the first week + }, + dir: 'ltr', + buttonText: { + prev: 'prev', + next: 'next', + prevYear: 'prev year', + nextYear: 'next year', + year: 'year', + today: 'today', + month: 'month', + week: 'week', + day: 'day', + list: 'list' + }, + weekLabel: 'W', + allDayText: 'all-day', + eventLimitText: 'more', + noEventsMessage: 'No events to display' +}; +function parseRawLocales(explicitRawLocales) { + var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en'; + var globalArray = window['FullCalendarLocalesAll'] || []; // from locales-all.js + var globalObject = window['FullCalendarLocales'] || {}; // from locales/*.js. keys are meaningless + var allRawLocales = globalArray.concat(// globalArray is low prio + hashValuesToArray(globalObject), // medium prio + explicitRawLocales // highest prio + ); + var rawLocaleMap = { + en: RAW_EN_LOCALE // necessary? + }; + for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) { + var rawLocale = allRawLocales_1[_i]; + rawLocaleMap[rawLocale.code] = rawLocale; + } + return { + map: rawLocaleMap, + defaultCode: defaultCode + }; +} +function buildLocale(inputSingular, available) { + if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) { + return parseLocale(inputSingular.code, [inputSingular.code], inputSingular); + } + else { + return queryLocale(inputSingular, available); + } +} +function queryLocale(codeArg, available) { + var codes = [].concat(codeArg || []); // will convert to array + var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE; + return parseLocale(codeArg, codes, raw); +} +function queryRawLocale(codes, available) { + for (var i = 0; i < codes.length; i++) { + var parts = codes[i].toLocaleLowerCase().split('-'); + for (var j = parts.length; j > 0; j--) { + var simpleId = parts.slice(0, j).join('-'); + if (available[simpleId]) { + return available[simpleId]; + } + } + } + return null; +} +function parseLocale(codeArg, codes, raw) { + var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']); + delete merged.code; // don't want this part of the options + var week = merged.week; + delete merged.week; + return { + codeArg: codeArg, + codes: codes, + week: week, + simpleNumberFormat: new Intl.NumberFormat(codeArg), + options: merged + }; +} + +var OptionsManager = /** @class */ (function () { + function OptionsManager(overrides) { + this.overrides = __assign({}, overrides); // make a copy + this.dynamicOverrides = {}; + this.compute(); + } + OptionsManager.prototype.mutate = function (updates, removals, isDynamic) { + if (!Object.keys(updates).length && !removals.length) { + return; + } + var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides; + __assign(overrideHash, updates); + for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) { + var propName = removals_1[_i]; + delete overrideHash[propName]; + } + this.compute(); + }; + // Computes the flattened options hash for the calendar and assigns to `this.options`. + // Assumes this.overrides and this.dynamicOverrides have already been initialized. + OptionsManager.prototype.compute = function () { + // TODO: not a very efficient system + var locales = firstDefined(// explicit locale option given? + this.dynamicOverrides.locales, this.overrides.locales, globalDefaults.locales); + var locale = firstDefined(// explicit locales option given? + this.dynamicOverrides.locale, this.overrides.locale, globalDefaults.locale); + var available = parseRawLocales(locales); + var localeDefaults = buildLocale(locale || available.defaultCode, available.map).options; + var dir = firstDefined(// based on options computed so far, is direction RTL? + this.dynamicOverrides.dir, this.overrides.dir, localeDefaults.dir); + var dirDefaults = dir === 'rtl' ? rtlDefaults : {}; + this.dirDefaults = dirDefaults; + this.localeDefaults = localeDefaults; + this.computed = mergeOptions([ + globalDefaults, + dirDefaults, + localeDefaults, + this.overrides, + this.dynamicOverrides + ]); + }; + return OptionsManager; +}()); + +var calendarSystemClassMap = {}; +function registerCalendarSystem(name, theClass) { + calendarSystemClassMap[name] = theClass; +} +function createCalendarSystem(name) { + return new calendarSystemClassMap[name](); +} +var GregorianCalendarSystem = /** @class */ (function () { + function GregorianCalendarSystem() { + } + GregorianCalendarSystem.prototype.getMarkerYear = function (d) { + return d.getUTCFullYear(); + }; + GregorianCalendarSystem.prototype.getMarkerMonth = function (d) { + return d.getUTCMonth(); + }; + GregorianCalendarSystem.prototype.getMarkerDay = function (d) { + return d.getUTCDate(); + }; + GregorianCalendarSystem.prototype.arrayToMarker = function (arr) { + return arrayToUtcDate(arr); + }; + GregorianCalendarSystem.prototype.markerToArray = function (marker) { + return dateToUtcArray(marker); + }; + return GregorianCalendarSystem; +}()); +registerCalendarSystem('gregory', GregorianCalendarSystem); + +var ISO_RE = /^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/; +function parse(str) { + var m = ISO_RE.exec(str); + if (m) { + var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0)); + if (isValidDate(marker)) { + var timeZoneOffset = null; + if (m[13]) { + timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 + + Number(m[18] || 0)); + } + return { + marker: marker, + isTimeUnspecified: !m[6], + timeZoneOffset: timeZoneOffset + }; + } + } + return null; +} + +var DateEnv = /** @class */ (function () { + function DateEnv(settings) { + var timeZone = this.timeZone = settings.timeZone; + var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC'; + if (settings.namedTimeZoneImpl && isNamedTimeZone) { + this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone); + } + this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl); + this.calendarSystem = createCalendarSystem(settings.calendarSystem); + this.locale = settings.locale; + this.weekDow = settings.locale.week.dow; + this.weekDoy = settings.locale.week.doy; + if (settings.weekNumberCalculation === 'ISO') { + this.weekDow = 1; + this.weekDoy = 4; + } + if (typeof settings.firstDay === 'number') { + this.weekDow = settings.firstDay; + } + if (typeof settings.weekNumberCalculation === 'function') { + this.weekNumberFunc = settings.weekNumberCalculation; + } + this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel; + this.cmdFormatter = settings.cmdFormatter; + } + // Creating / Parsing + DateEnv.prototype.createMarker = function (input) { + var meta = this.createMarkerMeta(input); + if (meta === null) { + return null; + } + return meta.marker; + }; + DateEnv.prototype.createNowMarker = function () { + if (this.canComputeOffset) { + return this.timestampToMarker(new Date().valueOf()); + } + else { + // if we can't compute the current date val for a timezone, + // better to give the current local date vals than UTC + return arrayToUtcDate(dateToLocalArray(new Date())); + } + }; + DateEnv.prototype.createMarkerMeta = function (input) { + if (typeof input === 'string') { + return this.parse(input); + } + var marker = null; + if (typeof input === 'number') { + marker = this.timestampToMarker(input); + } + else if (input instanceof Date) { + input = input.valueOf(); + if (!isNaN(input)) { + marker = this.timestampToMarker(input); + } + } + else if (Array.isArray(input)) { + marker = arrayToUtcDate(input); + } + if (marker === null || !isValidDate(marker)) { + return null; + } + return { marker: marker, isTimeUnspecified: false, forcedTzo: null }; + }; + DateEnv.prototype.parse = function (s) { + var parts = parse(s); + if (parts === null) { + return null; + } + var marker = parts.marker; + var forcedTzo = null; + if (parts.timeZoneOffset !== null) { + if (this.canComputeOffset) { + marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000); + } + else { + forcedTzo = parts.timeZoneOffset; + } + } + return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo }; + }; + // Accessors + DateEnv.prototype.getYear = function (marker) { + return this.calendarSystem.getMarkerYear(marker); + }; + DateEnv.prototype.getMonth = function (marker) { + return this.calendarSystem.getMarkerMonth(marker); + }; + // Adding / Subtracting + DateEnv.prototype.add = function (marker, dur) { + var a = this.calendarSystem.markerToArray(marker); + a[0] += dur.years; + a[1] += dur.months; + a[2] += dur.days; + a[6] += dur.milliseconds; + return this.calendarSystem.arrayToMarker(a); + }; + DateEnv.prototype.subtract = function (marker, dur) { + var a = this.calendarSystem.markerToArray(marker); + a[0] -= dur.years; + a[1] -= dur.months; + a[2] -= dur.days; + a[6] -= dur.milliseconds; + return this.calendarSystem.arrayToMarker(a); + }; + DateEnv.prototype.addYears = function (marker, n) { + var a = this.calendarSystem.markerToArray(marker); + a[0] += n; + return this.calendarSystem.arrayToMarker(a); + }; + DateEnv.prototype.addMonths = function (marker, n) { + var a = this.calendarSystem.markerToArray(marker); + a[1] += n; + return this.calendarSystem.arrayToMarker(a); + }; + // Diffing Whole Units + DateEnv.prototype.diffWholeYears = function (m0, m1) { + var calendarSystem = this.calendarSystem; + if (timeAsMs(m0) === timeAsMs(m1) && + calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) && + calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) { + return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0); + } + return null; + }; + DateEnv.prototype.diffWholeMonths = function (m0, m1) { + var calendarSystem = this.calendarSystem; + if (timeAsMs(m0) === timeAsMs(m1) && + calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) { + return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) + + (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12; + } + return null; + }; + // Range / Duration + DateEnv.prototype.greatestWholeUnit = function (m0, m1) { + var n = this.diffWholeYears(m0, m1); + if (n !== null) { + return { unit: 'year', value: n }; + } + n = this.diffWholeMonths(m0, m1); + if (n !== null) { + return { unit: 'month', value: n }; + } + n = diffWholeWeeks(m0, m1); + if (n !== null) { + return { unit: 'week', value: n }; + } + n = diffWholeDays(m0, m1); + if (n !== null) { + return { unit: 'day', value: n }; + } + n = diffHours(m0, m1); + if (isInt(n)) { + return { unit: 'hour', value: n }; + } + n = diffMinutes(m0, m1); + if (isInt(n)) { + return { unit: 'minute', value: n }; + } + n = diffSeconds(m0, m1); + if (isInt(n)) { + return { unit: 'second', value: n }; + } + return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() }; + }; + DateEnv.prototype.countDurationsBetween = function (m0, m1, d) { + // TODO: can use greatestWholeUnit + var diff; + if (d.years) { + diff = this.diffWholeYears(m0, m1); + if (diff !== null) { + return diff / asRoughYears(d); + } + } + if (d.months) { + diff = this.diffWholeMonths(m0, m1); + if (diff !== null) { + return diff / asRoughMonths(d); + } + } + if (d.days) { + diff = diffWholeDays(m0, m1); + if (diff !== null) { + return diff / asRoughDays(d); + } + } + return (m1.valueOf() - m0.valueOf()) / asRoughMs(d); + }; + // Start-Of + DateEnv.prototype.startOf = function (m, unit) { + if (unit === 'year') { + return this.startOfYear(m); + } + else if (unit === 'month') { + return this.startOfMonth(m); + } + else if (unit === 'week') { + return this.startOfWeek(m); + } + else if (unit === 'day') { + return startOfDay(m); + } + else if (unit === 'hour') { + return startOfHour(m); + } + else if (unit === 'minute') { + return startOfMinute(m); + } + else if (unit === 'second') { + return startOfSecond(m); + } + }; + DateEnv.prototype.startOfYear = function (m) { + return this.calendarSystem.arrayToMarker([ + this.calendarSystem.getMarkerYear(m) + ]); + }; + DateEnv.prototype.startOfMonth = function (m) { + return this.calendarSystem.arrayToMarker([ + this.calendarSystem.getMarkerYear(m), + this.calendarSystem.getMarkerMonth(m) + ]); + }; + DateEnv.prototype.startOfWeek = function (m) { + return this.calendarSystem.arrayToMarker([ + this.calendarSystem.getMarkerYear(m), + this.calendarSystem.getMarkerMonth(m), + m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7) + ]); + }; + // Week Number + DateEnv.prototype.computeWeekNumber = function (marker) { + if (this.weekNumberFunc) { + return this.weekNumberFunc(this.toDate(marker)); + } + else { + return weekOfYear(marker, this.weekDow, this.weekDoy); + } + }; + // TODO: choke on timeZoneName: long + DateEnv.prototype.format = function (marker, formatter, dateOptions) { + if (dateOptions === void 0) { dateOptions = {}; } + return formatter.format({ + marker: marker, + timeZoneOffset: dateOptions.forcedTzo != null ? + dateOptions.forcedTzo : + this.offsetForMarker(marker) + }, this); + }; + DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) { + if (dateOptions === void 0) { dateOptions = {}; } + if (dateOptions.isEndExclusive) { + end = addMs(end, -1); + } + return formatter.formatRange({ + marker: start, + timeZoneOffset: dateOptions.forcedStartTzo != null ? + dateOptions.forcedStartTzo : + this.offsetForMarker(start) + }, { + marker: end, + timeZoneOffset: dateOptions.forcedEndTzo != null ? + dateOptions.forcedEndTzo : + this.offsetForMarker(end) + }, this); + }; + DateEnv.prototype.formatIso = function (marker, extraOptions) { + if (extraOptions === void 0) { extraOptions = {}; } + var timeZoneOffset = null; + if (!extraOptions.omitTimeZoneOffset) { + if (extraOptions.forcedTzo != null) { + timeZoneOffset = extraOptions.forcedTzo; + } + else { + timeZoneOffset = this.offsetForMarker(marker); + } + } + return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime); + }; + // TimeZone + DateEnv.prototype.timestampToMarker = function (ms) { + if (this.timeZone === 'local') { + return arrayToUtcDate(dateToLocalArray(new Date(ms))); + } + else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) { + return new Date(ms); + } + else { + return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms)); + } + }; + DateEnv.prototype.offsetForMarker = function (m) { + if (this.timeZone === 'local') { + return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset + } + else if (this.timeZone === 'UTC') { + return 0; + } + else if (this.namedTimeZoneImpl) { + return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)); + } + return null; + }; + // Conversion + DateEnv.prototype.toDate = function (m, forcedTzo) { + if (this.timeZone === 'local') { + return arrayToLocalDate(dateToUtcArray(m)); + } + else if (this.timeZone === 'UTC') { + return new Date(m.valueOf()); // make sure it's a copy + } + else if (!this.namedTimeZoneImpl) { + return new Date(m.valueOf() - (forcedTzo || 0)); + } + else { + return new Date(m.valueOf() - + this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms + ); + } + }; + return DateEnv; +}()); + +var SIMPLE_SOURCE_PROPS = { + id: String, + allDayDefault: Boolean, + eventDataTransform: Function, + success: Function, + failure: Function +}; +var uid$2 = 0; +function doesSourceNeedRange(eventSource, calendar) { + var defs = calendar.pluginSystem.hooks.eventSourceDefs; + return !defs[eventSource.sourceDefId].ignoreRange; +} +function parseEventSource(raw, calendar) { + var defs = calendar.pluginSystem.hooks.eventSourceDefs; + for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence + var def = defs[i]; + var meta = def.parseMeta(raw); + if (meta) { + var res = parseEventSourceProps(typeof raw === 'object' ? raw : {}, meta, i, calendar); + res._raw = raw; + return res; + } + } + return null; +} +function parseEventSourceProps(raw, meta, sourceDefId, calendar) { + var leftovers0 = {}; + var props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0); + var leftovers1 = {}; + var ui = processUnscopedUiProps(leftovers0, calendar, leftovers1); + props.isFetching = false; + props.latestFetchId = ''; + props.fetchRange = null; + props.publicId = String(raw.id || ''); + props.sourceId = String(uid$2++); + props.sourceDefId = sourceDefId; + props.meta = meta; + props.ui = ui; + props.extendedProps = leftovers1; + return props; +} + +function reduceEventSources (eventSources, action, dateProfile, calendar) { + switch (action.type) { + case 'ADD_EVENT_SOURCES': // already parsed + return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar); + case 'REMOVE_EVENT_SOURCE': + return removeSource(eventSources, action.sourceId); + case 'PREV': // TODO: how do we track all actions that affect dateProfile :( + case 'NEXT': + case 'SET_DATE': + case 'SET_VIEW_TYPE': + if (dateProfile) { + return fetchDirtySources(eventSources, dateProfile.activeRange, calendar); + } + else { + return eventSources; + } + case 'FETCH_EVENT_SOURCES': + case 'CHANGE_TIMEZONE': + return fetchSourcesByIds(eventSources, action.sourceIds ? + arrayToHash(action.sourceIds) : + excludeStaticSources(eventSources, calendar), dateProfile ? dateProfile.activeRange : null, calendar); + case 'RECEIVE_EVENTS': + case 'RECEIVE_EVENT_ERROR': + return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange); + case 'REMOVE_ALL_EVENT_SOURCES': + return {}; + default: + return eventSources; + } +} +var uid$3 = 0; +function addSources(eventSourceHash, sources, fetchRange, calendar) { + var hash = {}; + for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) { + var source = sources_1[_i]; + hash[source.sourceId] = source; + } + if (fetchRange) { + hash = fetchDirtySources(hash, fetchRange, calendar); + } + return __assign({}, eventSourceHash, hash); +} +function removeSource(eventSourceHash, sourceId) { + return filterHash(eventSourceHash, function (eventSource) { + return eventSource.sourceId !== sourceId; + }); +} +function fetchDirtySources(sourceHash, fetchRange, calendar) { + return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { + return isSourceDirty(eventSource, fetchRange, calendar); + }), fetchRange, calendar); +} +function isSourceDirty(eventSource, fetchRange, calendar) { + if (!doesSourceNeedRange(eventSource, calendar)) { + return !eventSource.latestFetchId; + } + else { + return !calendar.opt('lazyFetching') || + !eventSource.fetchRange || + eventSource.isFetching || // always cancel outdated in-progress fetches + fetchRange.start < eventSource.fetchRange.start || + fetchRange.end > eventSource.fetchRange.end; + } +} +function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, calendar) { + var nextSources = {}; + for (var sourceId in prevSources) { + var source = prevSources[sourceId]; + if (sourceIdHash[sourceId]) { + nextSources[sourceId] = fetchSource(source, fetchRange, calendar); + } + else { + nextSources[sourceId] = source; + } + } + return nextSources; +} +function fetchSource(eventSource, fetchRange, calendar) { + var sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId]; + var fetchId = String(uid$3++); + sourceDef.fetch({ + eventSource: eventSource, + calendar: calendar, + range: fetchRange + }, function (res) { + var rawEvents = res.rawEvents; + var calSuccess = calendar.opt('eventSourceSuccess'); + var calSuccessRes; + var sourceSuccessRes; + if (eventSource.success) { + sourceSuccessRes = eventSource.success(rawEvents, res.xhr); + } + if (calSuccess) { + calSuccessRes = calSuccess(rawEvents, res.xhr); + } + rawEvents = sourceSuccessRes || calSuccessRes || rawEvents; + calendar.dispatch({ + type: 'RECEIVE_EVENTS', + sourceId: eventSource.sourceId, + fetchId: fetchId, + fetchRange: fetchRange, + rawEvents: rawEvents + }); + }, function (error) { + var callFailure = calendar.opt('eventSourceFailure'); + console.warn(error.message, error); + if (eventSource.failure) { + eventSource.failure(error); + } + if (callFailure) { + callFailure(error); + } + calendar.dispatch({ + type: 'RECEIVE_EVENT_ERROR', + sourceId: eventSource.sourceId, + fetchId: fetchId, + fetchRange: fetchRange, + error: error + }); + }); + return __assign({}, eventSource, { isFetching: true, latestFetchId: fetchId }); +} +function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) { + var _a; + var eventSource = sourceHash[sourceId]; + if (eventSource && // not already removed + fetchId === eventSource.latestFetchId) { + return __assign({}, sourceHash, (_a = {}, _a[sourceId] = __assign({}, eventSource, { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed + }), _a)); + } + return sourceHash; +} +function excludeStaticSources(eventSources, calendar) { + return filterHash(eventSources, function (eventSource) { + return doesSourceNeedRange(eventSource, calendar); + }); +} + +var DateProfileGenerator = /** @class */ (function () { + function DateProfileGenerator(viewSpec, calendar) { + this.viewSpec = viewSpec; + this.options = viewSpec.options; + this.dateEnv = calendar.dateEnv; + this.calendar = calendar; + this.initHiddenDays(); + } + /* Date Range Computation + ------------------------------------------------------------------------------------------------------------------*/ + // Builds a structure with info about what the dates/ranges will be for the "prev" view. + DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate) { + var dateEnv = this.dateEnv; + var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month + currentDateProfile.dateIncrement); + return this.build(prevDate, -1); + }; + // Builds a structure with info about what the dates/ranges will be for the "next" view. + DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate) { + var dateEnv = this.dateEnv; + var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month + currentDateProfile.dateIncrement); + return this.build(nextDate, 1); + }; + // Builds a structure holding dates/ranges for rendering around the given date. + // Optional direction param indicates whether the date is being incremented/decremented + // from its previous value. decremented = -1, incremented = 1 (default). + DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) { + if (forceToValid === void 0) { forceToValid = false; } + var validRange; + var minTime = null; + var maxTime = null; + var currentInfo; + var isRangeAllDay; + var renderRange; + var activeRange; + var isValid; + validRange = this.buildValidRange(); + validRange = this.trimHiddenDays(validRange); + if (forceToValid) { + currentDate = constrainMarkerToRange(currentDate, validRange); + } + currentInfo = this.buildCurrentRangeInfo(currentDate, direction); + isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit); + renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay); + renderRange = this.trimHiddenDays(renderRange); + activeRange = renderRange; + if (!this.options.showNonCurrentDates) { + activeRange = intersectRanges(activeRange, currentInfo.range); + } + minTime = createDuration(this.options.minTime); + maxTime = createDuration(this.options.maxTime); + activeRange = this.adjustActiveRange(activeRange, minTime, maxTime); + activeRange = intersectRanges(activeRange, validRange); // might return null + // it's invalid if the originally requested date is not contained, + // or if the range is completely outside of the valid range. + isValid = rangesIntersect(currentInfo.range, validRange); + return { + // constraint for where prev/next operations can go and where events can be dragged/resized to. + // an object with optional start and end properties. + validRange: validRange, + // range the view is formally responsible for. + // for example, a month view might have 1st-31st, excluding padded dates + currentRange: currentInfo.range, + // name of largest unit being displayed, like "month" or "week" + currentRangeUnit: currentInfo.unit, + isRangeAllDay: isRangeAllDay, + // dates that display events and accept drag-n-drop + // will be `null` if no dates accept events + activeRange: activeRange, + // date range with a rendered skeleton + // includes not-active days that need some sort of DOM + renderRange: renderRange, + // Duration object that denotes the first visible time of any given day + minTime: minTime, + // Duration object that denotes the exclusive visible end time of any given day + maxTime: maxTime, + isValid: isValid, + // how far the current date will move for a prev/next operation + dateIncrement: this.buildDateIncrement(currentInfo.duration) + // pass a fallback (might be null) ^ + }; + }; + // Builds an object with optional start/end properties. + // Indicates the minimum/maximum dates to display. + // not responsible for trimming hidden days. + DateProfileGenerator.prototype.buildValidRange = function () { + return this.getRangeOption('validRange', this.calendar.getNow()) || + { start: null, end: null }; // completely open-ended + }; + // Builds a structure with info about the "current" range, the range that is + // highlighted as being the current month for example. + // See build() for a description of `direction`. + // Guaranteed to have `range` and `unit` properties. `duration` is optional. + DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) { + var _a = this, viewSpec = _a.viewSpec, dateEnv = _a.dateEnv; + var duration = null; + var unit = null; + var range = null; + var dayCount; + if (viewSpec.duration) { + duration = viewSpec.duration; + unit = viewSpec.durationUnit; + range = this.buildRangeFromDuration(date, direction, duration, unit); + } + else if ((dayCount = this.options.dayCount)) { + unit = 'day'; + range = this.buildRangeFromDayCount(date, direction, dayCount); + } + else if ((range = this.buildCustomVisibleRange(date))) { + unit = dateEnv.greatestWholeUnit(range.start, range.end).unit; + } + else { + duration = this.getFallbackDuration(); + unit = greatestDurationDenominator(duration).unit; + range = this.buildRangeFromDuration(date, direction, duration, unit); + } + return { duration: duration, unit: unit, range: range }; + }; + DateProfileGenerator.prototype.getFallbackDuration = function () { + return createDuration({ day: 1 }); + }; + // Returns a new activeRange to have time values (un-ambiguate) + // minTime or maxTime causes the range to expand. + DateProfileGenerator.prototype.adjustActiveRange = function (range, minTime, maxTime) { + var dateEnv = this.dateEnv; + var start = range.start; + var end = range.end; + if (this.viewSpec.class.prototype.usesMinMaxTime) { + // expand active range if minTime is negative (why not when positive?) + if (asRoughDays(minTime) < 0) { + start = startOfDay(start); // necessary? + start = dateEnv.add(start, minTime); + } + // expand active range if maxTime is beyond one day (why not when positive?) + if (asRoughDays(maxTime) > 1) { + end = startOfDay(end); // necessary? + end = addDays(end, -1); + end = dateEnv.add(end, maxTime); + } + } + return { start: start, end: end }; + }; + // Builds the "current" range when it is specified as an explicit duration. + // `unit` is the already-computed greatestDurationDenominator unit of duration. + DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) { + var dateEnv = this.dateEnv; + var alignment = this.options.dateAlignment; + var dateIncrementInput; + var dateIncrementDuration; + var start; + var end; + var res; + // compute what the alignment should be + if (!alignment) { + dateIncrementInput = this.options.dateIncrement; + if (dateIncrementInput) { + dateIncrementDuration = createDuration(dateIncrementInput); + // use the smaller of the two units + if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) { + alignment = greatestDurationDenominator(dateIncrementDuration, !getWeeksFromInput(dateIncrementInput)).unit; + } + else { + alignment = unit; + } + } + else { + alignment = unit; + } + } + // if the view displays a single day or smaller + if (asRoughDays(duration) <= 1) { + if (this.isHiddenDay(start)) { + start = this.skipHiddenDays(start, direction); + start = startOfDay(start); + } + } + function computeRes() { + start = dateEnv.startOf(date, alignment); + end = dateEnv.add(start, duration); + res = { start: start, end: end }; + } + computeRes(); + // if range is completely enveloped by hidden days, go past the hidden days + if (!this.trimHiddenDays(res)) { + date = this.skipHiddenDays(date, direction); + computeRes(); + } + return res; + }; + // Builds the "current" range when a dayCount is specified. + DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) { + var dateEnv = this.dateEnv; + var customAlignment = this.options.dateAlignment; + var runningCount = 0; + var start = date; + var end; + if (customAlignment) { + start = dateEnv.startOf(start, customAlignment); + } + start = startOfDay(start); + start = this.skipHiddenDays(start, direction); + end = start; + do { + end = addDays(end, 1); + if (!this.isHiddenDay(end)) { + runningCount++; + } + } while (runningCount < dayCount); + return { start: start, end: end }; + }; + // Builds a normalized range object for the "visible" range, + // which is a way to define the currentRange and activeRange at the same time. + DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) { + var dateEnv = this.dateEnv; + var visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date)); + if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) { + return null; + } + return visibleRange; + }; + // Computes the range that will represent the element/cells for *rendering*, + // but which may have voided days/times. + // not responsible for trimming hidden days. + DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) { + return currentRange; + }; + // Compute the duration value that should be added/substracted to the current date + // when a prev/next operation happens. + DateProfileGenerator.prototype.buildDateIncrement = function (fallback) { + var dateIncrementInput = this.options.dateIncrement; + var customAlignment; + if (dateIncrementInput) { + return createDuration(dateIncrementInput); + } + else if ((customAlignment = this.options.dateAlignment)) { + return createDuration(1, customAlignment); + } + else if (fallback) { + return fallback; + } + else { + return createDuration({ days: 1 }); + } + }; + // Arguments after name will be forwarded to a hypothetical function value + // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects. + // Always clone your objects if you fear mutation. + DateProfileGenerator.prototype.getRangeOption = function (name) { + var otherArgs = []; + for (var _i = 1; _i < arguments.length; _i++) { + otherArgs[_i - 1] = arguments[_i]; + } + var val = this.options[name]; + if (typeof val === 'function') { + val = val.apply(null, otherArgs); + } + if (val) { + val = parseRange(val, this.dateEnv); + } + if (val) { + val = computeVisibleDayRange(val); + } + return val; + }; + /* Hidden Days + ------------------------------------------------------------------------------------------------------------------*/ + // Initializes internal variables related to calculating hidden days-of-week + DateProfileGenerator.prototype.initHiddenDays = function () { + var hiddenDays = this.options.hiddenDays || []; // array of day-of-week indices that are hidden + var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool) + var dayCnt = 0; + var i; + if (this.options.weekends === false) { + hiddenDays.push(0, 6); // 0=sunday, 6=saturday + } + for (i = 0; i < 7; i++) { + if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) { + dayCnt++; + } + } + if (!dayCnt) { + throw new Error('invalid hiddenDays'); // all days were hidden? bad. + } + this.isHiddenDayHash = isHiddenDayHash; + }; + // Remove days from the beginning and end of the range that are computed as hidden. + // If the whole range is trimmed off, returns null + DateProfileGenerator.prototype.trimHiddenDays = function (range) { + var start = range.start; + var end = range.end; + if (start) { + start = this.skipHiddenDays(start); + } + if (end) { + end = this.skipHiddenDays(end, -1, true); + } + if (start == null || end == null || start < end) { + return { start: start, end: end }; + } + return null; + }; + // Is the current day hidden? + // `day` is a day-of-week index (0-6), or a Date (used for UTC) + DateProfileGenerator.prototype.isHiddenDay = function (day) { + if (day instanceof Date) { + day = day.getUTCDay(); + } + return this.isHiddenDayHash[day]; + }; + // Incrementing the current day until it is no longer a hidden day, returning a copy. + // DOES NOT CONSIDER validRange! + // If the initial value of `date` is not a hidden day, don't do anything. + // Pass `isExclusive` as `true` if you are dealing with an end date. + // `inc` defaults to `1` (increment one day forward each time) + DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) { + if (inc === void 0) { inc = 1; } + if (isExclusive === void 0) { isExclusive = false; } + while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) { + date = addDays(date, inc); + } + return date; + }; + return DateProfileGenerator; +}()); +// TODO: find a way to avoid comparing DateProfiles. it's tedious +function isDateProfilesEqual(p0, p1) { + return rangesEqual(p0.validRange, p1.validRange) && + rangesEqual(p0.activeRange, p1.activeRange) && + rangesEqual(p0.renderRange, p1.renderRange) && + durationsEqual(p0.minTime, p1.minTime) && + durationsEqual(p0.maxTime, p1.maxTime); + /* + TODO: compare more? + currentRange: DateRange + currentRangeUnit: string + isRangeAllDay: boolean + isValid: boolean + dateIncrement: Duration + */ +} + +function reduce (state, action, calendar) { + var viewType = reduceViewType(state.viewType, action); + var dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar); + var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar); + var nextState = __assign({}, state, { viewType: viewType, + dateProfile: dateProfile, currentDate: reduceCurrentDate(state.currentDate, action, dateProfile), eventSources: eventSources, eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar), dateSelection: reduceDateSelection(state.dateSelection, action, calendar), eventSelection: reduceSelectedEvent(state.eventSelection, action), eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar), eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar), eventSourceLoadingLevel: computeLoadingLevel(eventSources), loadingLevel: computeLoadingLevel(eventSources) }); + for (var _i = 0, _a = calendar.pluginSystem.hooks.reducers; _i < _a.length; _i++) { + var reducerFunc = _a[_i]; + nextState = reducerFunc(nextState, action, calendar); + } + // console.log(action.type, nextState) + return nextState; +} +function reduceViewType(currentViewType, action) { + switch (action.type) { + case 'SET_VIEW_TYPE': + return action.viewType; + default: + return currentViewType; + } +} +function reduceDateProfile(currentDateProfile, action, currentDate, viewType, calendar) { + var newDateProfile; + switch (action.type) { + case 'PREV': + newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate); + break; + case 'NEXT': + newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate); + break; + case 'SET_DATE': + if (!currentDateProfile.activeRange || + !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)) { + newDateProfile = calendar.dateProfileGenerators[viewType].build(action.dateMarker, undefined, true // forceToValid + ); + } + break; + case 'SET_VIEW_TYPE': + var generator = calendar.dateProfileGenerators[viewType]; + if (!generator) { + throw new Error(viewType ? + 'The FullCalendar view "' + viewType + '" does not exist. Make sure your plugins are loaded correctly.' : + 'No available FullCalendar view plugins.'); + } + newDateProfile = generator.build(action.dateMarker || currentDate, undefined, true // forceToValid + ); + break; + } + if (newDateProfile && + newDateProfile.isValid && + !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))) { + return newDateProfile; + } + else { + return currentDateProfile; + } +} +function reduceCurrentDate(currentDate, action, dateProfile) { + switch (action.type) { + case 'PREV': + case 'NEXT': + if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) { + return dateProfile.currentRange.start; + } + else { + return currentDate; + } + case 'SET_DATE': + case 'SET_VIEW_TYPE': + var newDate = action.dateMarker || currentDate; + if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) { + return dateProfile.currentRange.start; + } + else { + return newDate; + } + default: + return currentDate; + } +} +function reduceDateSelection(currentSelection, action, calendar) { + switch (action.type) { + case 'SELECT_DATES': + return action.selection; + case 'UNSELECT_DATES': + return null; + default: + return currentSelection; + } +} +function reduceSelectedEvent(currentInstanceId, action) { + switch (action.type) { + case 'SELECT_EVENT': + return action.eventInstanceId; + case 'UNSELECT_EVENT': + return ''; + default: + return currentInstanceId; + } +} +function reduceEventDrag(currentDrag, action, sources, calendar) { + switch (action.type) { + case 'SET_EVENT_DRAG': + var newDrag = action.state; + return { + affectedEvents: newDrag.affectedEvents, + mutatedEvents: newDrag.mutatedEvents, + isEvent: newDrag.isEvent, + origSeg: newDrag.origSeg + }; + case 'UNSET_EVENT_DRAG': + return null; + default: + return currentDrag; + } +} +function reduceEventResize(currentResize, action, sources, calendar) { + switch (action.type) { + case 'SET_EVENT_RESIZE': + var newResize = action.state; + return { + affectedEvents: newResize.affectedEvents, + mutatedEvents: newResize.mutatedEvents, + isEvent: newResize.isEvent, + origSeg: newResize.origSeg + }; + case 'UNSET_EVENT_RESIZE': + return null; + default: + return currentResize; + } +} +function computeLoadingLevel(eventSources) { + var cnt = 0; + for (var sourceId in eventSources) { + if (eventSources[sourceId].isFetching) { + cnt++; + } + } + return cnt; +} + +var STANDARD_PROPS = { + start: null, + end: null, + allDay: Boolean +}; +function parseDateSpan(raw, dateEnv, defaultDuration) { + var span = parseOpenDateSpan(raw, dateEnv); + var range = span.range; + if (!range.start) { + return null; + } + if (!range.end) { + if (defaultDuration == null) { + return null; + } + else { + range.end = dateEnv.add(range.start, defaultDuration); + } + } + return span; +} +/* +TODO: somehow combine with parseRange? +Will return null if the start/end props were present but parsed invalidly. +*/ +function parseOpenDateSpan(raw, dateEnv) { + var leftovers = {}; + var standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers); + var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null; + var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null; + var allDay = standardProps.allDay; + if (allDay == null) { + allDay = (startMeta && startMeta.isTimeUnspecified) && + (!endMeta || endMeta.isTimeUnspecified); + } + // use this leftover object as the selection object + leftovers.range = { + start: startMeta ? startMeta.marker : null, + end: endMeta ? endMeta.marker : null + }; + leftovers.allDay = allDay; + return leftovers; +} +function isDateSpansEqual(span0, span1) { + return rangesEqual(span0.range, span1.range) && + span0.allDay === span1.allDay && + isSpanPropsEqual(span0, span1); +} +// the NON-DATE-RELATED props +function isSpanPropsEqual(span0, span1) { + for (var propName in span1) { + if (propName !== 'range' && propName !== 'allDay') { + if (span0[propName] !== span1[propName]) { + return false; + } + } + } + // are there any props that span0 has that span1 DOESN'T have? + // both have range/allDay, so no need to special-case. + for (var propName in span0) { + if (!(propName in span1)) { + return false; + } + } + return true; +} +function buildDateSpanApi(span, dateEnv) { + return { + start: dateEnv.toDate(span.range.start), + end: dateEnv.toDate(span.range.end), + startStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }), + endStr: dateEnv.formatIso(span.range.end, { omitTime: span.allDay }), + allDay: span.allDay + }; +} +function buildDatePointApi(span, dateEnv) { + return { + date: dateEnv.toDate(span.range.start), + dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }), + allDay: span.allDay + }; +} +function fabricateEventRange(dateSpan, eventUiBases, calendar) { + var def = parseEventDef({ editable: false }, '', // sourceId + dateSpan.allDay, true, // hasEnd + calendar); + return { + def: def, + ui: compileEventUi(def, eventUiBases), + instance: createEventInstance(def.defId, dateSpan.range), + range: dateSpan.range, + isStart: true, + isEnd: true + }; +} + +function compileViewDefs(defaultConfigs, overrideConfigs) { + var hash = {}; + var viewType; + for (viewType in defaultConfigs) { + ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs); + } + for (viewType in overrideConfigs) { + ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs); + } + return hash; +} +function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) { + if (hash[viewType]) { + return hash[viewType]; + } + var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs); + if (viewDef) { + hash[viewType] = viewDef; + } + return viewDef; +} +function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) { + var defaultConfig = defaultConfigs[viewType]; + var overrideConfig = overrideConfigs[viewType]; + var queryProp = function (name) { + return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] : + ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null); + }; + var theClass = queryProp('class'); + var superType = queryProp('superType'); + if (!superType && theClass) { + superType = + findViewNameBySubclass(theClass, overrideConfigs) || + findViewNameBySubclass(theClass, defaultConfigs); + } + var superDef = null; + if (superType) { + if (superType === viewType) { + throw new Error('Can\'t have a custom view type that references itself'); + } + superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs); + } + if (!theClass && superDef) { + theClass = superDef.class; + } + if (!theClass) { + return null; // don't throw a warning, might be settings for a single-unit view + } + return { + type: viewType, + class: theClass, + defaults: __assign({}, (superDef ? superDef.defaults : {}), (defaultConfig ? defaultConfig.options : {})), + overrides: __assign({}, (superDef ? superDef.overrides : {}), (overrideConfig ? overrideConfig.options : {})) + }; +} +function findViewNameBySubclass(viewSubclass, configs) { + var superProto = Object.getPrototypeOf(viewSubclass.prototype); + for (var viewType in configs) { + var parsed = configs[viewType]; + // need DIRECT subclass, so instanceof won't do it + if (parsed.class && parsed.class.prototype === superProto) { + return viewType; + } + } + return ''; +} + +function parseViewConfigs(inputs) { + return mapHash(inputs, parseViewConfig); +} +var VIEW_DEF_PROPS = { + type: String, + class: null +}; +function parseViewConfig(input) { + if (typeof input === 'function') { + input = { class: input }; + } + var options = {}; + var props = refineProps(input, VIEW_DEF_PROPS, {}, options); + return { + superType: props.type, + class: props.class, + options: options + }; +} + +function buildViewSpecs(defaultInputs, optionsManager) { + var defaultConfigs = parseViewConfigs(defaultInputs); + var overrideConfigs = parseViewConfigs(optionsManager.overrides.views); + var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs); + return mapHash(viewDefs, function (viewDef) { + return buildViewSpec(viewDef, overrideConfigs, optionsManager); + }); +} +function buildViewSpec(viewDef, overrideConfigs, optionsManager) { + var durationInput = viewDef.overrides.duration || + viewDef.defaults.duration || + optionsManager.dynamicOverrides.duration || + optionsManager.overrides.duration; + var duration = null; + var durationUnit = ''; + var singleUnit = ''; + var singleUnitOverrides = {}; + if (durationInput) { + duration = createDuration(durationInput); + if (duration) { // valid? + var denom = greatestDurationDenominator(duration, !getWeeksFromInput(durationInput)); + durationUnit = denom.unit; + if (denom.value === 1) { + singleUnit = durationUnit; + singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {}; + } + } + } + var queryButtonText = function (options) { + var buttonTextMap = options.buttonText || {}; + var buttonTextKey = viewDef.defaults.buttonTextKey; + if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) { + return buttonTextMap[buttonTextKey]; + } + if (buttonTextMap[viewDef.type] != null) { + return buttonTextMap[viewDef.type]; + } + if (buttonTextMap[singleUnit] != null) { + return buttonTextMap[singleUnit]; + } + }; + return { + type: viewDef.type, + class: viewDef.class, + duration: duration, + durationUnit: durationUnit, + singleUnit: singleUnit, + options: __assign({}, globalDefaults, viewDef.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, singleUnitOverrides, viewDef.overrides, optionsManager.dynamicOverrides), + buttonTextOverride: queryButtonText(optionsManager.dynamicOverrides) || + queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence + viewDef.overrides.buttonText, + buttonTextDefault: queryButtonText(optionsManager.localeDefaults) || + queryButtonText(optionsManager.dirDefaults) || + viewDef.defaults.buttonText || + queryButtonText(globalDefaults) || + viewDef.type // fall back to given view name + }; +} + +var Toolbar = /** @class */ (function (_super) { + __extends(Toolbar, _super); + function Toolbar(extraClassName) { + var _this = _super.call(this) || this; + _this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout); + _this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]); + _this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]); + _this._updateToday = memoizeRendering(_this.updateToday, null, [_this._renderLayout]); + _this._updatePrev = memoizeRendering(_this.updatePrev, null, [_this._renderLayout]); + _this._updateNext = memoizeRendering(_this.updateNext, null, [_this._renderLayout]); + _this.el = createElement('div', { className: 'fc-toolbar ' + extraClassName }); + return _this; + } + Toolbar.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this._renderLayout.unrender(); // should unrender everything else + removeElement(this.el); + }; + Toolbar.prototype.render = function (props) { + this._renderLayout(props.layout); + this._updateTitle(props.title); + this._updateActiveButton(props.activeButton); + this._updateToday(props.isTodayEnabled); + this._updatePrev(props.isPrevEnabled); + this._updateNext(props.isNextEnabled); + }; + Toolbar.prototype.renderLayout = function (layout) { + var el = this.el; + this.viewsWithButtons = []; + appendToElement(el, this.renderSection('left', layout.left)); + appendToElement(el, this.renderSection('center', layout.center)); + appendToElement(el, this.renderSection('right', layout.right)); + }; + Toolbar.prototype.unrenderLayout = function () { + this.el.innerHTML = ''; + }; + Toolbar.prototype.renderSection = function (position, buttonStr) { + var _this = this; + var _a = this.context, theme = _a.theme, calendar = _a.calendar; + var optionsManager = calendar.optionsManager; + var viewSpecs = calendar.viewSpecs; + var sectionEl = createElement('div', { className: 'fc-' + position }); + var calendarCustomButtons = optionsManager.computed.customButtons || {}; + var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {}; + var calendarButtonText = optionsManager.computed.buttonText || {}; + if (buttonStr) { + buttonStr.split(' ').forEach(function (buttonGroupStr, i) { + var groupChildren = []; + var isOnlyButtons = true; + var groupEl; + buttonGroupStr.split(',').forEach(function (buttonName, j) { + var customButtonProps; + var viewSpec; + var buttonClick; + var buttonIcon; // only one of these will be set + var buttonText; // " + var buttonInnerHtml; + var buttonClasses; + var buttonEl; + var buttonAriaAttr; + if (buttonName === 'title') { + groupChildren.push(htmlToElement('

 

')); // we always want it to take up height + isOnlyButtons = false; + } + else { + if ((customButtonProps = calendarCustomButtons[buttonName])) { + buttonClick = function (ev) { + if (customButtonProps.click) { + customButtonProps.click.call(buttonEl, ev); + } + }; + (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) || + (buttonIcon = theme.getIconClass(buttonName)) || + (buttonText = customButtonProps.text); + } + else if ((viewSpec = viewSpecs[buttonName])) { + _this.viewsWithButtons.push(buttonName); + buttonClick = function () { + calendar.changeView(buttonName); + }; + (buttonText = viewSpec.buttonTextOverride) || + (buttonIcon = theme.getIconClass(buttonName)) || + (buttonText = viewSpec.buttonTextDefault); + } + else if (calendar[buttonName]) { // a calendar method + buttonClick = function () { + calendar[buttonName](); + }; + (buttonText = calendarButtonTextOverrides[buttonName]) || + (buttonIcon = theme.getIconClass(buttonName)) || + (buttonText = calendarButtonText[buttonName]); + // ^ everything else is considered default + } + if (buttonClick) { + buttonClasses = [ + 'fc-' + buttonName + '-button', + theme.getClass('button') + ]; + if (buttonText) { + buttonInnerHtml = htmlEscape(buttonText); + buttonAriaAttr = ''; + } + else if (buttonIcon) { + buttonInnerHtml = ""; + buttonAriaAttr = ' aria-label="' + buttonName + '"'; + } + buttonEl = htmlToElement(// type="button" so that it doesn't submit a form + ''); + buttonEl.addEventListener('click', buttonClick); + groupChildren.push(buttonEl); + } + } + }); + if (groupChildren.length > 1) { + groupEl = document.createElement('div'); + var buttonGroupClassName = theme.getClass('buttonGroup'); + if (isOnlyButtons && buttonGroupClassName) { + groupEl.classList.add(buttonGroupClassName); + } + appendToElement(groupEl, groupChildren); + sectionEl.appendChild(groupEl); + } + else { + appendToElement(sectionEl, groupChildren); // 1 or 0 children + } + }); + } + return sectionEl; + }; + Toolbar.prototype.updateToday = function (isTodayEnabled) { + this.toggleButtonEnabled('today', isTodayEnabled); + }; + Toolbar.prototype.updatePrev = function (isPrevEnabled) { + this.toggleButtonEnabled('prev', isPrevEnabled); + }; + Toolbar.prototype.updateNext = function (isNextEnabled) { + this.toggleButtonEnabled('next', isNextEnabled); + }; + Toolbar.prototype.updateTitle = function (text) { + findElements(this.el, 'h2').forEach(function (titleEl) { + titleEl.innerText = text; + }); + }; + Toolbar.prototype.updateActiveButton = function (buttonName) { + var theme = this.context.theme; + var className = theme.getClass('buttonActive'); + findElements(this.el, 'button').forEach(function (buttonEl) { + if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) { + buttonEl.classList.add(className); + } + else { + buttonEl.classList.remove(className); + } + }); + }; + Toolbar.prototype.toggleButtonEnabled = function (buttonName, bool) { + findElements(this.el, '.fc-' + buttonName + '-button').forEach(function (buttonEl) { + buttonEl.disabled = !bool; + }); + }; + return Toolbar; +}(Component)); + +var CalendarComponent = /** @class */ (function (_super) { + __extends(CalendarComponent, _super); + function CalendarComponent(el) { + var _this = _super.call(this) || this; + _this.elClassNames = []; + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + _this.renderToolbars = memoizeRendering(_this._renderToolbars, _this._unrenderToolbars, [_this.renderSkeleton]); + _this.buildComponentContext = memoize(buildComponentContext); + _this.buildViewPropTransformers = memoize(buildViewPropTransformers); + _this.el = el; + _this.computeTitle = memoize(computeTitle); + _this.parseBusinessHours = memoize(function (input) { + return parseBusinessHours(input, _this.context.calendar); + }); + return _this; + } + CalendarComponent.prototype.render = function (props, context) { + this.freezeHeight(); + var title = this.computeTitle(props.dateProfile, props.viewSpec.options); + this.renderSkeleton(context); + this.renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, title); + this.renderView(props, title); + this.updateSize(); + this.thawHeight(); + }; + CalendarComponent.prototype.destroy = function () { + if (this.header) { + this.header.destroy(); + } + if (this.footer) { + this.footer.destroy(); + } + this.renderSkeleton.unrender(); // will call destroyView + _super.prototype.destroy.call(this); + }; + CalendarComponent.prototype._renderSkeleton = function (context) { + this.updateElClassNames(context); + prependToElement(this.el, this.contentEl = createElement('div', { className: 'fc-view-container' })); + var calendar = context.calendar; + for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) { + var modifyViewContainer = _a[_i]; + modifyViewContainer(this.contentEl, calendar); + } + }; + CalendarComponent.prototype._unrenderSkeleton = function () { + // weird to have this here + if (this.view) { + this.savedScroll = this.view.queryScroll(); + this.view.destroy(); + this.view = null; + } + removeElement(this.contentEl); + this.removeElClassNames(); + }; + CalendarComponent.prototype.removeElClassNames = function () { + var classList = this.el.classList; + for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) { + var className = _a[_i]; + classList.remove(className); + } + this.elClassNames = []; + }; + CalendarComponent.prototype.updateElClassNames = function (context) { + this.removeElClassNames(); + var theme = context.theme, options = context.options; + this.elClassNames = [ + 'fc', + 'fc-' + options.dir, + theme.getClass('widget') + ]; + var classList = this.el.classList; + for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) { + var className = _a[_i]; + classList.add(className); + } + }; + CalendarComponent.prototype._renderToolbars = function (viewSpec, dateProfile, currentDate, title) { + var _a = this, context = _a.context, header = _a.header, footer = _a.footer; + var options = context.options, calendar = context.calendar; + var headerLayout = options.header; + var footerLayout = options.footer; + var dateProfileGenerator = this.props.dateProfileGenerator; + var now = calendar.getNow(); + var todayInfo = dateProfileGenerator.build(now); + var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate); + var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate); + var toolbarProps = { + title: title, + activeButton: viewSpec.type, + isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now), + isPrevEnabled: prevInfo.isValid, + isNextEnabled: nextInfo.isValid + }; + if (headerLayout) { + if (!header) { + header = this.header = new Toolbar('fc-header-toolbar'); + prependToElement(this.el, header.el); + } + header.receiveProps(__assign({ layout: headerLayout }, toolbarProps), context); + } + else if (header) { + header.destroy(); + header = this.header = null; + } + if (footerLayout) { + if (!footer) { + footer = this.footer = new Toolbar('fc-footer-toolbar'); + appendToElement(this.el, footer.el); + } + footer.receiveProps(__assign({ layout: footerLayout }, toolbarProps), context); + } + else if (footer) { + footer.destroy(); + footer = this.footer = null; + } + }; + CalendarComponent.prototype._unrenderToolbars = function () { + if (this.header) { + this.header.destroy(); + this.header = null; + } + if (this.footer) { + this.footer.destroy(); + this.footer = null; + } + }; + CalendarComponent.prototype.renderView = function (props, title) { + var view = this.view; + var _a = this.context, calendar = _a.calendar, options = _a.options; + var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator; + if (!view || view.viewSpec !== viewSpec) { + if (view) { + view.destroy(); + } + view = this.view = new viewSpec['class'](viewSpec, this.contentEl); + if (this.savedScroll) { + view.addScroll(this.savedScroll, true); + this.savedScroll = null; + } + } + view.title = title; // for the API + var viewProps = { + dateProfileGenerator: dateProfileGenerator, + dateProfile: props.dateProfile, + businessHours: this.parseBusinessHours(viewSpec.options.businessHours), + eventStore: props.eventStore, + eventUiBases: props.eventUiBases, + dateSelection: props.dateSelection, + eventSelection: props.eventSelection, + eventDrag: props.eventDrag, + eventResize: props.eventResize + }; + var transformers = this.buildViewPropTransformers(calendar.pluginSystem.hooks.viewPropsTransformers); + for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) { + var transformer = transformers_1[_i]; + __assign(viewProps, transformer.transform(viewProps, viewSpec, props, options)); + } + view.receiveProps(viewProps, this.buildComponentContext(this.context, viewSpec, view)); + }; + // Sizing + // ----------------------------------------------------------------------------------------------------------------- + CalendarComponent.prototype.updateSize = function (isResize) { + if (isResize === void 0) { isResize = false; } + var view = this.view; + if (!view) { + return; // why? + } + if (isResize || this.isHeightAuto == null) { + this.computeHeightVars(); + } + view.updateSize(isResize, this.viewHeight, this.isHeightAuto); + view.updateNowIndicator(); // we need to guarantee this will run after updateSize + view.popScroll(isResize); + }; + CalendarComponent.prototype.computeHeightVars = function () { + var calendar = this.context.calendar; // yuck. need to handle dynamic options + var heightInput = calendar.opt('height'); + var contentHeightInput = calendar.opt('contentHeight'); + this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto'; + if (typeof contentHeightInput === 'number') { // exists and not 'auto' + this.viewHeight = contentHeightInput; + } + else if (typeof contentHeightInput === 'function') { // exists and is a function + this.viewHeight = contentHeightInput(); + } + else if (typeof heightInput === 'number') { // exists and not 'auto' + this.viewHeight = heightInput - this.queryToolbarsHeight(); + } + else if (typeof heightInput === 'function') { // exists and is a function + this.viewHeight = heightInput() - this.queryToolbarsHeight(); + } + else if (heightInput === 'parent') { // set to height of parent element + var parentEl = this.el.parentNode; + this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight(); + } + else { + this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width / + Math.max(calendar.opt('aspectRatio'), .5)); + } + }; + CalendarComponent.prototype.queryToolbarsHeight = function () { + var height = 0; + if (this.header) { + height += computeHeightAndMargins(this.header.el); + } + if (this.footer) { + height += computeHeightAndMargins(this.footer.el); + } + return height; + }; + // Height "Freezing" + // ----------------------------------------------------------------------------------------------------------------- + CalendarComponent.prototype.freezeHeight = function () { + applyStyle(this.el, { + height: this.el.getBoundingClientRect().height, + overflow: 'hidden' + }); + }; + CalendarComponent.prototype.thawHeight = function () { + applyStyle(this.el, { + height: '', + overflow: '' + }); + }; + return CalendarComponent; +}(Component)); +// Title and Date Formatting +// ----------------------------------------------------------------------------------------------------------------- +// Computes what the title at the top of the calendar should be for this view +function computeTitle(dateProfile, viewOptions) { + var range; + // for views that span a large unit of time, show the proper interval, ignoring stray days before and after + if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) { + range = dateProfile.currentRange; + } + else { // for day units or smaller, use the actual day range + range = dateProfile.activeRange; + } + return this.context.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay }); +} +// Generates the format string that should be used to generate the title for the current date range. +// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`. +function computeTitleFormat(dateProfile) { + var currentRangeUnit = dateProfile.currentRangeUnit; + if (currentRangeUnit === 'year') { + return { year: 'numeric' }; + } + else if (currentRangeUnit === 'month') { + return { year: 'numeric', month: 'long' }; // like "September 2014" + } + else { + var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end); + if (days !== null && days > 1) { + // multi-day range. shorter, like "Sep 9 - 10 2014" + return { year: 'numeric', month: 'short', day: 'numeric' }; + } + else { + // one day. longer, like "September 9 2014" + return { year: 'numeric', month: 'long', day: 'numeric' }; + } + } +} +// build a context scoped to the view +function buildComponentContext(context, viewSpec, view) { + return context.extend(viewSpec.options, view); +} +// Plugin +// ----------------------------------------------------------------------------------------------------------------- +function buildViewPropTransformers(theClasses) { + return theClasses.map(function (theClass) { + return new theClass(); + }); +} + +var Interaction = /** @class */ (function () { + function Interaction(settings) { + this.component = settings.component; + } + Interaction.prototype.destroy = function () { + }; + return Interaction; +}()); +function parseInteractionSettings(component, input) { + return { + component: component, + el: input.el, + useEventCenter: input.useEventCenter != null ? input.useEventCenter : true + }; +} +function interactionSettingsToStore(settings) { + var _a; + return _a = {}, + _a[settings.component.uid] = settings, + _a; +} +// global state +var interactionSettingsStore = {}; + +/* +Detects when the user clicks on an event within a DateComponent +*/ +var EventClicking = /** @class */ (function (_super) { + __extends(EventClicking, _super); + function EventClicking(settings) { + var _this = _super.call(this, settings) || this; + _this.handleSegClick = function (ev, segEl) { + var component = _this.component; + var _a = component.context, calendar = _a.calendar, view = _a.view; + var seg = getElSeg(segEl); + if (seg && // might be the
surrounding the more link + component.isValidSegDownEl(ev.target)) { + // our way to simulate a link click for elements that can't be tags + // grab before trigger fired in case trigger trashes DOM thru rerendering + var hasUrlContainer = elementClosest(ev.target, '.fc-has-url'); + var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : ''; + calendar.publiclyTrigger('eventClick', [ + { + el: segEl, + event: new EventApi(component.context.calendar, seg.eventRange.def, seg.eventRange.instance), + jsEvent: ev, + view: view + } + ]); + if (url && !ev.defaultPrevented) { + window.location.href = url; + } + } + }; + var component = settings.component; + _this.destroy = listenBySelector(component.el, 'click', component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegClick); + return _this; + } + return EventClicking; +}(Interaction)); + +/* +Triggers events and adds/removes core classNames when the user's pointer +enters/leaves event-elements of a component. +*/ +var EventHovering = /** @class */ (function (_super) { + __extends(EventHovering, _super); + function EventHovering(settings) { + var _this = _super.call(this, settings) || this; + // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it + _this.handleEventElRemove = function (el) { + if (el === _this.currentSegEl) { + _this.handleSegLeave(null, _this.currentSegEl); + } + }; + _this.handleSegEnter = function (ev, segEl) { + if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper + segEl.classList.add('fc-allow-mouse-resize'); + _this.currentSegEl = segEl; + _this.triggerEvent('eventMouseEnter', ev, segEl); + } + }; + _this.handleSegLeave = function (ev, segEl) { + if (_this.currentSegEl) { + segEl.classList.remove('fc-allow-mouse-resize'); + _this.currentSegEl = null; + _this.triggerEvent('eventMouseLeave', ev, segEl); + } + }; + var component = settings.component; + _this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave); + // how to make sure component already has context? + component.context.calendar.on('eventElRemove', _this.handleEventElRemove); + return _this; + } + EventHovering.prototype.destroy = function () { + this.removeHoverListeners(); + this.component.context.calendar.off('eventElRemove', this.handleEventElRemove); + }; + EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) { + var component = this.component; + var _a = component.context, calendar = _a.calendar, view = _a.view; + var seg = getElSeg(segEl); + if (!ev || component.isValidSegDownEl(ev.target)) { + calendar.publiclyTrigger(publicEvName, [ + { + el: segEl, + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + jsEvent: ev, + view: view + } + ]); + } + }; + return EventHovering; +}(Interaction)); + +var StandardTheme = /** @class */ (function (_super) { + __extends(StandardTheme, _super); + function StandardTheme() { + return _super !== null && _super.apply(this, arguments) || this; + } + return StandardTheme; +}(Theme)); +StandardTheme.prototype.classes = { + widget: 'fc-unthemed', + widgetHeader: 'fc-widget-header', + widgetContent: 'fc-widget-content', + buttonGroup: 'fc-button-group', + button: 'fc-button fc-button-primary', + buttonActive: 'fc-button-active', + popoverHeader: 'fc-widget-header', + popoverContent: 'fc-widget-content', + // day grid + headerRow: 'fc-widget-header', + dayRow: 'fc-widget-content', + // list view + listView: 'fc-widget-content' +}; +StandardTheme.prototype.baseIconClass = 'fc-icon'; +StandardTheme.prototype.iconClasses = { + close: 'fc-icon-x', + prev: 'fc-icon-chevron-left', + next: 'fc-icon-chevron-right', + prevYear: 'fc-icon-chevrons-left', + nextYear: 'fc-icon-chevrons-right' +}; +StandardTheme.prototype.iconOverrideOption = 'buttonIcons'; +StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon'; +StandardTheme.prototype.iconOverridePrefix = 'fc-icon-'; + +var Calendar = /** @class */ (function () { + function Calendar(el, overrides) { + var _this = this; + this.buildComponentContext = memoize(buildComponentContext$1); + this.parseRawLocales = memoize(parseRawLocales); + this.buildLocale = memoize(buildLocale); + this.buildDateEnv = memoize(buildDateEnv); + this.buildTheme = memoize(buildTheme); + this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase); + this.buildSelectionConfig = memoize(this._buildSelectionConfig); + this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual); + this.buildEventUiBases = memoize(buildEventUiBases); + this.interactionsStore = {}; + this.actionQueue = []; + this.isReducing = false; + // isDisplaying: boolean = false // installed in DOM? accepting renders? + this.needsRerender = false; // needs a render? + this.isRendering = false; // currently in the executeRender function? + this.renderingPauseDepth = 0; + this.buildDelayedRerender = memoize(buildDelayedRerender); + this.afterSizingTriggers = {}; + this.isViewUpdated = false; + this.isDatesUpdated = false; + this.isEventsUpdated = false; + this.el = el; + this.optionsManager = new OptionsManager(overrides || {}); + this.pluginSystem = new PluginSystem(); + // only do once. don't do in handleOptions. because can't remove plugins + this.addPluginInputs(this.optionsManager.computed.plugins || []); + this.handleOptions(this.optionsManager.computed); + this.publiclyTrigger('_init'); // for tests + this.hydrate(); + this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions + .map(function (calendarInteractionClass) { + return new calendarInteractionClass(_this); + }); + } + Calendar.prototype.addPluginInputs = function (pluginInputs) { + var pluginDefs = refinePluginDefs(pluginInputs); + for (var _i = 0, pluginDefs_1 = pluginDefs; _i < pluginDefs_1.length; _i++) { + var pluginDef = pluginDefs_1[_i]; + this.pluginSystem.add(pluginDef); + } + }; + Object.defineProperty(Calendar.prototype, "view", { + // public API + get: function () { + return this.component ? this.component.view : null; + }, + enumerable: true, + configurable: true + }); + // Public API for rendering + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.render = function () { + if (!this.component) { + this.component = new CalendarComponent(this.el); + this.renderableEventStore = createEmptyEventStore(); + this.bindHandlers(); + this.executeRender(); + } + else { + this.requestRerender(); + } + }; + Calendar.prototype.destroy = function () { + if (this.component) { + this.unbindHandlers(); + this.component.destroy(); // don't null-out. in case API needs access + this.component = null; // umm ??? + for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) { + var interaction = _a[_i]; + interaction.destroy(); + } + this.publiclyTrigger('_destroyed'); + } + }; + // Handlers + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.bindHandlers = function () { + var _this = this; + // event delegation for nav links + this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', function (ev, anchorEl) { + var gotoOptions = anchorEl.getAttribute('data-goto'); + gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {}; + var dateEnv = _this.dateEnv; + var dateMarker = dateEnv.createMarker(gotoOptions.date); + var viewType = gotoOptions.type; + // property like "navLinkDayClick". might be a string or a function + var customAction = _this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click'); + if (typeof customAction === 'function') { + customAction(dateEnv.toDate(dateMarker), ev); + } + else { + if (typeof customAction === 'string') { + viewType = customAction; + } + _this.zoomTo(dateMarker, viewType); + } + }); + if (this.opt('handleWindowResize')) { + window.addEventListener('resize', this.windowResizeProxy = debounce(// prevents rapid calls + this.windowResize.bind(this), this.opt('windowResizeDelay'))); + } + }; + Calendar.prototype.unbindHandlers = function () { + this.removeNavLinkListener(); + if (this.windowResizeProxy) { + window.removeEventListener('resize', this.windowResizeProxy); + this.windowResizeProxy = null; + } + }; + // Dispatcher + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.hydrate = function () { + var _this = this; + this.state = this.buildInitialState(); + var rawSources = this.opt('eventSources') || []; + var singleRawSource = this.opt('events'); + var sources = []; // parsed + if (singleRawSource) { + rawSources.unshift(singleRawSource); + } + for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) { + var rawSource = rawSources_1[_i]; + var source = parseEventSource(rawSource, this); + if (source) { + sources.push(source); + } + } + this.batchRendering(function () { + _this.dispatch({ type: 'INIT' }); // pass in sources here? + _this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: sources }); + _this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: _this.opt('defaultView') || _this.pluginSystem.hooks.defaultView + }); + }); + }; + Calendar.prototype.buildInitialState = function () { + return { + viewType: null, + loadingLevel: 0, + eventSourceLoadingLevel: 0, + currentDate: this.getInitialDate(), + dateProfile: null, + eventSources: {}, + eventStore: createEmptyEventStore(), + dateSelection: null, + eventSelection: '', + eventDrag: null, + eventResize: null + }; + }; + Calendar.prototype.dispatch = function (action) { + this.actionQueue.push(action); + if (!this.isReducing) { + this.isReducing = true; + var oldState = this.state; + while (this.actionQueue.length) { + this.state = this.reduce(this.state, this.actionQueue.shift(), this); + } + var newState = this.state; + this.isReducing = false; + if (!oldState.loadingLevel && newState.loadingLevel) { + this.publiclyTrigger('loading', [true]); + } + else if (oldState.loadingLevel && !newState.loadingLevel) { + this.publiclyTrigger('loading', [false]); + } + var view = this.component && this.component.view; + if (oldState.eventStore !== newState.eventStore) { + if (oldState.eventStore) { + this.isEventsUpdated = true; + } + } + if (oldState.dateProfile !== newState.dateProfile) { + if (oldState.dateProfile && view) { // why would view be null!? + this.publiclyTrigger('datesDestroy', [ + { + view: view, + el: view.el + } + ]); + } + this.isDatesUpdated = true; + } + if (oldState.viewType !== newState.viewType) { + if (oldState.viewType && view) { // why would view be null!? + this.publiclyTrigger('viewSkeletonDestroy', [ + { + view: view, + el: view.el + } + ]); + } + this.isViewUpdated = true; + } + this.requestRerender(); + } + }; + Calendar.prototype.reduce = function (state, action, calendar) { + return reduce(state, action, calendar); + }; + // Render Queue + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.requestRerender = function () { + this.needsRerender = true; + this.delayedRerender(); // will call a debounced-version of tryRerender + }; + Calendar.prototype.tryRerender = function () { + if (this.component && // must be accepting renders + this.needsRerender && // indicates that a rerender was requested + !this.renderingPauseDepth && // not paused + !this.isRendering // not currently in the render loop + ) { + this.executeRender(); + } + }; + Calendar.prototype.batchRendering = function (func) { + this.renderingPauseDepth++; + func(); + this.renderingPauseDepth--; + if (this.needsRerender) { + this.requestRerender(); + } + }; + // Rendering + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.executeRender = function () { + // clear these BEFORE the render so that new values will accumulate during render + this.needsRerender = false; + this.isRendering = true; + this.renderComponent(); + this.isRendering = false; + // received a rerender request while rendering + if (this.needsRerender) { + this.delayedRerender(); + } + }; + /* + don't call this directly. use executeRender instead + */ + Calendar.prototype.renderComponent = function () { + var _a = this, state = _a.state, component = _a.component; + var viewType = state.viewType; + var viewSpec = this.viewSpecs[viewType]; + if (!viewSpec) { + throw new Error("View type \"" + viewType + "\" is not valid"); + } + // if event sources are still loading and progressive rendering hasn't been enabled, + // keep rendering the last fully loaded set of events + var renderableEventStore = this.renderableEventStore = + (state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering')) ? + this.renderableEventStore : + state.eventStore; + var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options); + var eventUiBySource = this.buildEventUiBySource(state.eventSources); + var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource); + component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfileGenerator: this.dateProfileGenerators[viewType], dateProfile: state.dateProfile, eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }), this.buildComponentContext(this.theme, this.dateEnv, this.optionsManager.computed)); + if (this.isViewUpdated) { + this.isViewUpdated = false; + this.publiclyTrigger('viewSkeletonRender', [ + { + view: component.view, + el: component.view.el + } + ]); + } + if (this.isDatesUpdated) { + this.isDatesUpdated = false; + this.publiclyTrigger('datesRender', [ + { + view: component.view, + el: component.view.el + } + ]); + } + if (this.isEventsUpdated) { + this.isEventsUpdated = false; + } + this.releaseAfterSizingTriggers(); + }; + // Options + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.setOption = function (name, val) { + var _a; + this.mutateOptions((_a = {}, _a[name] = val, _a), [], true); + }; + Calendar.prototype.getOption = function (name) { + return this.optionsManager.computed[name]; + }; + Calendar.prototype.opt = function (name) { + return this.optionsManager.computed[name]; + }; + Calendar.prototype.viewOpt = function (name) { + return this.viewOpts()[name]; + }; + Calendar.prototype.viewOpts = function () { + return this.viewSpecs[this.state.viewType].options; + }; + /* + handles option changes (like a diff) + */ + Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) { + var _this = this; + var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers; + var normalUpdates = {}; + var specialUpdates = {}; + var oldDateEnv = this.dateEnv; // do this before handleOptions + var isTimeZoneDirty = false; + var isSizeDirty = false; + var anyDifficultOptions = Boolean(removals.length); + for (var name_1 in updates) { + if (changeHandlers[name_1]) { + specialUpdates[name_1] = updates[name_1]; + } + else { + normalUpdates[name_1] = updates[name_1]; + } + } + for (var name_2 in normalUpdates) { + if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) { + isSizeDirty = true; + } + else if (/^(defaultDate|defaultView)$/.test(name_2)) ; + else { + anyDifficultOptions = true; + if (name_2 === 'timeZone') { + isTimeZoneDirty = true; + } + } + } + this.optionsManager.mutate(normalUpdates, removals, isDynamic); + if (anyDifficultOptions) { + this.handleOptions(this.optionsManager.computed); + } + this.batchRendering(function () { + if (anyDifficultOptions) { + if (isTimeZoneDirty) { + _this.dispatch({ + type: 'CHANGE_TIMEZONE', + oldDateEnv: oldDateEnv + }); + } + /* HACK + has the same effect as calling this.requestRerender() + but recomputes the state's dateProfile + */ + _this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: _this.state.viewType + }); + } + else if (isSizeDirty) { + _this.updateSize(); + } + // special updates + if (deepEqual) { + for (var name_3 in specialUpdates) { + changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual); + } + } + }); + }; + /* + rebuilds things based off of a complete set of refined options + */ + Calendar.prototype.handleOptions = function (options) { + var _this = this; + var pluginHooks = this.pluginSystem.hooks; + this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration); + this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration); + this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay); + this.theme = this.buildTheme(options); + var available = this.parseRawLocales(options.locales); + this.availableRawLocales = available.map; + var locale = this.buildLocale(options.locale || available.defaultCode, available.map); + this.dateEnv = this.buildDateEnv(locale, options.timeZone, pluginHooks.namedTimeZonedImpl, options.firstDay, options.weekNumberCalculation, options.weekLabel, pluginHooks.cmdFormatter); + this.selectionConfig = this.buildSelectionConfig(options); // needs dateEnv. do after :( + // ineffecient to do every time? + this.viewSpecs = buildViewSpecs(pluginHooks.views, this.optionsManager); + // ineffecient to do every time? + this.dateProfileGenerators = mapHash(this.viewSpecs, function (viewSpec) { + return new viewSpec.class.prototype.dateProfileGeneratorClass(viewSpec, _this); + }); + }; + Calendar.prototype.getAvailableLocaleCodes = function () { + return Object.keys(this.availableRawLocales); + }; + Calendar.prototype._buildSelectionConfig = function (rawOpts) { + return processScopedUiProps('select', rawOpts, this); + }; + Calendar.prototype._buildEventUiSingleBase = function (rawOpts) { + if (rawOpts.editable) { // so 'editable' affected events + rawOpts = __assign({}, rawOpts, { eventEditable: true }); + } + return processScopedUiProps('event', rawOpts, this); + }; + // Trigger + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.hasPublicHandlers = function (name) { + return this.hasHandlers(name) || + this.opt(name); // handler specified in options + }; + Calendar.prototype.publiclyTrigger = function (name, args) { + var optHandler = this.opt(name); + this.triggerWith(name, this, args); + if (optHandler) { + return optHandler.apply(this, args); + } + }; + Calendar.prototype.publiclyTriggerAfterSizing = function (name, args) { + var afterSizingTriggers = this.afterSizingTriggers; + (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args); + }; + Calendar.prototype.releaseAfterSizingTriggers = function () { + var afterSizingTriggers = this.afterSizingTriggers; + for (var name_4 in afterSizingTriggers) { + for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) { + var args = _a[_i]; + this.publiclyTrigger(name_4, args); + } + } + this.afterSizingTriggers = {}; + }; + // View + // ----------------------------------------------------------------------------------------------------------------- + // Returns a boolean about whether the view is okay to instantiate at some point + Calendar.prototype.isValidViewType = function (viewType) { + return Boolean(this.viewSpecs[viewType]); + }; + Calendar.prototype.changeView = function (viewType, dateOrRange) { + var dateMarker = null; + if (dateOrRange) { + if (dateOrRange.start && dateOrRange.end) { // a range + this.optionsManager.mutate({ visibleRange: dateOrRange }, []); // will not rerender + this.handleOptions(this.optionsManager.computed); // ...but yuck + } + else { // a date + dateMarker = this.dateEnv.createMarker(dateOrRange); // just like gotoDate + } + } + this.unselect(); + this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: viewType, + dateMarker: dateMarker + }); + }; + // Forces navigation to a view for the given date. + // `viewType` can be a specific view name or a generic one like "week" or "day". + // needs to change + Calendar.prototype.zoomTo = function (dateMarker, viewType) { + var spec; + viewType = viewType || 'day'; // day is default zoom + spec = this.viewSpecs[viewType] || + this.getUnitViewSpec(viewType); + this.unselect(); + if (spec) { + this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: spec.type, + dateMarker: dateMarker + }); + } + else { + this.dispatch({ + type: 'SET_DATE', + dateMarker: dateMarker + }); + } + }; + // Given a duration singular unit, like "week" or "day", finds a matching view spec. + // Preference is given to views that have corresponding buttons. + Calendar.prototype.getUnitViewSpec = function (unit) { + var component = this.component; + var viewTypes = []; + var i; + var spec; + // put views that have buttons first. there will be duplicates, but oh + if (component.header) { + viewTypes.push.apply(viewTypes, component.header.viewsWithButtons); + } + if (component.footer) { + viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons); + } + for (var viewType in this.viewSpecs) { + viewTypes.push(viewType); + } + for (i = 0; i < viewTypes.length; i++) { + spec = this.viewSpecs[viewTypes[i]]; + if (spec) { + if (spec.singleUnit === unit) { + return spec; + } + } + } + }; + // Current Date + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.getInitialDate = function () { + var defaultDateInput = this.opt('defaultDate'); + // compute the initial ambig-timezone date + if (defaultDateInput != null) { + return this.dateEnv.createMarker(defaultDateInput); + } + else { + return this.getNow(); // getNow already returns unzoned + } + }; + Calendar.prototype.prev = function () { + this.unselect(); + this.dispatch({ type: 'PREV' }); + }; + Calendar.prototype.next = function () { + this.unselect(); + this.dispatch({ type: 'NEXT' }); + }; + Calendar.prototype.prevYear = function () { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.addYears(this.state.currentDate, -1) + }); + }; + Calendar.prototype.nextYear = function () { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.addYears(this.state.currentDate, 1) + }); + }; + Calendar.prototype.today = function () { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.getNow() + }); + }; + Calendar.prototype.gotoDate = function (zonedDateInput) { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.createMarker(zonedDateInput) + }); + }; + Calendar.prototype.incrementDate = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // else, warn about invalid input? + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.add(this.state.currentDate, delta) + }); + } + }; + // for external API + Calendar.prototype.getDate = function () { + return this.dateEnv.toDate(this.state.currentDate); + }; + // Date Formatting Utils + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.formatDate = function (d, formatter) { + var dateEnv = this.dateEnv; + return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter)); + }; + // `settings` is for formatter AND isEndExclusive + Calendar.prototype.formatRange = function (d0, d1, settings) { + var dateEnv = this.dateEnv; + return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings, this.opt('defaultRangeSeparator')), settings); + }; + Calendar.prototype.formatIso = function (d, omitTime) { + var dateEnv = this.dateEnv; + return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime }); + }; + // Sizing + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.windowResize = function (ev) { + if (!this.isHandlingWindowResize && + this.component && // why? + ev.target === window // not a jqui resize event + ) { + this.isHandlingWindowResize = true; + this.updateSize(); + this.publiclyTrigger('windowResize', [this.view]); + this.isHandlingWindowResize = false; + } + }; + Calendar.prototype.updateSize = function () { + if (this.component) { // when? + this.component.updateSize(true); + } + }; + // Component Registration + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.registerInteractiveComponent = function (component, settingsInput) { + var settings = parseInteractionSettings(component, settingsInput); + var DEFAULT_INTERACTIONS = [ + EventClicking, + EventHovering + ]; + var interactionClasses = DEFAULT_INTERACTIONS.concat(this.pluginSystem.hooks.componentInteractions); + var interactions = interactionClasses.map(function (interactionClass) { + return new interactionClass(settings); + }); + this.interactionsStore[component.uid] = interactions; + interactionSettingsStore[component.uid] = settings; + }; + Calendar.prototype.unregisterInteractiveComponent = function (component) { + for (var _i = 0, _a = this.interactionsStore[component.uid]; _i < _a.length; _i++) { + var listener = _a[_i]; + listener.destroy(); + } + delete this.interactionsStore[component.uid]; + delete interactionSettingsStore[component.uid]; + }; + // Date Selection / Event Selection / DayClick + // ----------------------------------------------------------------------------------------------------------------- + // this public method receives start/end dates in any format, with any timezone + // NOTE: args were changed from v3 + Calendar.prototype.select = function (dateOrObj, endDate) { + var selectionInput; + if (endDate == null) { + if (dateOrObj.start != null) { + selectionInput = dateOrObj; + } + else { + selectionInput = { + start: dateOrObj, + end: null + }; + } + } + else { + selectionInput = { + start: dateOrObj, + end: endDate + }; + } + var selection = parseDateSpan(selectionInput, this.dateEnv, createDuration({ days: 1 }) // TODO: cache this? + ); + if (selection) { // throw parse error otherwise? + this.dispatch({ type: 'SELECT_DATES', selection: selection }); + this.triggerDateSelect(selection); + } + }; + // public method + Calendar.prototype.unselect = function (pev) { + if (this.state.dateSelection) { + this.dispatch({ type: 'UNSELECT_DATES' }); + this.triggerDateUnselect(pev); + } + }; + Calendar.prototype.triggerDateSelect = function (selection, pev) { + var arg = __assign({}, this.buildDateSpanApi(selection), { jsEvent: pev ? pev.origEvent : null, view: this.view }); + this.publiclyTrigger('select', [arg]); + }; + Calendar.prototype.triggerDateUnselect = function (pev) { + this.publiclyTrigger('unselect', [ + { + jsEvent: pev ? pev.origEvent : null, + view: this.view + } + ]); + }; + // TODO: receive pev? + Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) { + var arg = __assign({}, this.buildDatePointApi(dateSpan), { dayEl: dayEl, jsEvent: ev, // Is this always a mouse event? See #4655 + view: view }); + this.publiclyTrigger('dateClick', [arg]); + }; + Calendar.prototype.buildDatePointApi = function (dateSpan) { + var props = {}; + for (var _i = 0, _a = this.pluginSystem.hooks.datePointTransforms; _i < _a.length; _i++) { + var transform = _a[_i]; + __assign(props, transform(dateSpan, this)); + } + __assign(props, buildDatePointApi(dateSpan, this.dateEnv)); + return props; + }; + Calendar.prototype.buildDateSpanApi = function (dateSpan) { + var props = {}; + for (var _i = 0, _a = this.pluginSystem.hooks.dateSpanTransforms; _i < _a.length; _i++) { + var transform = _a[_i]; + __assign(props, transform(dateSpan, this)); + } + __assign(props, buildDateSpanApi(dateSpan, this.dateEnv)); + return props; + }; + // Date Utils + // ----------------------------------------------------------------------------------------------------------------- + // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option + Calendar.prototype.getNow = function () { + var now = this.opt('now'); + if (typeof now === 'function') { + now = now(); + } + if (now == null) { + return this.dateEnv.createNowMarker(); + } + return this.dateEnv.createMarker(now); + }; + // Event-Date Utilities + // ----------------------------------------------------------------------------------------------------------------- + // Given an event's allDay status and start date, return what its fallback end date should be. + // TODO: rename to computeDefaultEventEnd + Calendar.prototype.getDefaultEventEnd = function (allDay, marker) { + var end = marker; + if (allDay) { + end = startOfDay(end); + end = this.dateEnv.add(end, this.defaultAllDayEventDuration); + } + else { + end = this.dateEnv.add(end, this.defaultTimedEventDuration); + } + return end; + }; + // Public Events API + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.addEvent = function (eventInput, sourceInput) { + if (eventInput instanceof EventApi) { + var def = eventInput._def; + var instance = eventInput._instance; + // not already present? don't want to add an old snapshot + if (!this.state.eventStore.defs[def.defId]) { + this.dispatch({ + type: 'ADD_EVENTS', + eventStore: eventTupleToStore({ def: def, instance: instance }) // TODO: better util for two args? + }); + } + return eventInput; + } + var sourceId; + if (sourceInput instanceof EventSourceApi) { + sourceId = sourceInput.internalEventSource.sourceId; + } + else if (sourceInput != null) { + var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function + if (!sourceApi) { + console.warn('Could not find an event source with ID "' + sourceInput + '"'); // TODO: test + return null; + } + else { + sourceId = sourceApi.internalEventSource.sourceId; + } + } + var tuple = parseEvent(eventInput, sourceId, this); + if (tuple) { + this.dispatch({ + type: 'ADD_EVENTS', + eventStore: eventTupleToStore(tuple) + }); + return new EventApi(this, tuple.def, tuple.def.recurringDef ? null : tuple.instance); + } + return null; + }; + // TODO: optimize + Calendar.prototype.getEventById = function (id) { + var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances; + id = String(id); + for (var defId in defs) { + var def = defs[defId]; + if (def.publicId === id) { + if (def.recurringDef) { + return new EventApi(this, def, null); + } + else { + for (var instanceId in instances) { + var instance = instances[instanceId]; + if (instance.defId === def.defId) { + return new EventApi(this, def, instance); + } + } + } + } + } + return null; + }; + Calendar.prototype.getEvents = function () { + var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances; + var eventApis = []; + for (var id in instances) { + var instance = instances[id]; + var def = defs[instance.defId]; + eventApis.push(new EventApi(this, def, instance)); + } + return eventApis; + }; + Calendar.prototype.removeAllEvents = function () { + this.dispatch({ type: 'REMOVE_ALL_EVENTS' }); + }; + Calendar.prototype.rerenderEvents = function () { + this.dispatch({ type: 'RESET_EVENTS' }); + }; + // Public Event Sources API + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.getEventSources = function () { + var sourceHash = this.state.eventSources; + var sourceApis = []; + for (var internalId in sourceHash) { + sourceApis.push(new EventSourceApi(this, sourceHash[internalId])); + } + return sourceApis; + }; + Calendar.prototype.getEventSourceById = function (id) { + var sourceHash = this.state.eventSources; + id = String(id); + for (var sourceId in sourceHash) { + if (sourceHash[sourceId].publicId === id) { + return new EventSourceApi(this, sourceHash[sourceId]); + } + } + return null; + }; + Calendar.prototype.addEventSource = function (sourceInput) { + if (sourceInput instanceof EventSourceApi) { + // not already present? don't want to add an old snapshot + if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) { + this.dispatch({ + type: 'ADD_EVENT_SOURCES', + sources: [sourceInput.internalEventSource] + }); + } + return sourceInput; + } + var eventSource = parseEventSource(sourceInput, this); + if (eventSource) { // TODO: error otherwise? + this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] }); + return new EventSourceApi(this, eventSource); + } + return null; + }; + Calendar.prototype.removeAllEventSources = function () { + this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' }); + }; + Calendar.prototype.refetchEvents = function () { + this.dispatch({ type: 'FETCH_EVENT_SOURCES' }); + }; + // Scroll + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.scrollToTime = function (timeInput) { + var duration = createDuration(timeInput); + if (duration) { + this.component.view.scrollToDuration(duration); + } + }; + return Calendar; +}()); +EmitterMixin.mixInto(Calendar); +// for memoizers +// ----------------------------------------------------------------------------------------------------------------- +function buildComponentContext$1(theme, dateEnv, options) { + return new ComponentContext(this, theme, dateEnv, options, null); +} +function buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) { + return new DateEnv({ + calendarSystem: 'gregory', + timeZone: timeZone, + namedTimeZoneImpl: namedTimeZoneImpl, + locale: locale, + weekNumberCalculation: weekNumberCalculation, + firstDay: firstDay, + weekLabel: weekLabel, + cmdFormatter: cmdFormatter + }); +} +function buildTheme(calendarOptions) { + var themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme; + return new themeClass(calendarOptions); +} +function buildDelayedRerender(wait) { + var func = this.tryRerender.bind(this); + if (wait != null) { + func = debounce(func, wait); + } + return func; +} +function buildEventUiBySource(eventSources) { + return mapHash(eventSources, function (eventSource) { + return eventSource.ui; + }); +} +function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) { + var eventUiBases = { '': eventUiSingleBase }; + for (var defId in eventDefs) { + var def = eventDefs[defId]; + if (def.sourceId && eventUiBySource[def.sourceId]) { + eventUiBases[defId] = eventUiBySource[def.sourceId]; + } + } + return eventUiBases; +} + +var View = /** @class */ (function (_super) { + __extends(View, _super); + function View(viewSpec, parentEl) { + var _this = _super.call(this, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })) || this; + _this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap); + _this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]); + _this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]); + _this.renderEventsMem = memoizeRendering(_this.renderEvents, _this.unrenderEvents, [_this.renderDatesMem]); + _this.renderEventSelectionMem = memoizeRendering(_this.renderEventSelectionWrap, _this.unrenderEventSelectionWrap, [_this.renderEventsMem]); + _this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]); + _this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]); + _this.viewSpec = viewSpec; + _this.type = viewSpec.type; + parentEl.appendChild(_this.el); + _this.initialize(); + return _this; + } + View.prototype.initialize = function () { + }; + Object.defineProperty(View.prototype, "activeStart", { + // Date Setting/Unsetting + // ----------------------------------------------------------------------------------------------------------------- + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(View.prototype, "activeEnd", { + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(View.prototype, "currentStart", { + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(View.prototype, "currentEnd", { + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end); + }, + enumerable: true, + configurable: true + }); + // General Rendering + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.render = function (props, context) { + this.renderDatesMem(props.dateProfile); + this.renderBusinessHoursMem(props.businessHours); + this.renderDateSelectionMem(props.dateSelection); + this.renderEventsMem(props.eventStore); + this.renderEventSelectionMem(props.eventSelection); + this.renderEventDragMem(props.eventDrag); + this.renderEventResizeMem(props.eventResize); + }; + View.prototype.beforeUpdate = function () { + this.addScroll(this.queryScroll()); + }; + View.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderDatesMem.unrender(); // should unrender everything else + }; + // Sizing + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.updateSize = function (isResize, viewHeight, isAuto) { + var calendar = this.context.calendar; + if (isResize) { + this.addScroll(this.queryScroll()); // NOTE: same code as in beforeUpdate + } + if (isResize || // HACKS... + calendar.isViewUpdated || + calendar.isDatesUpdated || + calendar.isEventsUpdated) { + // sort of the catch-all sizing + // anything that might cause dimension changes + this.updateBaseSize(isResize, viewHeight, isAuto); + } + // NOTE: popScroll is called by CalendarComponent + }; + View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) { + }; + // Date Rendering + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderDatesWrap = function (dateProfile) { + this.renderDates(dateProfile); + this.addScroll({ + duration: createDuration(this.context.options.scrollTime) + }); + }; + View.prototype.unrenderDatesWrap = function () { + this.stopNowIndicator(); + this.unrenderDates(); + }; + View.prototype.renderDates = function (dateProfile) { }; + View.prototype.unrenderDates = function () { }; + // Business Hours + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderBusinessHours = function (businessHours) { }; + View.prototype.unrenderBusinessHours = function () { }; + // Date Selection + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderDateSelectionWrap = function (selection) { + if (selection) { + this.renderDateSelection(selection); + } + }; + View.prototype.unrenderDateSelectionWrap = function (selection) { + if (selection) { + this.unrenderDateSelection(selection); + } + }; + View.prototype.renderDateSelection = function (selection) { }; + View.prototype.unrenderDateSelection = function (selection) { }; + // Event Rendering + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEvents = function (eventStore) { }; + View.prototype.unrenderEvents = function () { }; + // util for subclasses + View.prototype.sliceEvents = function (eventStore, allDay) { + var props = this.props; + return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.context.nextDayThreshold : null).fg; + }; + // Event Selection + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEventSelectionWrap = function (instanceId) { + if (instanceId) { + this.renderEventSelection(instanceId); + } + }; + View.prototype.unrenderEventSelectionWrap = function (instanceId) { + if (instanceId) { + this.unrenderEventSelection(instanceId); + } + }; + View.prototype.renderEventSelection = function (instanceId) { }; + View.prototype.unrenderEventSelection = function (instanceId) { }; + // Event Drag + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEventDragWrap = function (state) { + if (state) { + this.renderEventDrag(state); + } + }; + View.prototype.unrenderEventDragWrap = function (state) { + if (state) { + this.unrenderEventDrag(state); + } + }; + View.prototype.renderEventDrag = function (state) { }; + View.prototype.unrenderEventDrag = function (state) { }; + // Event Resize + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEventResizeWrap = function (state) { + if (state) { + this.renderEventResize(state); + } + }; + View.prototype.unrenderEventResizeWrap = function (state) { + if (state) { + this.unrenderEventResize(state); + } + }; + View.prototype.renderEventResize = function (state) { }; + View.prototype.unrenderEventResize = function (state) { }; + /* Now Indicator + ------------------------------------------------------------------------------------------------------------------*/ + // Immediately render the current time indicator and begins re-rendering it at an interval, + // which is defined by this.getNowIndicatorUnit(). + // TODO: somehow do this for the current whole day's background too + // USAGE: must be called manually from subclasses' render methods! don't need to call stopNowIndicator tho + View.prototype.startNowIndicator = function (dateProfile, dateProfileGenerator) { + var _this = this; + var _a = this.context, calendar = _a.calendar, dateEnv = _a.dateEnv, options = _a.options; + var unit; + var update; + var delay; // ms wait value + if (options.nowIndicator && !this.initialNowDate) { + unit = this.getNowIndicatorUnit(dateProfile, dateProfileGenerator); + if (unit) { + update = this.updateNowIndicator.bind(this); + this.initialNowDate = calendar.getNow(); + this.initialNowQueriedMs = new Date().valueOf(); + // wait until the beginning of the next interval + delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf(); + // TODO: maybe always use setTimeout, waiting until start of next unit + this.nowIndicatorTimeoutID = setTimeout(function () { + _this.nowIndicatorTimeoutID = null; + update(); + if (unit === 'second') { + delay = 1000; // every second + } + else { + delay = 1000 * 60; // otherwise, every minute + } + _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval + }, delay); + } + // rendering will be initiated in updateSize + } + }; + // rerenders the now indicator, computing the new current time from the amount of time that has passed + // since the initial getNow call. + View.prototype.updateNowIndicator = function () { + if (this.props.dateProfile && // a way to determine if dates were rendered yet + this.initialNowDate // activated before? + ) { + this.unrenderNowIndicator(); // won't unrender if unnecessary + this.renderNowIndicator(addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs)); + this.isNowIndicatorRendered = true; + } + }; + // Immediately unrenders the view's current time indicator and stops any re-rendering timers. + // Won't cause side effects if indicator isn't rendered. + View.prototype.stopNowIndicator = function () { + if (this.nowIndicatorTimeoutID) { + clearTimeout(this.nowIndicatorTimeoutID); + this.nowIndicatorTimeoutID = null; + } + if (this.nowIndicatorIntervalID) { + clearInterval(this.nowIndicatorIntervalID); + this.nowIndicatorIntervalID = null; + } + if (this.isNowIndicatorRendered) { + this.unrenderNowIndicator(); + this.isNowIndicatorRendered = false; + } + }; + View.prototype.getNowIndicatorUnit = function (dateProfile, dateProfileGenerator) { + // subclasses should implement + }; + // Renders a current time indicator at the given datetime + View.prototype.renderNowIndicator = function (date) { + // SUBCLASSES MUST PASS TO CHILDREN! + }; + // Undoes the rendering actions from renderNowIndicator + View.prototype.unrenderNowIndicator = function () { + // SUBCLASSES MUST PASS TO CHILDREN! + }; + /* Scroller + ------------------------------------------------------------------------------------------------------------------*/ + View.prototype.addScroll = function (scroll, isForced) { + if (isForced) { + scroll.isForced = isForced; + } + __assign(this.queuedScroll || (this.queuedScroll = {}), scroll); + }; + View.prototype.popScroll = function (isResize) { + this.applyQueuedScroll(isResize); + this.queuedScroll = null; + }; + View.prototype.applyQueuedScroll = function (isResize) { + if (this.queuedScroll) { + this.applyScroll(this.queuedScroll, isResize); + } + }; + View.prototype.queryScroll = function () { + var scroll = {}; + if (this.props.dateProfile) { // dates rendered yet? + __assign(scroll, this.queryDateScroll()); + } + return scroll; + }; + View.prototype.applyScroll = function (scroll, isResize) { + var duration = scroll.duration, isForced = scroll.isForced; + if (duration != null && !isForced) { + delete scroll.duration; + if (this.props.dateProfile) { // dates rendered yet? + __assign(scroll, this.computeDateScroll(duration)); + } + } + if (this.props.dateProfile) { // dates rendered yet? + this.applyDateScroll(scroll); + } + }; + View.prototype.computeDateScroll = function (duration) { + return {}; // subclasses must implement + }; + View.prototype.queryDateScroll = function () { + return {}; // subclasses must implement + }; + View.prototype.applyDateScroll = function (scroll) { + // subclasses must implement + }; + // for API + View.prototype.scrollToDuration = function (duration) { + this.applyScroll({ duration: duration }, false); + }; + return View; +}(DateComponent)); +EmitterMixin.mixInto(View); +View.prototype.usesMinMaxTime = false; +View.prototype.dateProfileGeneratorClass = DateProfileGenerator; + +var FgEventRenderer = /** @class */ (function () { + function FgEventRenderer() { + this.segs = []; + this.isSizeDirty = false; + } + FgEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) { + this.context = context; + this.rangeUpdated(); // called too frequently :( + // render an `.el` on each seg + // returns a subset of the segs. segs that were actually rendered + segs = this.renderSegEls(segs, mirrorInfo); + this.segs = segs; + this.attachSegs(segs, mirrorInfo); + this.isSizeDirty = true; + triggerRenderedSegs(this.context, this.segs, Boolean(mirrorInfo)); + }; + FgEventRenderer.prototype.unrender = function (context, _segs, mirrorInfo) { + triggerWillRemoveSegs(this.context, this.segs, Boolean(mirrorInfo)); + this.detachSegs(this.segs); + this.segs = []; + }; + // Updates values that rely on options and also relate to range + FgEventRenderer.prototype.rangeUpdated = function () { + var options = this.context.options; + var displayEventTime; + var displayEventEnd; + this.eventTimeFormat = createFormatter(options.eventTimeFormat || this.computeEventTimeFormat(), options.defaultRangeSeparator); + displayEventTime = options.displayEventTime; + if (displayEventTime == null) { + displayEventTime = this.computeDisplayEventTime(); // might be based off of range + } + displayEventEnd = options.displayEventEnd; + if (displayEventEnd == null) { + displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range + } + this.displayEventTime = displayEventTime; + this.displayEventEnd = displayEventEnd; + }; + // Renders and assigns an `el` property for each foreground event segment. + // Only returns segments that successfully rendered. + FgEventRenderer.prototype.renderSegEls = function (segs, mirrorInfo) { + var html = ''; + var i; + if (segs.length) { // don't build an empty html string + // build a large concatenation of event segment HTML + for (i = 0; i < segs.length; i++) { + html += this.renderSegHtml(segs[i], mirrorInfo); + } + // Grab individual elements from the combined HTML string. Use each as the default rendering. + // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false. + htmlToElements(html).forEach(function (el, i) { + var seg = segs[i]; + if (el) { + seg.el = el; + } + }); + segs = filterSegsViaEls(this.context, segs, Boolean(mirrorInfo)); + } + return segs; + }; + // Generic utility for generating the HTML classNames for an event segment's element + FgEventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable, mirrorInfo) { + var classes = [ + 'fc-event', + seg.isStart ? 'fc-start' : 'fc-not-start', + seg.isEnd ? 'fc-end' : 'fc-not-end' + ].concat(seg.eventRange.ui.classNames); + if (isDraggable) { + classes.push('fc-draggable'); + } + if (isResizable) { + classes.push('fc-resizable'); + } + if (mirrorInfo) { + classes.push('fc-mirror'); + if (mirrorInfo.isDragging) { + classes.push('fc-dragging'); + } + if (mirrorInfo.isResizing) { + classes.push('fc-resizing'); + } + } + return classes; + }; + // Compute the text that should be displayed on an event's element. + // `range` can be the Event object itself, or something range-like, with at least a `start`. + // If event times are disabled, or the event has no time, will return a blank string. + // If not specified, formatter will default to the eventTimeFormat setting, + // and displayEnd will default to the displayEventEnd setting. + FgEventRenderer.prototype.getTimeText = function (eventRange, formatter, displayEnd) { + var def = eventRange.def, instance = eventRange.instance; + return this._getTimeText(instance.range.start, def.hasEnd ? instance.range.end : null, def.allDay, formatter, displayEnd, instance.forcedStartTzo, instance.forcedEndTzo); + }; + FgEventRenderer.prototype._getTimeText = function (start, end, allDay, formatter, displayEnd, forcedStartTzo, forcedEndTzo) { + var dateEnv = this.context.dateEnv; + if (formatter == null) { + formatter = this.eventTimeFormat; + } + if (displayEnd == null) { + displayEnd = this.displayEventEnd; + } + if (this.displayEventTime && !allDay) { + if (displayEnd && end) { + return dateEnv.formatRange(start, end, formatter, { + forcedStartTzo: forcedStartTzo, + forcedEndTzo: forcedEndTzo + }); + } + else { + return dateEnv.format(start, formatter, { + forcedTzo: forcedStartTzo + }); + } + } + return ''; + }; + FgEventRenderer.prototype.computeEventTimeFormat = function () { + return { + hour: 'numeric', + minute: '2-digit', + omitZeroMinute: true + }; + }; + FgEventRenderer.prototype.computeDisplayEventTime = function () { + return true; + }; + FgEventRenderer.prototype.computeDisplayEventEnd = function () { + return true; + }; + // Utility for generating event skin-related CSS properties + FgEventRenderer.prototype.getSkinCss = function (ui) { + return { + 'background-color': ui.backgroundColor, + 'border-color': ui.borderColor, + color: ui.textColor + }; + }; + FgEventRenderer.prototype.sortEventSegs = function (segs) { + var specs = this.context.eventOrderSpecs; + var objs = segs.map(buildSegCompareObj); + objs.sort(function (obj0, obj1) { + return compareByFieldSpecs(obj0, obj1, specs); + }); + return objs.map(function (c) { + return c._seg; + }); + }; + FgEventRenderer.prototype.computeSizes = function (force) { + if (force || this.isSizeDirty) { + this.computeSegSizes(this.segs); + } + }; + FgEventRenderer.prototype.assignSizes = function (force) { + if (force || this.isSizeDirty) { + this.assignSegSizes(this.segs); + this.isSizeDirty = false; + } + }; + FgEventRenderer.prototype.computeSegSizes = function (segs) { + }; + FgEventRenderer.prototype.assignSegSizes = function (segs) { + }; + // Manipulation on rendered segs + FgEventRenderer.prototype.hideByHash = function (hash) { + if (hash) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + if (hash[seg.eventRange.instance.instanceId]) { + seg.el.style.visibility = 'hidden'; + } + } + } + }; + FgEventRenderer.prototype.showByHash = function (hash) { + if (hash) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + if (hash[seg.eventRange.instance.instanceId]) { + seg.el.style.visibility = ''; + } + } + } + }; + FgEventRenderer.prototype.selectByInstanceId = function (instanceId) { + if (instanceId) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + var eventInstance = seg.eventRange.instance; + if (eventInstance && eventInstance.instanceId === instanceId && + seg.el // necessary? + ) { + seg.el.classList.add('fc-selected'); + } + } + } + }; + FgEventRenderer.prototype.unselectByInstanceId = function (instanceId) { + if (instanceId) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + if (seg.el) { // necessary? + seg.el.classList.remove('fc-selected'); + } + } + } + }; + return FgEventRenderer; +}()); +// returns a object with all primitive props that can be compared +function buildSegCompareObj(seg) { + var eventDef = seg.eventRange.def; + var range = seg.eventRange.instance.range; + var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events + var end = range.end ? range.end.valueOf() : 0; // " + return __assign({}, eventDef.extendedProps, eventDef, { id: eventDef.publicId, start: start, + end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg // for later retrieval + }); +} + +/* +TODO: when refactoring this class, make a new FillRenderer instance for each `type` +*/ +var FillRenderer = /** @class */ (function () { + function FillRenderer() { + this.fillSegTag = 'div'; + this.dirtySizeFlags = {}; + this.containerElsByType = {}; + this.segsByType = {}; + } + FillRenderer.prototype.getSegsByType = function (type) { + return this.segsByType[type] || []; + }; + FillRenderer.prototype.renderSegs = function (type, context, segs) { + var _a; + this.context = context; + var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs + var containerEls = this.attachSegs(type, renderedSegs); + if (containerEls) { + (_a = (this.containerElsByType[type] || (this.containerElsByType[type] = []))).push.apply(_a, containerEls); + } + this.segsByType[type] = renderedSegs; + if (type === 'bgEvent') { + triggerRenderedSegs(context, renderedSegs, false); // isMirror=false + } + this.dirtySizeFlags[type] = true; + }; + // Unrenders a specific type of fill that is currently rendered on the grid + FillRenderer.prototype.unrender = function (type, context) { + var segs = this.segsByType[type]; + if (segs) { + if (type === 'bgEvent') { + triggerWillRemoveSegs(context, segs, false); // isMirror=false + } + this.detachSegs(type, segs); + } + }; + // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types. + // Only returns segments that successfully rendered. + FillRenderer.prototype.renderSegEls = function (type, segs) { + var _this = this; + var html = ''; + var i; + if (segs.length) { + // build a large concatenation of segment HTML + for (i = 0; i < segs.length; i++) { + html += this.renderSegHtml(type, segs[i]); + } + // Grab individual elements from the combined HTML string. Use each as the default rendering. + // Then, compute the 'el' for each segment. + htmlToElements(html).forEach(function (el, i) { + var seg = segs[i]; + if (el) { + seg.el = el; + } + }); + if (type === 'bgEvent') { + segs = filterSegsViaEls(this.context, segs, false // isMirror. background events can never be mirror elements + ); + } + // correct element type? (would be bad if a non-TD were inserted into a table for example) + segs = segs.filter(function (seg) { + return elementMatches(seg.el, _this.fillSegTag); + }); + } + return segs; + }; + // Builds the HTML needed for one fill segment. Generic enough to work with different types. + FillRenderer.prototype.renderSegHtml = function (type, seg) { + var css = null; + var classNames = []; + if (type !== 'highlight' && type !== 'businessHours') { + css = { + 'background-color': seg.eventRange.ui.backgroundColor + }; + } + if (type !== 'highlight') { + classNames = classNames.concat(seg.eventRange.ui.classNames); + } + if (type === 'businessHours') { + classNames.push('fc-bgevent'); + } + else { + classNames.push('fc-' + type.toLowerCase()); + } + return '<' + this.fillSegTag + + (classNames.length ? ' class="' + classNames.join(' ') + '"' : '') + + (css ? ' style="' + cssToStr(css) + '"' : '') + + '>'; + }; + FillRenderer.prototype.detachSegs = function (type, segs) { + var containerEls = this.containerElsByType[type]; + if (containerEls) { + containerEls.forEach(removeElement); + delete this.containerElsByType[type]; + } + }; + FillRenderer.prototype.computeSizes = function (force) { + for (var type in this.segsByType) { + if (force || this.dirtySizeFlags[type]) { + this.computeSegSizes(this.segsByType[type]); + } + } + }; + FillRenderer.prototype.assignSizes = function (force) { + for (var type in this.segsByType) { + if (force || this.dirtySizeFlags[type]) { + this.assignSegSizes(this.segsByType[type]); + } + } + this.dirtySizeFlags = {}; + }; + FillRenderer.prototype.computeSegSizes = function (segs) { + }; + FillRenderer.prototype.assignSegSizes = function (segs) { + }; + return FillRenderer; +}()); + +var NamedTimeZoneImpl = /** @class */ (function () { + function NamedTimeZoneImpl(timeZoneName) { + this.timeZoneName = timeZoneName; + } + return NamedTimeZoneImpl; +}()); + +/* +An abstraction for a dragging interaction originating on an event. +Does higher-level things than PointerDragger, such as possibly: +- a "mirror" that moves with the pointer +- a minimum number of pixels or other criteria for a true drag to begin + +subclasses must emit: +- pointerdown +- dragstart +- dragmove +- pointerup +- dragend +*/ +var ElementDragging = /** @class */ (function () { + function ElementDragging(el) { + this.emitter = new EmitterMixin(); + } + ElementDragging.prototype.destroy = function () { + }; + ElementDragging.prototype.setMirrorIsVisible = function (bool) { + // optional if subclass doesn't want to support a mirror + }; + ElementDragging.prototype.setMirrorNeedsRevert = function (bool) { + // optional if subclass doesn't want to support a mirror + }; + ElementDragging.prototype.setAutoScrollEnabled = function (bool) { + // optional + }; + return ElementDragging; +}()); + +function formatDate(dateInput, settings) { + if (settings === void 0) { settings = {}; } + var dateEnv = buildDateEnv$1(settings); + var formatter = createFormatter(settings); + var dateMeta = dateEnv.createMarkerMeta(dateInput); + if (!dateMeta) { // TODO: warning? + return ''; + } + return dateEnv.format(dateMeta.marker, formatter, { + forcedTzo: dateMeta.forcedTzo + }); +} +function formatRange(startInput, endInput, settings // mixture of env and formatter settings +) { + var dateEnv = buildDateEnv$1(typeof settings === 'object' && settings ? settings : {}); // pass in if non-null object + var formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator); + var startMeta = dateEnv.createMarkerMeta(startInput); + var endMeta = dateEnv.createMarkerMeta(endInput); + if (!startMeta || !endMeta) { // TODO: warning? + return ''; + } + return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, { + forcedStartTzo: startMeta.forcedTzo, + forcedEndTzo: endMeta.forcedTzo, + isEndExclusive: settings.isEndExclusive + }); +} +// TODO: more DRY and optimized +function buildDateEnv$1(settings) { + var locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map); // TODO: don't hardcode 'en' everywhere + // ensure required settings + settings = __assign({ timeZone: globalDefaults.timeZone, calendarSystem: 'gregory' }, settings, { locale: locale }); + return new DateEnv(settings); +} + +var DRAG_META_PROPS = { + startTime: createDuration, + duration: createDuration, + create: Boolean, + sourceId: String +}; +var DRAG_META_DEFAULTS = { + create: true +}; +function parseDragMeta(raw) { + var leftoverProps = {}; + var refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps); + refined.leftoverProps = leftoverProps; + return refined; +} + +// Computes a default column header formatting string if `colFormat` is not explicitly defined +function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) { + // if more than one week row, or if there are a lot of columns with not much space, + // put just the day numbers will be in each cell + if (!datesRepDistinctDays || dayCnt > 10) { + return { weekday: 'short' }; // "Sat" + } + else if (dayCnt > 1) { + return { weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }; // "Sat 11/12" + } + else { + return { weekday: 'long' }; // "Saturday" + } +} +function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) { + var dateEnv = context.dateEnv, theme = context.theme, options = context.options; + var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow. + var classNames = [ + 'fc-day-header', + theme.getClass('widgetHeader') + ]; + var innerHtml; + if (typeof options.columnHeaderHtml === 'function') { + innerHtml = options.columnHeaderHtml(dateEnv.toDate(dateMarker)); + } + else if (typeof options.columnHeaderText === 'function') { + innerHtml = htmlEscape(options.columnHeaderText(dateEnv.toDate(dateMarker))); + } + else { + innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat)); + } + // if only one row of days, the classNames on the header can represent the specific days beneath + if (datesRepDistinctDays) { + classNames = classNames.concat( + // includes the day-of-week class + // noThemeHighlight=true (don't highlight the header) + getDayClasses(dateMarker, dateProfile, context, true)); + } + else { + classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]); // only add the day-of-week class + } + return '' + + ' 1 ? + ' colspan="' + colspan + '"' : + '') + + (otherAttrs ? + ' ' + otherAttrs : + '') + + '>' + + (isDateValid ? + // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff) + buildGotoAnchorHtml(options, dateEnv, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) : + // if not valid, display text, but no link + innerHtml) + + ''; +} + +var DayHeader = /** @class */ (function (_super) { + __extends(DayHeader, _super); + function DayHeader(parentEl) { + var _this = _super.call(this) || this; + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + _this.parentEl = parentEl; + return _this; + } + DayHeader.prototype.render = function (props, context) { + var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays; + var parts = []; + this.renderSkeleton(context); + if (props.renderIntroHtml) { + parts.push(props.renderIntroHtml()); + } + var colHeadFormat = createFormatter(context.options.columnHeaderFormat || + computeFallbackHeaderFormat(datesRepDistinctDays, dates.length)); + for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) { + var date = dates_1[_i]; + parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, context)); + } + if (context.isRtl) { + parts.reverse(); + } + this.thead.innerHTML = '' + parts.join('') + ''; + }; + DayHeader.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + }; + DayHeader.prototype._renderSkeleton = function (context) { + var theme = context.theme; + var parentEl = this.parentEl; + parentEl.innerHTML = ''; // because might be nbsp + parentEl.appendChild(this.el = htmlToElement('
' + + '' + + '' + + '
' + + '
')); + this.thead = this.el.querySelector('thead'); + }; + DayHeader.prototype._unrenderSkeleton = function () { + removeElement(this.el); + }; + return DayHeader; +}(Component)); + +var DaySeries = /** @class */ (function () { + function DaySeries(range, dateProfileGenerator) { + var date = range.start; + var end = range.end; + var indices = []; + var dates = []; + var dayIndex = -1; + while (date < end) { // loop each day from start to end + if (dateProfileGenerator.isHiddenDay(date)) { + indices.push(dayIndex + 0.5); // mark that it's between indices + } + else { + dayIndex++; + indices.push(dayIndex); + dates.push(date); + } + date = addDays(date, 1); + } + this.dates = dates; + this.indices = indices; + this.cnt = dates.length; + } + DaySeries.prototype.sliceRange = function (range) { + var firstIndex = this.getDateDayIndex(range.start); // inclusive first index + var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index + var clippedFirstIndex = Math.max(0, firstIndex); + var clippedLastIndex = Math.min(this.cnt - 1, lastIndex); + // deal with in-between indices + clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell + clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell + if (clippedFirstIndex <= clippedLastIndex) { + return { + firstIndex: clippedFirstIndex, + lastIndex: clippedLastIndex, + isStart: firstIndex === clippedFirstIndex, + isEnd: lastIndex === clippedLastIndex + }; + } + else { + return null; + } + }; + // Given a date, returns its chronolocial cell-index from the first cell of the grid. + // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets. + // If before the first offset, returns a negative number. + // If after the last offset, returns an offset past the last cell offset. + // Only works for *start* dates of cells. Will not work for exclusive end dates for cells. + DaySeries.prototype.getDateDayIndex = function (date) { + var indices = this.indices; + var dayOffset = Math.floor(diffDays(this.dates[0], date)); + if (dayOffset < 0) { + return indices[0] - 1; + } + else if (dayOffset >= indices.length) { + return indices[indices.length - 1] + 1; + } + else { + return indices[dayOffset]; + } + }; + return DaySeries; +}()); + +var DayTable = /** @class */ (function () { + function DayTable(daySeries, breakOnWeeks) { + var dates = daySeries.dates; + var daysPerRow; + var firstDay; + var rowCnt; + if (breakOnWeeks) { + // count columns until the day-of-week repeats + firstDay = dates[0].getUTCDay(); + for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) { + if (dates[daysPerRow].getUTCDay() === firstDay) { + break; + } + } + rowCnt = Math.ceil(dates.length / daysPerRow); + } + else { + rowCnt = 1; + daysPerRow = dates.length; + } + this.rowCnt = rowCnt; + this.colCnt = daysPerRow; + this.daySeries = daySeries; + this.cells = this.buildCells(); + this.headerDates = this.buildHeaderDates(); + } + DayTable.prototype.buildCells = function () { + var rows = []; + for (var row = 0; row < this.rowCnt; row++) { + var cells = []; + for (var col = 0; col < this.colCnt; col++) { + cells.push(this.buildCell(row, col)); + } + rows.push(cells); + } + return rows; + }; + DayTable.prototype.buildCell = function (row, col) { + return { + date: this.daySeries.dates[row * this.colCnt + col] + }; + }; + DayTable.prototype.buildHeaderDates = function () { + var dates = []; + for (var col = 0; col < this.colCnt; col++) { + dates.push(this.cells[0][col].date); + } + return dates; + }; + DayTable.prototype.sliceRange = function (range) { + var colCnt = this.colCnt; + var seriesSeg = this.daySeries.sliceRange(range); + var segs = []; + if (seriesSeg) { + var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex; + var index = firstIndex; + while (index <= lastIndex) { + var row = Math.floor(index / colCnt); + var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1); + segs.push({ + row: row, + firstCol: index % colCnt, + lastCol: (nextIndex - 1) % colCnt, + isStart: seriesSeg.isStart && index === firstIndex, + isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex + }); + index = nextIndex; + } + } + return segs; + }; + return DayTable; +}()); + +var Slicer = /** @class */ (function () { + function Slicer() { + this.sliceBusinessHours = memoize(this._sliceBusinessHours); + this.sliceDateSelection = memoize(this._sliceDateSpan); + this.sliceEventStore = memoize(this._sliceEventStore); + this.sliceEventDrag = memoize(this._sliceInteraction); + this.sliceEventResize = memoize(this._sliceInteraction); + } + Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, calendar, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + var eventUiBases = props.eventUiBases; + var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)); + return { + dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)), + businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, calendar, component].concat(extraArgs)), + fgEventSegs: eventSegs.fg, + bgEventSegs: eventSegs.bg, + eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)), + eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)), + eventSelection: props.eventSelection + }; // TODO: give interactionSegs? + }; + Slicer.prototype.sliceNowDate = function (// does not memoize + date, component) { + var extraArgs = []; + for (var _i = 2; _i < arguments.length; _i++) { + extraArgs[_i - 2] = arguments[_i]; + } + return this._sliceDateSpan.apply(this, [{ range: { start: date, end: addMs(date, 1) }, allDay: false }, + {}, + component].concat(extraArgs)); + }; + Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, calendar, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + if (!businessHours) { + return []; + } + return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), calendar), + {}, + dateProfile, + nextDayThreshold, + component].concat(extraArgs)).bg; + }; + Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + if (eventStore) { + var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold); + return { + bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs), + fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs) + }; + } + else { + return { bg: [], fg: [] }; + } + }; + Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + if (!interaction) { + return null; + } + var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold); + return { + segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs), + affectedInstances: interaction.affectedEvents.instances, + isEvent: interaction.isEvent, + sourceSeg: interaction.origSeg + }; + }; + Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, component) { + var extraArgs = []; + for (var _i = 3; _i < arguments.length; _i++) { + extraArgs[_i - 3] = arguments[_i]; + } + if (!dateSpan) { + return []; + } + var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.context.calendar); + var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs)); + for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) { + var seg = segs_1[_a]; + seg.component = component; + seg.eventRange = eventRange; + } + return segs; + }; + /* + "complete" seg means it has component and eventRange + */ + Slicer.prototype.sliceEventRanges = function (eventRanges, component, // TODO: kill + extraArgs) { + var segs = []; + for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) { + var eventRange = eventRanges_1[_i]; + segs.push.apply(segs, this.sliceEventRange(eventRange, component, extraArgs)); + } + return segs; + }; + /* + "complete" seg means it has component and eventRange + */ + Slicer.prototype.sliceEventRange = function (eventRange, component, // TODO: kill + extraArgs) { + var segs = this.sliceRange.apply(this, [eventRange.range].concat(extraArgs)); + for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) { + var seg = segs_2[_i]; + seg.component = component; + seg.eventRange = eventRange; + seg.isStart = eventRange.isStart && seg.isStart; + seg.isEnd = eventRange.isEnd && seg.isEnd; + } + return segs; + }; + return Slicer; +}()); +/* +for incorporating minTime/maxTime if appropriate +TODO: should be part of DateProfile! +TimelineDateProfile already does this btw +*/ +function computeActiveRange(dateProfile, isComponentAllDay) { + var range = dateProfile.activeRange; + if (isComponentAllDay) { + return range; + } + return { + start: addMs(range.start, dateProfile.minTime.milliseconds), + end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day + }; +} + +// exports +// -------------------------------------------------------------------------------------------------- +var version = '4.4.0'; + +export { Calendar, Component, ComponentContext, DateComponent, DateEnv, DateProfileGenerator, DayHeader, DaySeries, DayTable, ElementDragging, ElementScrollController, EmitterMixin, EventApi, FgEventRenderer, FillRenderer, Interaction, Mixin, NamedTimeZoneImpl, PositionCache, ScrollComponent, ScrollController, Slicer, Splitter, Theme, View, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, appendToElement, applyAll, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildGotoAnchorHtml, buildSegCompareObj, capitaliseFirstLetter, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compensateScroll, computeClippingRect, computeEdges, computeEventDraggable, computeEventEndResizable, computeEventStartResizable, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeVisibleDayRange, config, constrainPoint, createDuration, createElement, createEmptyEventStore, createEventInstance, createFormatter, createPlugin, cssToStr, debounce, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, distributeHeight, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findChildren, findElements, flexibleCompare, forceClassName, formatDate, formatIsoTimeString, formatRange, getAllDayHtml, getClippingParents, getDayClasses, getElSeg, getRectCenter, getRelevantEvents, globalDefaults, greatestDurationDenominator, hasBgRendering, htmlEscape, htmlToElement, insertAfterElement, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, matchCellWidths, memoize, memoizeOutput, memoizeRendering, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseDragMeta, parseEventDef, parseFieldSpecs, parse as parseMarker, pointInsideRect, prependToElement, preventContextMenu, preventDefault, preventSelection, processScopedUiProps, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineProps, removeElement, removeExact, renderDateCell, requestJson, sliceEventStore, startOfDay, subtractInnerElHeight, translateRect, uncompensateScroll, undistributeHeight, unpromisify, version, whenTransitionDone, wholeDivideDurations }; diff --git a/src/main/resources/static/packages/core/main.js b/src/main/resources/static/packages/core/main.js new file mode 100644 index 00000000..d559f01a --- /dev/null +++ b/src/main/resources/static/packages/core/main.js @@ -0,0 +1,8740 @@ +/*! +FullCalendar Core Package v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.FullCalendar = {})); +}(this, function (exports) { 'use strict'; + + // Creating + // ---------------------------------------------------------------------------------------------------------------- + var elementPropHash = { + className: true, + colSpan: true, + rowSpan: true + }; + var containerTagHash = { + '= rect.left && + point.left < rect.right && + point.top >= rect.top && + point.top < rect.bottom; + } + // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false + function intersectRects(rect1, rect2) { + var res = { + left: Math.max(rect1.left, rect2.left), + right: Math.min(rect1.right, rect2.right), + top: Math.max(rect1.top, rect2.top), + bottom: Math.min(rect1.bottom, rect2.bottom) + }; + if (res.left < res.right && res.top < res.bottom) { + return res; + } + return false; + } + function translateRect(rect, deltaX, deltaY) { + return { + left: rect.left + deltaX, + right: rect.right + deltaX, + top: rect.top + deltaY, + bottom: rect.bottom + deltaY + }; + } + // Returns a new point that will have been moved to reside within the given rectangle + function constrainPoint(point, rect) { + return { + left: Math.min(Math.max(point.left, rect.left), rect.right), + top: Math.min(Math.max(point.top, rect.top), rect.bottom) + }; + } + // Returns a point that is the center of the given rectangle + function getRectCenter(rect) { + return { + left: (rect.left + rect.right) / 2, + top: (rect.top + rect.bottom) / 2 + }; + } + // Subtracts point2's coordinates from point1's coordinates, returning a delta + function diffPoints(point1, point2) { + return { + left: point1.left - point2.left, + top: point1.top - point2.top + }; + } + + // Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side + var isRtlScrollbarOnLeft = null; + function getIsRtlScrollbarOnLeft() { + if (isRtlScrollbarOnLeft === null) { + isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft(); + } + return isRtlScrollbarOnLeft; + } + function computeIsRtlScrollbarOnLeft() { + var outerEl = createElement('div', { + style: { + position: 'absolute', + top: -1000, + left: 0, + border: 0, + padding: 0, + overflow: 'scroll', + direction: 'rtl' + } + }, '
'); + document.body.appendChild(outerEl); + var innerEl = outerEl.firstChild; + var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left; + removeElement(outerEl); + return res; + } + // The scrollbar width computations in computeEdges are sometimes flawed when it comes to + // retina displays, rounding, and IE11. Massage them into a usable value. + function sanitizeScrollbarWidth(width) { + width = Math.max(0, width); // no negatives + width = Math.round(width); + return width; + } + + function computeEdges(el, getPadding) { + if (getPadding === void 0) { getPadding = false; } + var computedStyle = window.getComputedStyle(el); + var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0; + var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0; + var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0; + var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0; + // must use offset(Width|Height) because compatible with client(Width|Height) + var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight); + var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom); + var res = { + borderLeft: borderLeft, + borderRight: borderRight, + borderTop: borderTop, + borderBottom: borderBottom, + scrollbarBottom: scrollbarBottom, + scrollbarLeft: 0, + scrollbarRight: 0 + }; + if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side? + res.scrollbarLeft = scrollbarLeftRight; + } + else { + res.scrollbarRight = scrollbarLeftRight; + } + if (getPadding) { + res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0; + res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0; + res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0; + res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0; + } + return res; + } + function computeInnerRect(el, goWithinPadding) { + if (goWithinPadding === void 0) { goWithinPadding = false; } + var outerRect = computeRect(el); + var edges = computeEdges(el, goWithinPadding); + var res = { + left: outerRect.left + edges.borderLeft + edges.scrollbarLeft, + right: outerRect.right - edges.borderRight - edges.scrollbarRight, + top: outerRect.top + edges.borderTop, + bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom + }; + if (goWithinPadding) { + res.left += edges.paddingLeft; + res.right -= edges.paddingRight; + res.top += edges.paddingTop; + res.bottom -= edges.paddingBottom; + } + return res; + } + function computeRect(el) { + var rect = el.getBoundingClientRect(); + return { + left: rect.left + window.pageXOffset, + top: rect.top + window.pageYOffset, + right: rect.right + window.pageXOffset, + bottom: rect.bottom + window.pageYOffset + }; + } + function computeViewportRect() { + return { + left: window.pageXOffset, + right: window.pageXOffset + document.documentElement.clientWidth, + top: window.pageYOffset, + bottom: window.pageYOffset + document.documentElement.clientHeight + }; + } + function computeHeightAndMargins(el) { + return el.getBoundingClientRect().height + computeVMargins(el); + } + function computeVMargins(el) { + var computed = window.getComputedStyle(el); + return parseInt(computed.marginTop, 10) + + parseInt(computed.marginBottom, 10); + } + // does not return window + function getClippingParents(el) { + var parents = []; + while (el instanceof HTMLElement) { // will stop when gets to document or null + var computedStyle = window.getComputedStyle(el); + if (computedStyle.position === 'fixed') { + break; + } + if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) { + parents.push(el); + } + el = el.parentNode; + } + return parents; + } + function computeClippingRect(el) { + return getClippingParents(el) + .map(function (el) { + return computeInnerRect(el); + }) + .concat(computeViewportRect()) + .reduce(function (rect0, rect1) { + return intersectRects(rect0, rect1) || rect1; // should always intersect + }); + } + + // Stops a mouse/touch event from doing it's native browser action + function preventDefault(ev) { + ev.preventDefault(); + } + // Event Delegation + // ---------------------------------------------------------------------------------------------------------------- + function listenBySelector(container, eventType, selector, handler) { + function realHandler(ev) { + var matchedChild = elementClosest(ev.target, selector); + if (matchedChild) { + handler.call(matchedChild, ev, matchedChild); + } + } + container.addEventListener(eventType, realHandler); + return function () { + container.removeEventListener(eventType, realHandler); + }; + } + function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) { + var currentMatchedChild; + return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) { + if (matchedChild !== currentMatchedChild) { + currentMatchedChild = matchedChild; + onMouseEnter(ev, matchedChild); + var realOnMouseLeave_1 = function (ev) { + currentMatchedChild = null; + onMouseLeave(ev, matchedChild); + matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1); + }; + // listen to the next mouseleave, and then unattach + matchedChild.addEventListener('mouseleave', realOnMouseLeave_1); + } + }); + } + // Animation + // ---------------------------------------------------------------------------------------------------------------- + var transitionEventNames = [ + 'webkitTransitionEnd', + 'otransitionend', + 'oTransitionEnd', + 'msTransitionEnd', + 'transitionend' + ]; + // triggered only when the next single subsequent transition finishes + function whenTransitionDone(el, callback) { + var realCallback = function (ev) { + callback(ev); + transitionEventNames.forEach(function (eventName) { + el.removeEventListener(eventName, realCallback); + }); + }; + transitionEventNames.forEach(function (eventName) { + el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes + }); + } + + var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; + // Adding + function addWeeks(m, n) { + var a = dateToUtcArray(m); + a[2] += n * 7; + return arrayToUtcDate(a); + } + function addDays(m, n) { + var a = dateToUtcArray(m); + a[2] += n; + return arrayToUtcDate(a); + } + function addMs(m, n) { + var a = dateToUtcArray(m); + a[6] += n; + return arrayToUtcDate(a); + } + // Diffing (all return floats) + function diffWeeks(m0, m1) { + return diffDays(m0, m1) / 7; + } + function diffDays(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24); + } + function diffHours(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60); + } + function diffMinutes(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / (1000 * 60); + } + function diffSeconds(m0, m1) { + return (m1.valueOf() - m0.valueOf()) / 1000; + } + function diffDayAndTime(m0, m1) { + var m0day = startOfDay(m0); + var m1day = startOfDay(m1); + return { + years: 0, + months: 0, + days: Math.round(diffDays(m0day, m1day)), + milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()) + }; + } + // Diffing Whole Units + function diffWholeWeeks(m0, m1) { + var d = diffWholeDays(m0, m1); + if (d !== null && d % 7 === 0) { + return d / 7; + } + return null; + } + function diffWholeDays(m0, m1) { + if (timeAsMs(m0) === timeAsMs(m1)) { + return Math.round(diffDays(m0, m1)); + } + return null; + } + // Start-Of + function startOfDay(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate() + ]); + } + function startOfHour(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate(), + m.getUTCHours() + ]); + } + function startOfMinute(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate(), + m.getUTCHours(), + m.getUTCMinutes() + ]); + } + function startOfSecond(m) { + return arrayToUtcDate([ + m.getUTCFullYear(), + m.getUTCMonth(), + m.getUTCDate(), + m.getUTCHours(), + m.getUTCMinutes(), + m.getUTCSeconds() + ]); + } + // Week Computation + function weekOfYear(marker, dow, doy) { + var y = marker.getUTCFullYear(); + var w = weekOfGivenYear(marker, y, dow, doy); + if (w < 1) { + return weekOfGivenYear(marker, y - 1, dow, doy); + } + var nextW = weekOfGivenYear(marker, y + 1, dow, doy); + if (nextW >= 1) { + return Math.min(w, nextW); + } + return w; + } + function weekOfGivenYear(marker, year, dow, doy) { + var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]); + var dayStart = startOfDay(marker); + var days = Math.round(diffDays(firstWeekStart, dayStart)); + return Math.floor(days / 7) + 1; // zero-indexed + } + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + // first-week day -- which january is always in the first week (4 for iso, 1 for other) + var fwd = 7 + dow - doy; + // first-week day local weekday -- which local weekday is fwd + var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7; + return -fwdlw + fwd - 1; + } + // Array Conversion + function dateToLocalArray(date) { + return [ + date.getFullYear(), + date.getMonth(), + date.getDate(), + date.getHours(), + date.getMinutes(), + date.getSeconds(), + date.getMilliseconds() + ]; + } + function arrayToLocalDate(a) { + return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month + a[3] || 0, a[4] || 0, a[5] || 0); + } + function dateToUtcArray(date) { + return [ + date.getUTCFullYear(), + date.getUTCMonth(), + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds(), + date.getUTCMilliseconds() + ]; + } + function arrayToUtcDate(a) { + // according to web standards (and Safari), a month index is required. + // massage if only given a year. + if (a.length === 1) { + a = a.concat([0]); + } + return new Date(Date.UTC.apply(Date, a)); + } + // Other Utils + function isValidDate(m) { + return !isNaN(m.valueOf()); + } + function timeAsMs(m) { + return m.getUTCHours() * 1000 * 60 * 60 + + m.getUTCMinutes() * 1000 * 60 + + m.getUTCSeconds() * 1000 + + m.getUTCMilliseconds(); + } + + var INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds']; + var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/; + // Parsing and Creation + function createDuration(input, unit) { + var _a; + if (typeof input === 'string') { + return parseString(input); + } + else if (typeof input === 'object' && input) { // non-null object + return normalizeObject(input); + } + else if (typeof input === 'number') { + return normalizeObject((_a = {}, _a[unit || 'milliseconds'] = input, _a)); + } + else { + return null; + } + } + function parseString(s) { + var m = PARSE_RE.exec(s); + if (m) { + var sign = m[1] ? -1 : 1; + return { + years: 0, + months: 0, + days: sign * (m[2] ? parseInt(m[2], 10) : 0), + milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours + (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes + (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds + (m[6] ? parseInt(m[6], 10) : 0) // ms + ) + }; + } + return null; + } + function normalizeObject(obj) { + return { + years: obj.years || obj.year || 0, + months: obj.months || obj.month || 0, + days: (obj.days || obj.day || 0) + + getWeeksFromInput(obj) * 7, + milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours + (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes + (obj.seconds || obj.second || 0) * 1000 + // seconds + (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms + }; + } + function getWeeksFromInput(obj) { + return obj.weeks || obj.week || 0; + } + // Equality + function durationsEqual(d0, d1) { + return d0.years === d1.years && + d0.months === d1.months && + d0.days === d1.days && + d0.milliseconds === d1.milliseconds; + } + function isSingleDay(dur) { + return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0; + } + // Simple Math + function addDurations(d0, d1) { + return { + years: d0.years + d1.years, + months: d0.months + d1.months, + days: d0.days + d1.days, + milliseconds: d0.milliseconds + d1.milliseconds + }; + } + function subtractDurations(d1, d0) { + return { + years: d1.years - d0.years, + months: d1.months - d0.months, + days: d1.days - d0.days, + milliseconds: d1.milliseconds - d0.milliseconds + }; + } + function multiplyDuration(d, n) { + return { + years: d.years * n, + months: d.months * n, + days: d.days * n, + milliseconds: d.milliseconds * n + }; + } + // Conversions + // "Rough" because they are based on average-case Gregorian months/years + function asRoughYears(dur) { + return asRoughDays(dur) / 365; + } + function asRoughMonths(dur) { + return asRoughDays(dur) / 30; + } + function asRoughDays(dur) { + return asRoughMs(dur) / 864e5; + } + function asRoughMinutes(dur) { + return asRoughMs(dur) / (1000 * 60); + } + function asRoughSeconds(dur) { + return asRoughMs(dur) / 1000; + } + function asRoughMs(dur) { + return dur.years * (365 * 864e5) + + dur.months * (30 * 864e5) + + dur.days * 864e5 + + dur.milliseconds; + } + // Advanced Math + function wholeDivideDurations(numerator, denominator) { + var res = null; + for (var i = 0; i < INTERNAL_UNITS.length; i++) { + var unit = INTERNAL_UNITS[i]; + if (denominator[unit]) { + var localRes = numerator[unit] / denominator[unit]; + if (!isInt(localRes) || (res !== null && res !== localRes)) { + return null; + } + res = localRes; + } + else if (numerator[unit]) { + // needs to divide by something but can't! + return null; + } + } + return res; + } + function greatestDurationDenominator(dur, dontReturnWeeks) { + var ms = dur.milliseconds; + if (ms) { + if (ms % 1000 !== 0) { + return { unit: 'millisecond', value: ms }; + } + if (ms % (1000 * 60) !== 0) { + return { unit: 'second', value: ms / 1000 }; + } + if (ms % (1000 * 60 * 60) !== 0) { + return { unit: 'minute', value: ms / (1000 * 60) }; + } + if (ms) { + return { unit: 'hour', value: ms / (1000 * 60 * 60) }; + } + } + if (dur.days) { + if (!dontReturnWeeks && dur.days % 7 === 0) { + return { unit: 'week', value: dur.days / 7 }; + } + return { unit: 'day', value: dur.days }; + } + if (dur.months) { + return { unit: 'month', value: dur.months }; + } + if (dur.years) { + return { unit: 'year', value: dur.years }; + } + return { unit: 'millisecond', value: 0 }; + } + + /* FullCalendar-specific DOM Utilities + ----------------------------------------------------------------------------------------------------------------------*/ + // Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left + // and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that. + function compensateScroll(rowEl, scrollbarWidths) { + if (scrollbarWidths.left) { + applyStyle(rowEl, { + borderLeftWidth: 1, + marginLeft: scrollbarWidths.left - 1 + }); + } + if (scrollbarWidths.right) { + applyStyle(rowEl, { + borderRightWidth: 1, + marginRight: scrollbarWidths.right - 1 + }); + } + } + // Undoes compensateScroll and restores all borders/margins + function uncompensateScroll(rowEl) { + applyStyle(rowEl, { + marginLeft: '', + marginRight: '', + borderLeftWidth: '', + borderRightWidth: '' + }); + } + // Make the mouse cursor express that an event is not allowed in the current area + function disableCursor() { + document.body.classList.add('fc-not-allowed'); + } + // Returns the mouse cursor to its original look + function enableCursor() { + document.body.classList.remove('fc-not-allowed'); + } + // Given a total available height to fill, have `els` (essentially child rows) expand to accomodate. + // By default, all elements that are shorter than the recommended height are expanded uniformly, not considering + // any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and + // reduces the available height. + function distributeHeight(els, availableHeight, shouldRedistribute) { + // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions, + // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars. + var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element + var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE* + var flexEls = []; // elements that are allowed to expand. array of DOM nodes + var flexOffsets = []; // amount of vertical space it takes up + var flexHeights = []; // actual css height + var usedHeight = 0; + undistributeHeight(els); // give all elements their natural height + // find elements that are below the recommended height (expandable). + // important to query for heights in a single first pass (to avoid reflow oscillation). + els.forEach(function (el, i) { + var minOffset = i === els.length - 1 ? minOffset2 : minOffset1; + var naturalHeight = el.getBoundingClientRect().height; + var naturalOffset = naturalHeight + computeVMargins(el); + if (naturalOffset < minOffset) { + flexEls.push(el); + flexOffsets.push(naturalOffset); + flexHeights.push(naturalHeight); + } + else { + // this element stretches past recommended height (non-expandable). mark the space as occupied. + usedHeight += naturalOffset; + } + }); + // readjust the recommended height to only consider the height available to non-maxed-out rows. + if (shouldRedistribute) { + availableHeight -= usedHeight; + minOffset1 = Math.floor(availableHeight / flexEls.length); + minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE* + } + // assign heights to all expandable elements + flexEls.forEach(function (el, i) { + var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1; + var naturalOffset = flexOffsets[i]; + var naturalHeight = flexHeights[i]; + var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding + if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things + el.style.height = newHeight + 'px'; + } + }); + } + // Undoes distrubuteHeight, restoring all els to their natural height + function undistributeHeight(els) { + els.forEach(function (el) { + el.style.height = ''; + }); + } + // Given `els`, a set of cells, find the cell with the largest natural width and set the widths of all the + // cells to be that width. + // PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline + function matchCellWidths(els) { + var maxInnerWidth = 0; + els.forEach(function (el) { + var innerEl = el.firstChild; // hopefully an element + if (innerEl instanceof HTMLElement) { + var innerWidth_1 = innerEl.getBoundingClientRect().width; + if (innerWidth_1 > maxInnerWidth) { + maxInnerWidth = innerWidth_1; + } + } + }); + maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance + els.forEach(function (el) { + el.style.width = maxInnerWidth + 'px'; + }); + return maxInnerWidth; + } + // Given one element that resides inside another, + // Subtracts the height of the inner element from the outer element. + function subtractInnerElHeight(outerEl, innerEl) { + // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked + var reflowStyleProps = { + position: 'relative', + left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll + }; + applyStyle(outerEl, reflowStyleProps); + applyStyle(innerEl, reflowStyleProps); + var diff = // grab the dimensions + outerEl.getBoundingClientRect().height - + innerEl.getBoundingClientRect().height; + // undo hack + var resetStyleProps = { position: '', left: '' }; + applyStyle(outerEl, resetStyleProps); + applyStyle(innerEl, resetStyleProps); + return diff; + } + /* Selection + ----------------------------------------------------------------------------------------------------------------------*/ + function preventSelection(el) { + el.classList.add('fc-unselectable'); + el.addEventListener('selectstart', preventDefault); + } + function allowSelection(el) { + el.classList.remove('fc-unselectable'); + el.removeEventListener('selectstart', preventDefault); + } + /* Context Menu + ----------------------------------------------------------------------------------------------------------------------*/ + function preventContextMenu(el) { + el.addEventListener('contextmenu', preventDefault); + } + function allowContextMenu(el) { + el.removeEventListener('contextmenu', preventDefault); + } + /* Object Ordering by Field + ----------------------------------------------------------------------------------------------------------------------*/ + function parseFieldSpecs(input) { + var specs = []; + var tokens = []; + var i; + var token; + if (typeof input === 'string') { + tokens = input.split(/\s*,\s*/); + } + else if (typeof input === 'function') { + tokens = [input]; + } + else if (Array.isArray(input)) { + tokens = input; + } + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + if (typeof token === 'string') { + specs.push(token.charAt(0) === '-' ? + { field: token.substring(1), order: -1 } : + { field: token, order: 1 }); + } + else if (typeof token === 'function') { + specs.push({ func: token }); + } + } + return specs; + } + function compareByFieldSpecs(obj0, obj1, fieldSpecs) { + var i; + var cmp; + for (i = 0; i < fieldSpecs.length; i++) { + cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]); + if (cmp) { + return cmp; + } + } + return 0; + } + function compareByFieldSpec(obj0, obj1, fieldSpec) { + if (fieldSpec.func) { + return fieldSpec.func(obj0, obj1); + } + return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field]) + * (fieldSpec.order || 1); + } + function flexibleCompare(a, b) { + if (!a && !b) { + return 0; + } + if (b == null) { + return -1; + } + if (a == null) { + return 1; + } + if (typeof a === 'string' || typeof b === 'string') { + return String(a).localeCompare(String(b)); + } + return a - b; + } + /* String Utilities + ----------------------------------------------------------------------------------------------------------------------*/ + function capitaliseFirstLetter(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } + function padStart(val, len) { + var s = String(val); + return '000'.substr(0, len - s.length) + s; + } + /* Number Utilities + ----------------------------------------------------------------------------------------------------------------------*/ + function compareNumbers(a, b) { + return a - b; + } + function isInt(n) { + return n % 1 === 0; + } + /* Weird Utilities + ----------------------------------------------------------------------------------------------------------------------*/ + function applyAll(functions, thisObj, args) { + if (typeof functions === 'function') { // supplied a single function + functions = [functions]; + } + if (functions) { + var i = void 0; + var ret = void 0; + for (i = 0; i < functions.length; i++) { + ret = functions[i].apply(thisObj, args) || ret; + } + return ret; + } + } + function firstDefined() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + for (var i = 0; i < args.length; i++) { + if (args[i] !== undefined) { + return args[i]; + } + } + } + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + // https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714 + function debounce(func, wait) { + var timeout; + var args; + var context; + var timestamp; + var result; + var later = function () { + var last = new Date().valueOf() - timestamp; + if (last < wait) { + timeout = setTimeout(later, wait - last); + } + else { + timeout = null; + result = func.apply(context, args); + context = args = null; + } + }; + return function () { + context = this; + args = arguments; + timestamp = new Date().valueOf(); + if (!timeout) { + timeout = setTimeout(later, wait); + } + return result; + }; + } + // Number and Boolean are only types that defaults or not computed for + // TODO: write more comments + function refineProps(rawProps, processors, defaults, leftoverProps) { + if (defaults === void 0) { defaults = {}; } + var refined = {}; + for (var key in processors) { + var processor = processors[key]; + if (rawProps[key] !== undefined) { + // found + if (processor === Function) { + refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null; + } + else if (processor) { // a refining function? + refined[key] = processor(rawProps[key]); + } + else { + refined[key] = rawProps[key]; + } + } + else if (defaults[key] !== undefined) { + // there's an explicit default + refined[key] = defaults[key]; + } + else { + // must compute a default + if (processor === String) { + refined[key] = ''; // empty string is default for String + } + else if (!processor || processor === Number || processor === Boolean || processor === Function) { + refined[key] = null; // assign null for other non-custom processor funcs + } + else { + refined[key] = processor(null); // run the custom processor func + } + } + } + if (leftoverProps) { + for (var key in rawProps) { + if (processors[key] === undefined) { + leftoverProps[key] = rawProps[key]; + } + } + } + return refined; + } + /* Date stuff that doesn't belong in datelib core + ----------------------------------------------------------------------------------------------------------------------*/ + // given a timed range, computes an all-day range that has the same exact duration, + // but whose start time is aligned with the start of the day. + function computeAlignedDayRange(timedRange) { + var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1; + var start = startOfDay(timedRange.start); + var end = addDays(start, dayCnt); + return { start: start, end: end }; + } + // given a timed range, computes an all-day range based on how for the end date bleeds into the next day + // TODO: give nextDayThreshold a default arg + function computeVisibleDayRange(timedRange, nextDayThreshold) { + if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); } + var startDay = null; + var endDay = null; + if (timedRange.end) { + endDay = startOfDay(timedRange.end); + var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay` + // If the end time is actually inclusively part of the next day and is equal to or + // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`. + // Otherwise, leaving it as inclusive will cause it to exclude `endDay`. + if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) { + endDay = addDays(endDay, 1); + } + } + if (timedRange.start) { + startDay = startOfDay(timedRange.start); // the beginning of the day the range starts + // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day. + if (endDay && endDay <= startDay) { + endDay = addDays(startDay, 1); + } + } + return { start: startDay, end: endDay }; + } + // spans from one day into another? + function isMultiDayRange(range) { + var visibleRange = computeVisibleDayRange(range); + return diffDays(visibleRange.start, visibleRange.end) > 1; + } + function diffDates(date0, date1, dateEnv, largeUnit) { + if (largeUnit === 'year') { + return createDuration(dateEnv.diffWholeYears(date0, date1), 'year'); + } + else if (largeUnit === 'month') { + return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month'); + } + else { + return diffDayAndTime(date0, date1); // returns a duration + } + } + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function parseRecurring(eventInput, allDayDefault, dateEnv, recurringTypes, leftovers) { + for (var i = 0; i < recurringTypes.length; i++) { + var localLeftovers = {}; + var parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv); + if (parsed) { + var allDay = localLeftovers.allDay; + delete localLeftovers.allDay; // remove from leftovers + if (allDay == null) { + allDay = allDayDefault; + if (allDay == null) { + allDay = parsed.allDayGuess; + if (allDay == null) { + allDay = false; + } + } + } + __assign(leftovers, localLeftovers); + return { + allDay: allDay, + duration: parsed.duration, + typeData: parsed.typeData, + typeId: i + }; + } + } + return null; + } + /* + Event MUST have a recurringDef + */ + function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) { + var typeDef = recurringTypes[eventDef.recurringDef.typeId]; + var markers = typeDef.expand(eventDef.recurringDef.typeData, { + start: dateEnv.subtract(framingRange.start, duration), + end: framingRange.end + }, dateEnv); + // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to + if (eventDef.allDay) { + markers = markers.map(startOfDay); + } + return markers; + } + + var hasOwnProperty = Object.prototype.hasOwnProperty; + // Merges an array of objects into a single object. + // The second argument allows for an array of property names who's object values will be merged together. + function mergeProps(propObjs, complexProps) { + var dest = {}; + var i; + var name; + var complexObjs; + var j; + var val; + var props; + if (complexProps) { + for (i = 0; i < complexProps.length; i++) { + name = complexProps[i]; + complexObjs = []; + // collect the trailing object values, stopping when a non-object is discovered + for (j = propObjs.length - 1; j >= 0; j--) { + val = propObjs[j][name]; + if (typeof val === 'object' && val) { // non-null object + complexObjs.unshift(val); + } + else if (val !== undefined) { + dest[name] = val; // if there were no objects, this value will be used + break; + } + } + // if the trailing values were objects, use the merged value + if (complexObjs.length) { + dest[name] = mergeProps(complexObjs); + } + } + } + // copy values into the destination, going from last to first + for (i = propObjs.length - 1; i >= 0; i--) { + props = propObjs[i]; + for (name in props) { + if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign + dest[name] = props[name]; + } + } + } + return dest; + } + function filterHash(hash, func) { + var filtered = {}; + for (var key in hash) { + if (func(hash[key], key)) { + filtered[key] = hash[key]; + } + } + return filtered; + } + function mapHash(hash, func) { + var newHash = {}; + for (var key in hash) { + newHash[key] = func(hash[key], key); + } + return newHash; + } + function arrayToHash(a) { + var hash = {}; + for (var _i = 0, a_1 = a; _i < a_1.length; _i++) { + var item = a_1[_i]; + hash[item] = true; + } + return hash; + } + function hashValuesToArray(obj) { + var a = []; + for (var key in obj) { + a.push(obj[key]); + } + return a; + } + function isPropsEqual(obj0, obj1) { + for (var key in obj0) { + if (hasOwnProperty.call(obj0, key)) { + if (!(key in obj1)) { + return false; + } + } + } + for (var key in obj1) { + if (hasOwnProperty.call(obj1, key)) { + if (obj0[key] !== obj1[key]) { + return false; + } + } + } + return true; + } + + function parseEvents(rawEvents, sourceId, calendar, allowOpenRange) { + var eventStore = createEmptyEventStore(); + for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) { + var rawEvent = rawEvents_1[_i]; + var tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange); + if (tuple) { + eventTupleToStore(tuple, eventStore); + } + } + return eventStore; + } + function eventTupleToStore(tuple, eventStore) { + if (eventStore === void 0) { eventStore = createEmptyEventStore(); } + eventStore.defs[tuple.def.defId] = tuple.def; + if (tuple.instance) { + eventStore.instances[tuple.instance.instanceId] = tuple.instance; + } + return eventStore; + } + function expandRecurring(eventStore, framingRange, calendar) { + var dateEnv = calendar.dateEnv; + var defs = eventStore.defs, instances = eventStore.instances; + // remove existing recurring instances + instances = filterHash(instances, function (instance) { + return !defs[instance.defId].recurringDef; + }); + for (var defId in defs) { + var def = defs[defId]; + if (def.recurringDef) { + var duration = def.recurringDef.duration; + if (!duration) { + duration = def.allDay ? + calendar.defaultAllDayEventDuration : + calendar.defaultTimedEventDuration; + } + var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes); + for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) { + var start = starts_1[_i]; + var instance = createEventInstance(defId, { + start: start, + end: dateEnv.add(start, duration) + }); + instances[instance.instanceId] = instance; + } + } + } + return { defs: defs, instances: instances }; + } + // retrieves events that have the same groupId as the instance specified by `instanceId` + // or they are the same as the instance. + // why might instanceId not be in the store? an event from another calendar? + function getRelevantEvents(eventStore, instanceId) { + var instance = eventStore.instances[instanceId]; + if (instance) { + var def_1 = eventStore.defs[instance.defId]; + // get events/instances with same group + var newStore = filterEventStoreDefs(eventStore, function (lookDef) { + return isEventDefsGrouped(def_1, lookDef); + }); + // add the original + // TODO: wish we could use eventTupleToStore or something like it + newStore.defs[def_1.defId] = def_1; + newStore.instances[instance.instanceId] = instance; + return newStore; + } + return createEmptyEventStore(); + } + function isEventDefsGrouped(def0, def1) { + return Boolean(def0.groupId && def0.groupId === def1.groupId); + } + function transformRawEvents(rawEvents, eventSource, calendar) { + var calEachTransform = calendar.opt('eventDataTransform'); + var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null; + if (sourceEachTransform) { + rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform); + } + if (calEachTransform) { + rawEvents = transformEachRawEvent(rawEvents, calEachTransform); + } + return rawEvents; + } + function transformEachRawEvent(rawEvents, func) { + var refinedEvents; + if (!func) { + refinedEvents = rawEvents; + } + else { + refinedEvents = []; + for (var _i = 0, rawEvents_2 = rawEvents; _i < rawEvents_2.length; _i++) { + var rawEvent = rawEvents_2[_i]; + var refinedEvent = func(rawEvent); + if (refinedEvent) { + refinedEvents.push(refinedEvent); + } + else if (refinedEvent == null) { + refinedEvents.push(rawEvent); + } // if a different falsy value, do nothing + } + } + return refinedEvents; + } + function createEmptyEventStore() { + return { defs: {}, instances: {} }; + } + function mergeEventStores(store0, store1) { + return { + defs: __assign({}, store0.defs, store1.defs), + instances: __assign({}, store0.instances, store1.instances) + }; + } + function filterEventStoreDefs(eventStore, filterFunc) { + var defs = filterHash(eventStore.defs, filterFunc); + var instances = filterHash(eventStore.instances, function (instance) { + return defs[instance.defId]; // still exists? + }); + return { defs: defs, instances: instances }; + } + + function parseRange(input, dateEnv) { + var start = null; + var end = null; + if (input.start) { + start = dateEnv.createMarker(input.start); + } + if (input.end) { + end = dateEnv.createMarker(input.end); + } + if (!start && !end) { + return null; + } + if (start && end && end < start) { + return null; + } + return { start: start, end: end }; + } + // SIDE-EFFECT: will mutate ranges. + // Will return a new array result. + function invertRanges(ranges, constraintRange) { + var invertedRanges = []; + var start = constraintRange.start; // the end of the previous range. the start of the new range + var i; + var dateRange; + // ranges need to be in order. required for our date-walking algorithm + ranges.sort(compareRanges); + for (i = 0; i < ranges.length; i++) { + dateRange = ranges[i]; + // add the span of time before the event (if there is any) + if (dateRange.start > start) { // compare millisecond time (skip any ambig logic) + invertedRanges.push({ start: start, end: dateRange.start }); + } + if (dateRange.end > start) { + start = dateRange.end; + } + } + // add the span of time after the last event (if there is any) + if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic) + invertedRanges.push({ start: start, end: constraintRange.end }); + } + return invertedRanges; + } + function compareRanges(range0, range1) { + return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first + } + function intersectRanges(range0, range1) { + var start = range0.start; + var end = range0.end; + var newRange = null; + if (range1.start !== null) { + if (start === null) { + start = range1.start; + } + else { + start = new Date(Math.max(start.valueOf(), range1.start.valueOf())); + } + } + if (range1.end != null) { + if (end === null) { + end = range1.end; + } + else { + end = new Date(Math.min(end.valueOf(), range1.end.valueOf())); + } + } + if (start === null || end === null || start < end) { + newRange = { start: start, end: end }; + } + return newRange; + } + function rangesEqual(range0, range1) { + return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) && + (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf()); + } + function rangesIntersect(range0, range1) { + return (range0.end === null || range1.start === null || range0.end > range1.start) && + (range0.start === null || range1.end === null || range0.start < range1.end); + } + function rangeContainsRange(outerRange, innerRange) { + return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) && + (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end)); + } + function rangeContainsMarker(range, date) { + return (range.start === null || date >= range.start) && + (range.end === null || date < range.end); + } + // If the given date is not within the given range, move it inside. + // (If it's past the end, make it one millisecond before the end). + function constrainMarkerToRange(date, range) { + if (range.start != null && date < range.start) { + return range.start; + } + if (range.end != null && date >= range.end) { + return new Date(range.end.valueOf() - 1); + } + return date; + } + + function removeExact(array, exactVal) { + var removeCnt = 0; + var i = 0; + while (i < array.length) { + if (array[i] === exactVal) { + array.splice(i, 1); + removeCnt++; + } + else { + i++; + } + } + return removeCnt; + } + function isArraysEqual(a0, a1) { + var len = a0.length; + var i; + if (len !== a1.length) { // not array? or not same length? + return false; + } + for (i = 0; i < len; i++) { + if (a0[i] !== a1[i]) { + return false; + } + } + return true; + } + + function memoize(workerFunc) { + var args; + var res; + return function () { + if (!args || !isArraysEqual(args, arguments)) { + args = arguments; + res = workerFunc.apply(this, arguments); + } + return res; + }; + } + /* + always executes the workerFunc, but if the result is equal to the previous result, + return the previous result instead. + */ + function memoizeOutput(workerFunc, equalityFunc) { + var cachedRes = null; + return function () { + var newRes = workerFunc.apply(this, arguments); + if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) { + cachedRes = newRes; + } + return cachedRes; + }; + } + + var EXTENDED_SETTINGS_AND_SEVERITIES = { + week: 3, + separator: 0, + omitZeroMinute: 0, + meridiem: 0, + omitCommas: 0 + }; + var STANDARD_DATE_PROP_SEVERITIES = { + timeZoneName: 7, + era: 6, + year: 5, + month: 4, + day: 2, + weekday: 2, + hour: 1, + minute: 1, + second: 1 + }; + var MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too + var COMMA_RE = /,/g; // we need re for globalness + var MULTI_SPACE_RE = /\s+/g; + var LTR_RE = /\u200e/g; // control character + var UTC_RE = /UTC|GMT/; + var NativeFormatter = /** @class */ (function () { + function NativeFormatter(formatSettings) { + var standardDateProps = {}; + var extendedSettings = {}; + var severity = 0; + for (var name_1 in formatSettings) { + if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) { + extendedSettings[name_1] = formatSettings[name_1]; + severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity); + } + else { + standardDateProps[name_1] = formatSettings[name_1]; + if (name_1 in STANDARD_DATE_PROP_SEVERITIES) { + severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity); + } + } + } + this.standardDateProps = standardDateProps; + this.extendedSettings = extendedSettings; + this.severity = severity; + this.buildFormattingFunc = memoize(buildFormattingFunc); + } + NativeFormatter.prototype.format = function (date, context) { + return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date); + }; + NativeFormatter.prototype.formatRange = function (start, end, context) { + var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings; + var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem); + if (!diffSeverity) { + return this.format(start, context); + } + var biggestUnitForPartial = diffSeverity; + if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time + (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') && + (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') && + (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) { + biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time + } + var full0 = this.format(start, context); + var full1 = this.format(end, context); + if (full0 === full1) { + return full0; + } + var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial); + var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context); + var partial0 = partialFormattingFunc(start); + var partial1 = partialFormattingFunc(end); + var insertion = findCommonInsertion(full0, partial0, full1, partial1); + var separator = extendedSettings.separator || ''; + if (insertion) { + return insertion.before + partial0 + separator + partial1 + insertion.after; + } + return full0 + separator + full1; + }; + NativeFormatter.prototype.getLargestUnit = function () { + switch (this.severity) { + case 7: + case 6: + case 5: + return 'year'; + case 4: + return 'month'; + case 3: + return 'week'; + default: + return 'day'; + } + }; + return NativeFormatter; + }()); + function buildFormattingFunc(standardDateProps, extendedSettings, context) { + var standardDatePropCnt = Object.keys(standardDateProps).length; + if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') { + return function (date) { + return formatTimeZoneOffset(date.timeZoneOffset); + }; + } + if (standardDatePropCnt === 0 && extendedSettings.week) { + return function (date) { + return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekLabel, context.locale, extendedSettings.week); + }; + } + return buildNativeFormattingFunc(standardDateProps, extendedSettings, context); + } + function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) { + standardDateProps = __assign({}, standardDateProps); // copy + extendedSettings = __assign({}, extendedSettings); // copy + sanitizeSettings(standardDateProps, extendedSettings); + standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers + var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps); + var zeroFormat; // needed? + if (extendedSettings.omitZeroMinute) { + var zeroProps = __assign({}, standardDateProps); + delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings + zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps); + } + return function (date) { + var marker = date.marker; + var format; + if (zeroFormat && !marker.getUTCMinutes()) { + format = zeroFormat; + } + else { + format = normalFormat; + } + var s = format.format(marker); + return postProcess(s, date, standardDateProps, extendedSettings, context); + }; + } + function sanitizeSettings(standardDateProps, extendedSettings) { + // deal with a browser inconsistency where formatting the timezone + // requires that the hour/minute be present. + if (standardDateProps.timeZoneName) { + if (!standardDateProps.hour) { + standardDateProps.hour = '2-digit'; + } + if (!standardDateProps.minute) { + standardDateProps.minute = '2-digit'; + } + } + // only support short timezone names + if (standardDateProps.timeZoneName === 'long') { + standardDateProps.timeZoneName = 'short'; + } + // if requesting to display seconds, MUST display minutes + if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) { + delete extendedSettings.omitZeroMinute; + } + } + function postProcess(s, date, standardDateProps, extendedSettings, context) { + s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes + if (standardDateProps.timeZoneName === 'short') { + s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ? + 'UTC' : // important to normalize for IE, which does "GMT" + formatTimeZoneOffset(date.timeZoneOffset)); + } + if (extendedSettings.omitCommas) { + s = s.replace(COMMA_RE, '').trim(); + } + if (extendedSettings.omitZeroMinute) { + s = s.replace(':00', ''); // zeroFormat doesn't always achieve this + } + // ^ do anything that might create adjacent spaces before this point, + // because MERIDIEM_RE likes to eat up loading spaces + if (extendedSettings.meridiem === false) { + s = s.replace(MERIDIEM_RE, '').trim(); + } + else if (extendedSettings.meridiem === 'narrow') { // a/p + s = s.replace(MERIDIEM_RE, function (m0, m1) { + return m1.toLocaleLowerCase(); + }); + } + else if (extendedSettings.meridiem === 'short') { // am/pm + s = s.replace(MERIDIEM_RE, function (m0, m1) { + return m1.toLocaleLowerCase() + 'm'; + }); + } + else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase + s = s.replace(MERIDIEM_RE, function (m0) { + return m0.toLocaleLowerCase(); + }); + } + s = s.replace(MULTI_SPACE_RE, ' '); + s = s.trim(); + return s; + } + function injectTzoStr(s, tzoStr) { + var replaced = false; + s = s.replace(UTC_RE, function () { + replaced = true; + return tzoStr; + }); + // IE11 doesn't include UTC/GMT in the original string, so append to end + if (!replaced) { + s += ' ' + tzoStr; + } + return s; + } + function formatWeekNumber(num, weekLabel, locale, display) { + var parts = []; + if (display === 'narrow') { + parts.push(weekLabel); + } + else if (display === 'short') { + parts.push(weekLabel, ' '); + } + // otherwise, considered 'numeric' + parts.push(locale.simpleNumberFormat.format(num)); + if (locale.options.isRtl) { // TODO: use control characters instead? + parts.reverse(); + } + return parts.join(''); + } + // Range Formatting Utils + // 0 = exactly the same + // 1 = different by time + // and bigger + function computeMarkerDiffSeverity(d0, d1, ca) { + if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) { + return 5; + } + if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) { + return 4; + } + if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) { + return 2; + } + if (timeAsMs(d0) !== timeAsMs(d1)) { + return 1; + } + return 0; + } + function computePartialFormattingOptions(options, biggestUnit) { + var partialOptions = {}; + for (var name_2 in options) { + if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone) + STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) { + partialOptions[name_2] = options[name_2]; + } + } + return partialOptions; + } + function findCommonInsertion(full0, partial0, full1, partial1) { + var i0 = 0; + while (i0 < full0.length) { + var found0 = full0.indexOf(partial0, i0); + if (found0 === -1) { + break; + } + var before0 = full0.substr(0, found0); + i0 = found0 + partial0.length; + var after0 = full0.substr(i0); + var i1 = 0; + while (i1 < full1.length) { + var found1 = full1.indexOf(partial1, i1); + if (found1 === -1) { + break; + } + var before1 = full1.substr(0, found1); + i1 = found1 + partial1.length; + var after1 = full1.substr(i1); + if (before0 === before1 && after0 === after1) { + return { + before: before0, + after: after0 + }; + } + } + } + return null; + } + + /* + TODO: fix the terminology of "formatter" vs "formatting func" + */ + /* + At the time of instantiation, this object does not know which cmd-formatting system it will use. + It receives this at the time of formatting, as a setting. + */ + var CmdFormatter = /** @class */ (function () { + function CmdFormatter(cmdStr, separator) { + this.cmdStr = cmdStr; + this.separator = separator; + } + CmdFormatter.prototype.format = function (date, context) { + return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator)); + }; + CmdFormatter.prototype.formatRange = function (start, end, context) { + return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator)); + }; + return CmdFormatter; + }()); + + var FuncFormatter = /** @class */ (function () { + function FuncFormatter(func) { + this.func = func; + } + FuncFormatter.prototype.format = function (date, context) { + return this.func(createVerboseFormattingArg(date, null, context)); + }; + FuncFormatter.prototype.formatRange = function (start, end, context) { + return this.func(createVerboseFormattingArg(start, end, context)); + }; + return FuncFormatter; + }()); + + // Formatter Object Creation + function createFormatter(input, defaultSeparator) { + if (typeof input === 'object' && input) { // non-null object + if (typeof defaultSeparator === 'string') { + input = __assign({ separator: defaultSeparator }, input); + } + return new NativeFormatter(input); + } + else if (typeof input === 'string') { + return new CmdFormatter(input, defaultSeparator); + } + else if (typeof input === 'function') { + return new FuncFormatter(input); + } + } + // String Utils + // timeZoneOffset is in minutes + function buildIsoString(marker, timeZoneOffset, stripZeroTime) { + if (stripZeroTime === void 0) { stripZeroTime = false; } + var s = marker.toISOString(); + s = s.replace('.000', ''); + if (stripZeroTime) { + s = s.replace('T00:00:00Z', ''); + } + if (s.length > 10) { // time part wasn't stripped, can add timezone info + if (timeZoneOffset == null) { + s = s.replace('Z', ''); + } + else if (timeZoneOffset !== 0) { + s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true)); + } + // otherwise, its UTC-0 and we want to keep the Z + } + return s; + } + function formatIsoTimeString(marker) { + return padStart(marker.getUTCHours(), 2) + ':' + + padStart(marker.getUTCMinutes(), 2) + ':' + + padStart(marker.getUTCSeconds(), 2); + } + function formatTimeZoneOffset(minutes, doIso) { + if (doIso === void 0) { doIso = false; } + var sign = minutes < 0 ? '-' : '+'; + var abs = Math.abs(minutes); + var hours = Math.floor(abs / 60); + var mins = Math.round(abs % 60); + if (doIso) { + return sign + padStart(hours, 2) + ':' + padStart(mins, 2); + } + else { + return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : ''); + } + } + // Arg Utils + function createVerboseFormattingArg(start, end, context, separator) { + var startInfo = expandZonedMarker(start, context.calendarSystem); + var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null; + return { + date: startInfo, + start: startInfo, + end: endInfo, + timeZone: context.timeZone, + localeCodes: context.locale.codes, + separator: separator + }; + } + function expandZonedMarker(dateInfo, calendarSystem) { + var a = calendarSystem.markerToArray(dateInfo.marker); + return { + marker: dateInfo.marker, + timeZoneOffset: dateInfo.timeZoneOffset, + array: a, + year: a[0], + month: a[1], + day: a[2], + hour: a[3], + minute: a[4], + second: a[5], + millisecond: a[6] + }; + } + + var EventSourceApi = /** @class */ (function () { + function EventSourceApi(calendar, internalEventSource) { + this.calendar = calendar; + this.internalEventSource = internalEventSource; + } + EventSourceApi.prototype.remove = function () { + this.calendar.dispatch({ + type: 'REMOVE_EVENT_SOURCE', + sourceId: this.internalEventSource.sourceId + }); + }; + EventSourceApi.prototype.refetch = function () { + this.calendar.dispatch({ + type: 'FETCH_EVENT_SOURCES', + sourceIds: [this.internalEventSource.sourceId] + }); + }; + Object.defineProperty(EventSourceApi.prototype, "id", { + get: function () { + return this.internalEventSource.publicId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventSourceApi.prototype, "url", { + // only relevant to json-feed event sources + get: function () { + return this.internalEventSource.meta.url; + }, + enumerable: true, + configurable: true + }); + return EventSourceApi; + }()); + + var EventApi = /** @class */ (function () { + function EventApi(calendar, def, instance) { + this._calendar = calendar; + this._def = def; + this._instance = instance || null; + } + /* + TODO: make event struct more responsible for this + */ + EventApi.prototype.setProp = function (name, val) { + var _a, _b; + if (name in DATE_PROPS) ; + else if (name in NON_DATE_PROPS) { + if (typeof NON_DATE_PROPS[name] === 'function') { + val = NON_DATE_PROPS[name](val); + } + this.mutate({ + standardProps: (_a = {}, _a[name] = val, _a) + }); + } + else if (name in UNSCOPED_EVENT_UI_PROPS) { + var ui = void 0; + if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') { + val = UNSCOPED_EVENT_UI_PROPS[name](val); + } + if (name === 'color') { + ui = { backgroundColor: val, borderColor: val }; + } + else if (name === 'editable') { + ui = { startEditable: val, durationEditable: val }; + } + else { + ui = (_b = {}, _b[name] = val, _b); + } + this.mutate({ + standardProps: { ui: ui } + }); + } + }; + EventApi.prototype.setExtendedProp = function (name, val) { + var _a; + this.mutate({ + extendedProps: (_a = {}, _a[name] = val, _a) + }); + }; + EventApi.prototype.setStart = function (startInput, options) { + if (options === void 0) { options = {}; } + var dateEnv = this._calendar.dateEnv; + var start = dateEnv.createMarker(startInput); + if (start && this._instance) { // TODO: warning if parsed bad + var instanceRange = this._instance.range; + var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!? + if (options.maintainDuration) { + this.mutate({ datesDelta: startDelta }); + } + else { + this.mutate({ startDelta: startDelta }); + } + } + }; + EventApi.prototype.setEnd = function (endInput, options) { + if (options === void 0) { options = {}; } + var dateEnv = this._calendar.dateEnv; + var end; + if (endInput != null) { + end = dateEnv.createMarker(endInput); + if (!end) { + return; // TODO: warning if parsed bad + } + } + if (this._instance) { + if (end) { + var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity); + this.mutate({ endDelta: endDelta }); + } + else { + this.mutate({ standardProps: { hasEnd: false } }); + } + } + }; + EventApi.prototype.setDates = function (startInput, endInput, options) { + if (options === void 0) { options = {}; } + var dateEnv = this._calendar.dateEnv; + var standardProps = { allDay: options.allDay }; + var start = dateEnv.createMarker(startInput); + var end; + if (!start) { + return; // TODO: warning if parsed bad + } + if (endInput != null) { + end = dateEnv.createMarker(endInput); + if (!end) { // TODO: warning if parsed bad + return; + } + } + if (this._instance) { + var instanceRange = this._instance.range; + // when computing the diff for an event being converted to all-day, + // compute diff off of the all-day values the way event-mutation does. + if (options.allDay === true) { + instanceRange = computeAlignedDayRange(instanceRange); + } + var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); + if (end) { + var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity); + if (durationsEqual(startDelta, endDelta)) { + this.mutate({ datesDelta: startDelta, standardProps: standardProps }); + } + else { + this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps }); + } + } + else { // means "clear the end" + standardProps.hasEnd = false; + this.mutate({ datesDelta: startDelta, standardProps: standardProps }); + } + } + }; + EventApi.prototype.moveStart = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // TODO: warning if parsed bad + this.mutate({ startDelta: delta }); + } + }; + EventApi.prototype.moveEnd = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // TODO: warning if parsed bad + this.mutate({ endDelta: delta }); + } + }; + EventApi.prototype.moveDates = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // TODO: warning if parsed bad + this.mutate({ datesDelta: delta }); + } + }; + EventApi.prototype.setAllDay = function (allDay, options) { + if (options === void 0) { options = {}; } + var standardProps = { allDay: allDay }; + var maintainDuration = options.maintainDuration; + if (maintainDuration == null) { + maintainDuration = this._calendar.opt('allDayMaintainDuration'); + } + if (this._def.allDay !== allDay) { + standardProps.hasEnd = maintainDuration; + } + this.mutate({ standardProps: standardProps }); + }; + EventApi.prototype.formatRange = function (formatInput) { + var dateEnv = this._calendar.dateEnv; + var instance = this._instance; + var formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator')); + if (this._def.hasEnd) { + return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, { + forcedStartTzo: instance.forcedStartTzo, + forcedEndTzo: instance.forcedEndTzo + }); + } + else { + return dateEnv.format(instance.range.start, formatter, { + forcedTzo: instance.forcedStartTzo + }); + } + }; + EventApi.prototype.mutate = function (mutation) { + var def = this._def; + var instance = this._instance; + if (instance) { + this._calendar.dispatch({ + type: 'MUTATE_EVENTS', + instanceId: instance.instanceId, + mutation: mutation, + fromApi: true + }); + var eventStore = this._calendar.state.eventStore; + this._def = eventStore.defs[def.defId]; + this._instance = eventStore.instances[instance.instanceId]; + } + }; + EventApi.prototype.remove = function () { + this._calendar.dispatch({ + type: 'REMOVE_EVENT_DEF', + defId: this._def.defId + }); + }; + Object.defineProperty(EventApi.prototype, "source", { + get: function () { + var sourceId = this._def.sourceId; + if (sourceId) { + return new EventSourceApi(this._calendar, this._calendar.state.eventSources[sourceId]); + } + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "start", { + get: function () { + return this._instance ? + this._calendar.dateEnv.toDate(this._instance.range.start) : + null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "end", { + get: function () { + return (this._instance && this._def.hasEnd) ? + this._calendar.dateEnv.toDate(this._instance.range.end) : + null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "id", { + // computable props that all access the def + // TODO: find a TypeScript-compatible way to do this at scale + get: function () { return this._def.publicId; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "groupId", { + get: function () { return this._def.groupId; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "allDay", { + get: function () { return this._def.allDay; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "title", { + get: function () { return this._def.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "url", { + get: function () { return this._def.url; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "rendering", { + get: function () { return this._def.rendering; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "startEditable", { + get: function () { return this._def.ui.startEditable; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "durationEditable", { + get: function () { return this._def.ui.durationEditable; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "constraint", { + get: function () { return this._def.ui.constraints[0] || null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "overlap", { + get: function () { return this._def.ui.overlap; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "allow", { + get: function () { return this._def.ui.allows[0] || null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "backgroundColor", { + get: function () { return this._def.ui.backgroundColor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "borderColor", { + get: function () { return this._def.ui.borderColor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "textColor", { + get: function () { return this._def.ui.textColor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "classNames", { + // NOTE: user can't modify these because Object.freeze was called in event-def parsing + get: function () { return this._def.ui.classNames; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventApi.prototype, "extendedProps", { + get: function () { return this._def.extendedProps; }, + enumerable: true, + configurable: true + }); + return EventApi; + }()); + + /* + Specifying nextDayThreshold signals that all-day ranges should be sliced. + */ + function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) { + var inverseBgByGroupId = {}; + var inverseBgByDefId = {}; + var defByGroupId = {}; + var bgRanges = []; + var fgRanges = []; + var eventUis = compileEventUis(eventStore.defs, eventUiBases); + for (var defId in eventStore.defs) { + var def = eventStore.defs[defId]; + if (def.rendering === 'inverse-background') { + if (def.groupId) { + inverseBgByGroupId[def.groupId] = []; + if (!defByGroupId[def.groupId]) { + defByGroupId[def.groupId] = def; + } + } + else { + inverseBgByDefId[defId] = []; + } + } + } + for (var instanceId in eventStore.instances) { + var instance = eventStore.instances[instanceId]; + var def = eventStore.defs[instance.defId]; + var ui = eventUis[def.defId]; + var origRange = instance.range; + var normalRange = (!def.allDay && nextDayThreshold) ? + computeVisibleDayRange(origRange, nextDayThreshold) : + origRange; + var slicedRange = intersectRanges(normalRange, framingRange); + if (slicedRange) { + if (def.rendering === 'inverse-background') { + if (def.groupId) { + inverseBgByGroupId[def.groupId].push(slicedRange); + } + else { + inverseBgByDefId[instance.defId].push(slicedRange); + } + } + else { + (def.rendering === 'background' ? bgRanges : fgRanges).push({ + def: def, + ui: ui, + instance: instance, + range: slicedRange, + isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(), + isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf() + }); + } + } + } + for (var groupId in inverseBgByGroupId) { // BY GROUP + var ranges = inverseBgByGroupId[groupId]; + var invertedRanges = invertRanges(ranges, framingRange); + for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) { + var invertedRange = invertedRanges_1[_i]; + var def = defByGroupId[groupId]; + var ui = eventUis[def.defId]; + bgRanges.push({ + def: def, + ui: ui, + instance: null, + range: invertedRange, + isStart: false, + isEnd: false + }); + } + } + for (var defId in inverseBgByDefId) { + var ranges = inverseBgByDefId[defId]; + var invertedRanges = invertRanges(ranges, framingRange); + for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) { + var invertedRange = invertedRanges_2[_a]; + bgRanges.push({ + def: eventStore.defs[defId], + ui: eventUis[defId], + instance: null, + range: invertedRange, + isStart: false, + isEnd: false + }); + } + } + return { bg: bgRanges, fg: fgRanges }; + } + function hasBgRendering(def) { + return def.rendering === 'background' || def.rendering === 'inverse-background'; + } + function filterSegsViaEls(context, segs, isMirror) { + var calendar = context.calendar, view = context.view; + if (calendar.hasPublicHandlers('eventRender')) { + segs = segs.filter(function (seg) { + var custom = calendar.publiclyTrigger('eventRender', [ + { + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + isMirror: isMirror, + isStart: seg.isStart, + isEnd: seg.isEnd, + // TODO: include seg.range once all components consistently generate it + el: seg.el, + view: view + } + ]); + if (custom === false) { // means don't render at all + return false; + } + else if (custom && custom !== true) { + seg.el = custom; + } + return true; + }); + } + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + setElSeg(seg.el, seg); + } + return segs; + } + function setElSeg(el, seg) { + el.fcSeg = seg; + } + function getElSeg(el) { + return el.fcSeg || null; + } + // event ui computation + function compileEventUis(eventDefs, eventUiBases) { + return mapHash(eventDefs, function (eventDef) { + return compileEventUi(eventDef, eventUiBases); + }); + } + function compileEventUi(eventDef, eventUiBases) { + var uis = []; + if (eventUiBases['']) { + uis.push(eventUiBases['']); + } + if (eventUiBases[eventDef.defId]) { + uis.push(eventUiBases[eventDef.defId]); + } + uis.push(eventDef.ui); + return combineEventUis(uis); + } + // triggers + function triggerRenderedSegs(context, segs, isMirrors) { + var calendar = context.calendar, view = context.view; + if (calendar.hasPublicHandlers('eventPositioned')) { + for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) { + var seg = segs_2[_i]; + calendar.publiclyTriggerAfterSizing('eventPositioned', [ + { + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + isMirror: isMirrors, + isStart: seg.isStart, + isEnd: seg.isEnd, + el: seg.el, + view: view + } + ]); + } + } + if (!calendar.state.loadingLevel) { // avoid initial empty state while pending + calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once + } + } + function triggerWillRemoveSegs(context, segs, isMirrors) { + var calendar = context.calendar, view = context.view; + for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) { + var seg = segs_3[_i]; + calendar.trigger('eventElRemove', seg.el); + } + if (calendar.hasPublicHandlers('eventDestroy')) { + for (var _a = 0, segs_4 = segs; _a < segs_4.length; _a++) { + var seg = segs_4[_a]; + calendar.publiclyTrigger('eventDestroy', [ + { + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + isMirror: isMirrors, + el: seg.el, + view: view + } + ]); + } + } + } + // is-interactable + function computeEventDraggable(context, eventDef, eventUi) { + var calendar = context.calendar, view = context.view; + var transformers = calendar.pluginSystem.hooks.isDraggableTransformers; + var val = eventUi.startEditable; + for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) { + var transformer = transformers_1[_i]; + val = transformer(val, eventDef, eventUi, view); + } + return val; + } + function computeEventStartResizable(context, eventDef, eventUi) { + return eventUi.durationEditable && context.options.eventResizableFromStart; + } + function computeEventEndResizable(context, eventDef, eventUi) { + return eventUi.durationEditable; + } + + // applies the mutation to ALL defs/instances within the event store + function applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) { + var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase); + var dest = createEmptyEventStore(); + for (var defId in eventStore.defs) { + var def = eventStore.defs[defId]; + dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar); + } + for (var instanceId in eventStore.instances) { + var instance = eventStore.instances[instanceId]; + var def = dest.defs[instance.defId]; // important to grab the newly modified def + dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar); + } + return dest; + } + function applyMutationToEventDef(eventDef, eventConfig, mutation, appliers, calendar) { + var standardProps = mutation.standardProps || {}; + // if hasEnd has not been specified, guess a good value based on deltas. + // if duration will change, there's no way the default duration will persist, + // and thus, we need to mark the event as having a real end + if (standardProps.hasEnd == null && + eventConfig.durationEditable && + (mutation.startDelta || mutation.endDelta)) { + standardProps.hasEnd = true; // TODO: is this mutation okay? + } + var copy = __assign({}, eventDef, standardProps, { ui: __assign({}, eventDef.ui, standardProps.ui) }); + if (mutation.extendedProps) { + copy.extendedProps = __assign({}, copy.extendedProps, mutation.extendedProps); + } + for (var _i = 0, appliers_1 = appliers; _i < appliers_1.length; _i++) { + var applier = appliers_1[_i]; + applier(copy, mutation, calendar); + } + if (!copy.hasEnd && calendar.opt('forceEventDuration')) { + copy.hasEnd = true; + } + return copy; + } + function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef + eventConfig, mutation, calendar) { + var dateEnv = calendar.dateEnv; + var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true; + var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false; + var copy = __assign({}, eventInstance); + if (forceAllDay) { + copy.range = computeAlignedDayRange(copy.range); + } + if (mutation.datesDelta && eventConfig.startEditable) { + copy.range = { + start: dateEnv.add(copy.range.start, mutation.datesDelta), + end: dateEnv.add(copy.range.end, mutation.datesDelta) + }; + } + if (mutation.startDelta && eventConfig.durationEditable) { + copy.range = { + start: dateEnv.add(copy.range.start, mutation.startDelta), + end: copy.range.end + }; + } + if (mutation.endDelta && eventConfig.durationEditable) { + copy.range = { + start: copy.range.start, + end: dateEnv.add(copy.range.end, mutation.endDelta) + }; + } + if (clearEnd) { + copy.range = { + start: copy.range.start, + end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start) + }; + } + // in case event was all-day but the supplied deltas were not + // better util for this? + if (eventDef.allDay) { + copy.range = { + start: startOfDay(copy.range.start), + end: startOfDay(copy.range.end) + }; + } + // handle invalid durations + if (copy.range.end < copy.range.start) { + copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start); + } + return copy; + } + + function reduceEventStore (eventStore, action, eventSources, dateProfile, calendar) { + switch (action.type) { + case 'RECEIVE_EVENTS': // raw + return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, calendar); + case 'ADD_EVENTS': // already parsed, but not expanded + return addEvent(eventStore, action.eventStore, // new ones + dateProfile ? dateProfile.activeRange : null, calendar); + case 'MERGE_EVENTS': // already parsed and expanded + return mergeEventStores(eventStore, action.eventStore); + case 'PREV': // TODO: how do we track all actions that affect dateProfile :( + case 'NEXT': + case 'SET_DATE': + case 'SET_VIEW_TYPE': + if (dateProfile) { + return expandRecurring(eventStore, dateProfile.activeRange, calendar); + } + else { + return eventStore; + } + case 'CHANGE_TIMEZONE': + return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv); + case 'MUTATE_EVENTS': + return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar); + case 'REMOVE_EVENT_INSTANCES': + return excludeInstances(eventStore, action.instances); + case 'REMOVE_EVENT_DEF': + return filterEventStoreDefs(eventStore, function (eventDef) { + return eventDef.defId !== action.defId; + }); + case 'REMOVE_EVENT_SOURCE': + return excludeEventsBySourceId(eventStore, action.sourceId); + case 'REMOVE_ALL_EVENT_SOURCES': + return filterEventStoreDefs(eventStore, function (eventDef) { + return !eventDef.sourceId; // only keep events with no source id + }); + case 'REMOVE_ALL_EVENTS': + return createEmptyEventStore(); + case 'RESET_EVENTS': + return { + defs: eventStore.defs, + instances: eventStore.instances + }; + default: + return eventStore; + } + } + function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, calendar) { + if (eventSource && // not already removed + fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources + ) { + var subset = parseEvents(transformRawEvents(rawEvents, eventSource, calendar), eventSource.sourceId, calendar); + if (fetchRange) { + subset = expandRecurring(subset, fetchRange, calendar); + } + return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset); + } + return eventStore; + } + function addEvent(eventStore, subset, expandRange, calendar) { + if (expandRange) { + subset = expandRecurring(subset, expandRange, calendar); + } + return mergeEventStores(eventStore, subset); + } + function rezoneDates(eventStore, oldDateEnv, newDateEnv) { + var defs = eventStore.defs; + var instances = mapHash(eventStore.instances, function (instance) { + var def = defs[instance.defId]; + if (def.allDay || def.recurringDef) { + return instance; // isn't dependent on timezone + } + else { + return __assign({}, instance, { range: { + start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)), + end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)) + }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo }); + } + }); + return { defs: defs, instances: instances }; + } + function applyMutationToRelated(eventStore, instanceId, mutation, fromApi, calendar) { + var relevant = getRelevantEvents(eventStore, instanceId); + var eventConfigBase = fromApi ? + { '': { + startEditable: true, + durationEditable: true, + constraints: [], + overlap: null, + allows: [], + backgroundColor: '', + borderColor: '', + textColor: '', + classNames: [] + } } : + calendar.eventUiBases; + relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar); + return mergeEventStores(eventStore, relevant); + } + function excludeEventsBySourceId(eventStore, sourceId) { + return filterEventStoreDefs(eventStore, function (eventDef) { + return eventDef.sourceId !== sourceId; + }); + } + // QUESTION: why not just return instances? do a general object-property-exclusion util + function excludeInstances(eventStore, removals) { + return { + defs: eventStore.defs, + instances: filterHash(eventStore.instances, function (instance) { + return !removals[instance.instanceId]; + }) + }; + } + + // high-level segmenting-aware tester functions + // ------------------------------------------------------------------------------------------------------------------------ + function isInteractionValid(interaction, calendar) { + return isNewPropsValid({ eventDrag: interaction }, calendar); // HACK: the eventDrag props is used for ALL interactions + } + function isDateSelectionValid(dateSelection, calendar) { + return isNewPropsValid({ dateSelection: dateSelection }, calendar); + } + function isNewPropsValid(newProps, calendar) { + var view = calendar.view; + var props = __assign({ businessHours: view ? view.props.businessHours : createEmptyEventStore(), dateSelection: '', eventStore: calendar.state.eventStore, eventUiBases: calendar.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps); + return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar); + } + function isPropsValid(state, calendar, dateSpanMeta, filterConfig) { + if (dateSpanMeta === void 0) { dateSpanMeta = {}; } + if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) { + return false; + } + if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) { + return false; + } + return true; + } + // Moving Event Validation + // ------------------------------------------------------------------------------------------------------------------------ + function isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig) { + var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions + var subjectEventStore = interaction.mutatedEvents; + var subjectDefs = subjectEventStore.defs; + var subjectInstances = subjectEventStore.instances; + var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ? + state.eventUiBases : + { '': calendar.selectionConfig } // if not a real event, validate as a selection + ); + if (filterConfig) { + subjectConfigs = mapHash(subjectConfigs, filterConfig); + } + var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too? + var otherDefs = otherEventStore.defs; + var otherInstances = otherEventStore.instances; + var otherConfigs = compileEventUis(otherDefs, state.eventUiBases); + for (var subjectInstanceId in subjectInstances) { + var subjectInstance = subjectInstances[subjectInstanceId]; + var subjectRange = subjectInstance.range; + var subjectConfig = subjectConfigs[subjectInstance.defId]; + var subjectDef = subjectDefs[subjectInstance.defId]; + // constraint + if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) { + return false; + } + // overlap + var overlapFunc = calendar.opt('eventOverlap'); + if (typeof overlapFunc !== 'function') { + overlapFunc = null; + } + for (var otherInstanceId in otherInstances) { + var otherInstance = otherInstances[otherInstanceId]; + // intersect! evaluate + if (rangesIntersect(subjectRange, otherInstance.range)) { + var otherOverlap = otherConfigs[otherInstance.defId].overlap; + // consider the other event's overlap. only do this if the subject event is a "real" event + if (otherOverlap === false && interaction.isEvent) { + return false; + } + if (subjectConfig.overlap === false) { + return false; + } + if (overlapFunc && !overlapFunc(new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event + new EventApi(calendar, subjectDef, subjectInstance) // moving event + )) { + return false; + } + } + } + // allow (a function) + var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state + for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) { + var subjectAllow = _a[_i]; + var subjectDateSpan = __assign({}, dateSpanMeta, { range: subjectInstance.range, allDay: subjectDef.allDay }); + var origDef = calendarEventStore.defs[subjectDef.defId]; + var origInstance = calendarEventStore.instances[subjectInstanceId]; + var eventApi = void 0; + if (origDef) { // was previously in the calendar + eventApi = new EventApi(calendar, origDef, origInstance); + } + else { // was an external event + eventApi = new EventApi(calendar, subjectDef); // no instance, because had no dates + } + if (!subjectAllow(calendar.buildDateSpanApi(subjectDateSpan), eventApi)) { + return false; + } + } + } + return true; + } + // Date Selection Validation + // ------------------------------------------------------------------------------------------------------------------------ + function isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig) { + var relevantEventStore = state.eventStore; + var relevantDefs = relevantEventStore.defs; + var relevantInstances = relevantEventStore.instances; + var selection = state.dateSelection; + var selectionRange = selection.range; + var selectionConfig = calendar.selectionConfig; + if (filterConfig) { + selectionConfig = filterConfig(selectionConfig); + } + // constraint + if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) { + return false; + } + // overlap + var overlapFunc = calendar.opt('selectOverlap'); + if (typeof overlapFunc !== 'function') { + overlapFunc = null; + } + for (var relevantInstanceId in relevantInstances) { + var relevantInstance = relevantInstances[relevantInstanceId]; + // intersect! evaluate + if (rangesIntersect(selectionRange, relevantInstance.range)) { + if (selectionConfig.overlap === false) { + return false; + } + if (overlapFunc && !overlapFunc(new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance))) { + return false; + } + } + } + // allow (a function) + for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) { + var selectionAllow = _a[_i]; + var fullDateSpan = __assign({}, dateSpanMeta, selection); + if (!selectionAllow(calendar.buildDateSpanApi(fullDateSpan), null)) { + return false; + } + } + return true; + } + // Constraint Utils + // ------------------------------------------------------------------------------------------------------------------------ + function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, calendar) { + for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) { + var constraint = constraints_1[_i]; + if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar), subjectRange)) { + return false; + } + } + return true; + } + function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours + otherEventStore, // for if constraint is an even group ID + businessHoursUnexpanded, // for if constraint is 'businessHours' + calendar // for expanding businesshours + ) { + if (constraint === 'businessHours') { + return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, calendar)); + } + else if (typeof constraint === 'string') { // an group ID + return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) { + return eventDef.groupId === constraint; + })); + } + else if (typeof constraint === 'object' && constraint) { // non-null object + return eventStoreToRanges(expandRecurring(constraint, subjectRange, calendar)); + } + return []; // if it's false + } + // TODO: move to event-store file? + function eventStoreToRanges(eventStore) { + var instances = eventStore.instances; + var ranges = []; + for (var instanceId in instances) { + ranges.push(instances[instanceId].range); + } + return ranges; + } + // TODO: move to geom file? + function anyRangesContainRange(outerRanges, innerRange) { + for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) { + var outerRange = outerRanges_1[_i]; + if (rangeContainsRange(outerRange, innerRange)) { + return true; + } + } + return false; + } + // Parsing + // ------------------------------------------------------------------------------------------------------------------------ + function normalizeConstraint(input, calendar) { + if (Array.isArray(input)) { + return parseEvents(input, '', calendar, true); // allowOpenRange=true + } + else if (typeof input === 'object' && input) { // non-null object + return parseEvents([input], '', calendar, true); // allowOpenRange=true + } + else if (input != null) { + return String(input); + } + else { + return null; + } + } + + function htmlEscape(s) { + return (s + '').replace(/&/g, '&') + .replace(//g, '>') + .replace(/'/g, ''') + .replace(/"/g, '"') + .replace(/\n/g, '
'); + } + // Given a hash of CSS properties, returns a string of CSS. + // Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values. + function cssToStr(cssProps) { + var statements = []; + for (var name_1 in cssProps) { + var val = cssProps[name_1]; + if (val != null && val !== '') { + statements.push(name_1 + ':' + val); + } + } + return statements.join(';'); + } + // Given an object hash of HTML attribute names to values, + // generates a string that can be injected between < > in HTML + function attrsToStr(attrs) { + var parts = []; + for (var name_2 in attrs) { + var val = attrs[name_2]; + if (val != null) { + parts.push(name_2 + '="' + htmlEscape(val) + '"'); + } + } + return parts.join(' '); + } + function parseClassName(raw) { + if (Array.isArray(raw)) { + return raw; + } + else if (typeof raw === 'string') { + return raw.split(/\s+/); + } + else { + return []; + } + } + + var UNSCOPED_EVENT_UI_PROPS = { + editable: Boolean, + startEditable: Boolean, + durationEditable: Boolean, + constraint: null, + overlap: null, + allow: null, + className: parseClassName, + classNames: parseClassName, + color: String, + backgroundColor: String, + borderColor: String, + textColor: String + }; + function processUnscopedUiProps(rawProps, calendar, leftovers) { + var props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers); + var constraint = normalizeConstraint(props.constraint, calendar); + return { + startEditable: props.startEditable != null ? props.startEditable : props.editable, + durationEditable: props.durationEditable != null ? props.durationEditable : props.editable, + constraints: constraint != null ? [constraint] : [], + overlap: props.overlap, + allows: props.allow != null ? [props.allow] : [], + backgroundColor: props.backgroundColor || props.color, + borderColor: props.borderColor || props.color, + textColor: props.textColor, + classNames: props.classNames.concat(props.className) + }; + } + function processScopedUiProps(prefix, rawScoped, calendar, leftovers) { + var rawUnscoped = {}; + var wasFound = {}; + for (var key in UNSCOPED_EVENT_UI_PROPS) { + var scopedKey = prefix + capitaliseFirstLetter(key); + rawUnscoped[key] = rawScoped[scopedKey]; + wasFound[scopedKey] = true; + } + if (prefix === 'event') { + rawUnscoped.editable = rawScoped.editable; // special case. there is no 'eventEditable', just 'editable' + } + if (leftovers) { + for (var key in rawScoped) { + if (!wasFound[key]) { + leftovers[key] = rawScoped[key]; + } + } + } + return processUnscopedUiProps(rawUnscoped, calendar); + } + var EMPTY_EVENT_UI = { + startEditable: null, + durationEditable: null, + constraints: [], + overlap: null, + allows: [], + backgroundColor: '', + borderColor: '', + textColor: '', + classNames: [] + }; + // prevent against problems with <2 args! + function combineEventUis(uis) { + return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI); + } + function combineTwoEventUis(item0, item1) { + return { + startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable, + durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable, + constraints: item0.constraints.concat(item1.constraints), + overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap, + allows: item0.allows.concat(item1.allows), + backgroundColor: item1.backgroundColor || item0.backgroundColor, + borderColor: item1.borderColor || item0.borderColor, + textColor: item1.textColor || item0.textColor, + classNames: item0.classNames.concat(item1.classNames) + }; + } + + var NON_DATE_PROPS = { + id: String, + groupId: String, + title: String, + url: String, + rendering: String, + extendedProps: null + }; + var DATE_PROPS = { + start: null, + date: null, + end: null, + allDay: null + }; + var uid = 0; + function parseEvent(raw, sourceId, calendar, allowOpenRange) { + var allDayDefault = computeIsAllDayDefault(sourceId, calendar); + var leftovers0 = {}; + var recurringRes = parseRecurring(raw, // raw, but with single-event stuff stripped out + allDayDefault, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes, leftovers0 // will populate with non-recurring props + ); + if (recurringRes) { + var def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar); + def.recurringDef = { + typeId: recurringRes.typeId, + typeData: recurringRes.typeData, + duration: recurringRes.duration + }; + return { def: def, instance: null }; + } + else { + var leftovers1 = {}; + var singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange); + if (singleRes) { + var def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar); + var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo); + return { def: def, instance: instance }; + } + } + return null; + } + /* + Will NOT populate extendedProps with the leftover properties. + Will NOT populate date-related props. + The EventNonDateInput has been normalized (id => publicId, etc). + */ + function parseEventDef(raw, sourceId, allDay, hasEnd, calendar) { + var leftovers = {}; + var def = pluckNonDateProps(raw, calendar, leftovers); + def.defId = String(uid++); + def.sourceId = sourceId; + def.allDay = allDay; + def.hasEnd = hasEnd; + for (var _i = 0, _a = calendar.pluginSystem.hooks.eventDefParsers; _i < _a.length; _i++) { + var eventDefParser = _a[_i]; + var newLeftovers = {}; + eventDefParser(def, leftovers, newLeftovers); + leftovers = newLeftovers; + } + def.extendedProps = __assign(leftovers, def.extendedProps || {}); + // help out EventApi from having user modify props + Object.freeze(def.ui.classNames); + Object.freeze(def.extendedProps); + return def; + } + function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) { + return { + instanceId: String(uid++), + defId: defId, + range: range, + forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo, + forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo + }; + } + function parseSingle(raw, allDayDefault, calendar, leftovers, allowOpenRange) { + var props = pluckDateProps(raw, leftovers); + var allDay = props.allDay; + var startMeta; + var startMarker = null; + var hasEnd = false; + var endMeta; + var endMarker = null; + startMeta = calendar.dateEnv.createMarkerMeta(props.start); + if (startMeta) { + startMarker = startMeta.marker; + } + else if (!allowOpenRange) { + return null; + } + if (props.end != null) { + endMeta = calendar.dateEnv.createMarkerMeta(props.end); + } + if (allDay == null) { + if (allDayDefault != null) { + allDay = allDayDefault; + } + else { + // fall back to the date props LAST + allDay = (!startMeta || startMeta.isTimeUnspecified) && + (!endMeta || endMeta.isTimeUnspecified); + } + } + if (allDay && startMarker) { + startMarker = startOfDay(startMarker); + } + if (endMeta) { + endMarker = endMeta.marker; + if (allDay) { + endMarker = startOfDay(endMarker); + } + if (startMarker && endMarker <= startMarker) { + endMarker = null; + } + } + if (endMarker) { + hasEnd = true; + } + else if (!allowOpenRange) { + hasEnd = calendar.opt('forceEventDuration') || false; + endMarker = calendar.dateEnv.add(startMarker, allDay ? + calendar.defaultAllDayEventDuration : + calendar.defaultTimedEventDuration); + } + return { + allDay: allDay, + hasEnd: hasEnd, + range: { start: startMarker, end: endMarker }, + forcedStartTzo: startMeta ? startMeta.forcedTzo : null, + forcedEndTzo: endMeta ? endMeta.forcedTzo : null + }; + } + function pluckDateProps(raw, leftovers) { + var props = refineProps(raw, DATE_PROPS, {}, leftovers); + props.start = (props.start !== null) ? props.start : props.date; + delete props.date; + return props; + } + function pluckNonDateProps(raw, calendar, leftovers) { + var preLeftovers = {}; + var props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers); + var ui = processUnscopedUiProps(preLeftovers, calendar, leftovers); + props.publicId = props.id; + delete props.id; + props.ui = ui; + return props; + } + function computeIsAllDayDefault(sourceId, calendar) { + var res = null; + if (sourceId) { + var source = calendar.state.eventSources[sourceId]; + res = source.allDayDefault; + } + if (res == null) { + res = calendar.opt('allDayDefault'); + } + return res; + } + + var DEF_DEFAULTS = { + startTime: '09:00', + endTime: '17:00', + daysOfWeek: [1, 2, 3, 4, 5], + rendering: 'inverse-background', + classNames: 'fc-nonbusiness', + groupId: '_businessHours' // so multiple defs get grouped + }; + /* + TODO: pass around as EventDefHash!!! + */ + function parseBusinessHours(input, calendar) { + return parseEvents(refineInputs(input), '', calendar); + } + function refineInputs(input) { + var rawDefs; + if (input === true) { + rawDefs = [{}]; // will get DEF_DEFAULTS verbatim + } + else if (Array.isArray(input)) { + // if specifying an array, every sub-definition NEEDS a day-of-week + rawDefs = input.filter(function (rawDef) { + return rawDef.daysOfWeek; + }); + } + else if (typeof input === 'object' && input) { // non-null object + rawDefs = [input]; + } + else { // is probably false + rawDefs = []; + } + rawDefs = rawDefs.map(function (rawDef) { + return __assign({}, DEF_DEFAULTS, rawDef); + }); + return rawDefs; + } + + function memoizeRendering(renderFunc, unrenderFunc, dependencies) { + if (dependencies === void 0) { dependencies = []; } + var dependents = []; + var thisContext; + var prevArgs; + function unrender() { + if (prevArgs) { + for (var _i = 0, dependents_1 = dependents; _i < dependents_1.length; _i++) { + var dependent = dependents_1[_i]; + dependent.unrender(); + } + if (unrenderFunc) { + unrenderFunc.apply(thisContext, prevArgs); + } + prevArgs = null; + } + } + function res() { + if (!prevArgs || !isArraysEqual(prevArgs, arguments)) { + unrender(); + thisContext = this; + prevArgs = arguments; + renderFunc.apply(this, arguments); + } + } + res.dependents = dependents; + res.unrender = unrender; + for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) { + var dependency = dependencies_1[_i]; + dependency.dependents.push(res); + } + return res; + } + + var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere + var Splitter = /** @class */ (function () { + function Splitter() { + this.getKeysForEventDefs = memoize(this._getKeysForEventDefs); + this.splitDateSelection = memoize(this._splitDateSpan); + this.splitEventStore = memoize(this._splitEventStore); + this.splitIndividualUi = memoize(this._splitIndividualUi); + this.splitEventDrag = memoize(this._splitInteraction); + this.splitEventResize = memoize(this._splitInteraction); + this.eventUiBuilders = {}; // TODO: typescript protection + } + Splitter.prototype.splitProps = function (props) { + var _this = this; + var keyInfos = this.getKeyInfo(props); + var defKeys = this.getKeysForEventDefs(props.eventStore); + var dateSelections = this.splitDateSelection(props.dateSelection); + var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases* + var eventStores = this.splitEventStore(props.eventStore, defKeys); + var eventDrags = this.splitEventDrag(props.eventDrag); + var eventResizes = this.splitEventResize(props.eventResize); + var splitProps = {}; + this.eventUiBuilders = mapHash(keyInfos, function (info, key) { + return _this.eventUiBuilders[key] || memoize(buildEventUiForKey); + }); + for (var key in keyInfos) { + var keyInfo = keyInfos[key]; + var eventStore = eventStores[key] || EMPTY_EVENT_STORE; + var buildEventUi = this.eventUiBuilders[key]; + splitProps[key] = { + businessHours: keyInfo.businessHours || props.businessHours, + dateSelection: dateSelections[key] || null, + eventStore: eventStore, + eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]), + eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '', + eventDrag: eventDrags[key] || null, + eventResize: eventResizes[key] || null + }; + } + return splitProps; + }; + Splitter.prototype._splitDateSpan = function (dateSpan) { + var dateSpans = {}; + if (dateSpan) { + var keys = this.getKeysForDateSpan(dateSpan); + for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { + var key = keys_1[_i]; + dateSpans[key] = dateSpan; + } + } + return dateSpans; + }; + Splitter.prototype._getKeysForEventDefs = function (eventStore) { + var _this = this; + return mapHash(eventStore.defs, function (eventDef) { + return _this.getKeysForEventDef(eventDef); + }); + }; + Splitter.prototype._splitEventStore = function (eventStore, defKeys) { + var defs = eventStore.defs, instances = eventStore.instances; + var splitStores = {}; + for (var defId in defs) { + for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) { + var key = _a[_i]; + if (!splitStores[key]) { + splitStores[key] = createEmptyEventStore(); + } + splitStores[key].defs[defId] = defs[defId]; + } + } + for (var instanceId in instances) { + var instance = instances[instanceId]; + for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) { + var key = _c[_b]; + if (splitStores[key]) { // must have already been created + splitStores[key].instances[instanceId] = instance; + } + } + } + return splitStores; + }; + Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) { + var splitHashes = {}; + for (var defId in eventUiBases) { + if (defId) { // not the '' key + for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) { + var key = _a[_i]; + if (!splitHashes[key]) { + splitHashes[key] = {}; + } + splitHashes[key][defId] = eventUiBases[defId]; + } + } + } + return splitHashes; + }; + Splitter.prototype._splitInteraction = function (interaction) { + var splitStates = {}; + if (interaction) { + var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar + ); + // can't rely on defKeys because event data is mutated + var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents); + var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId); + var populate = function (key) { + if (!splitStates[key]) { + splitStates[key] = { + affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE, + mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE, + isEvent: interaction.isEvent, + origSeg: interaction.origSeg + }; + } + }; + for (var key in affectedStores_1) { + populate(key); + } + for (var key in mutatedStores_1) { + populate(key); + } + } + return splitStates; + }; + return Splitter; + }()); + function buildEventUiForKey(allUi, eventUiForKey, individualUi) { + var baseParts = []; + if (allUi) { + baseParts.push(allUi); + } + if (eventUiForKey) { + baseParts.push(eventUiForKey); + } + var stuff = { + '': combineEventUis(baseParts) + }; + if (individualUi) { + __assign(stuff, individualUi); + } + return stuff; + } + + // Generates HTML for an anchor to another view into the calendar. + // Will either generate an
tag or a non-clickable tag, depending on enabled settings. + // `gotoOptions` can either be a DateMarker, or an object with the form: + // { date, type, forceOff } + // `type` is a view-type like "day" or "week". default value is "day". + // `attrs` and `innerHtml` are use to generate the rest of the HTML tag. + function buildGotoAnchorHtml(allOptions, dateEnv, gotoOptions, attrs, innerHtml) { + var date; + var type; + var forceOff; + var finalOptions; + if (gotoOptions instanceof Date) { + date = gotoOptions; // a single date-like input + } + else { + date = gotoOptions.date; + type = gotoOptions.type; + forceOff = gotoOptions.forceOff; + } + finalOptions = { + date: dateEnv.formatIso(date, { omitTime: true }), + type: type || 'day' + }; + if (typeof attrs === 'string') { + innerHtml = attrs; + attrs = null; + } + attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space + innerHtml = innerHtml || ''; + if (!forceOff && allOptions.navLinks) { + return '' + + innerHtml + + ''; + } + else { + return '' + + innerHtml + + ''; + } + } + function getAllDayHtml(allOptions) { + return allOptions.allDayHtml || htmlEscape(allOptions.allDayText); + } + // Computes HTML classNames for a single-day element + function getDayClasses(date, dateProfile, context, noThemeHighlight) { + var calendar = context.calendar, options = context.options, theme = context.theme, dateEnv = context.dateEnv; + var classes = []; + var todayStart; + var todayEnd; + if (!rangeContainsMarker(dateProfile.activeRange, date)) { + classes.push('fc-disabled-day'); + } + else { + classes.push('fc-' + DAY_IDS[date.getUTCDay()]); + if (options.monthMode && + dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) { + classes.push('fc-other-month'); + } + todayStart = startOfDay(calendar.getNow()); + todayEnd = addDays(todayStart, 1); + if (date < todayStart) { + classes.push('fc-past'); + } + else if (date >= todayEnd) { + classes.push('fc-future'); + } + else { + classes.push('fc-today'); + if (noThemeHighlight !== true) { + classes.push(theme.getClass('today')); + } + } + } + return classes; + } + + // given a function that resolves a result asynchronously. + // the function can either call passed-in success and failure callbacks, + // or it can return a promise. + // if you need to pass additional params to func, bind them first. + function unpromisify(func, success, failure) { + // guard against success/failure callbacks being called more than once + // and guard against a promise AND callback being used together. + var isResolved = false; + var wrappedSuccess = function () { + if (!isResolved) { + isResolved = true; + success.apply(this, arguments); + } + }; + var wrappedFailure = function () { + if (!isResolved) { + isResolved = true; + if (failure) { + failure.apply(this, arguments); + } + } + }; + var res = func(wrappedSuccess, wrappedFailure); + if (res && typeof res.then === 'function') { + res.then(wrappedSuccess, wrappedFailure); + } + } + + var Mixin = /** @class */ (function () { + function Mixin() { + } + // mix into a CLASS + Mixin.mixInto = function (destClass) { + this.mixIntoObj(destClass.prototype); + }; + // mix into ANY object + Mixin.mixIntoObj = function (destObj) { + var _this = this; + Object.getOwnPropertyNames(this.prototype).forEach(function (name) { + if (!destObj[name]) { // if destination doesn't already define it + destObj[name] = _this.prototype[name]; + } + }); + }; + /* + will override existing methods + TODO: remove! not used anymore + */ + Mixin.mixOver = function (destClass) { + var _this = this; + Object.getOwnPropertyNames(this.prototype).forEach(function (name) { + destClass.prototype[name] = _this.prototype[name]; + }); + }; + return Mixin; + }()); + + /* + USAGE: + import { default as EmitterMixin, EmitterInterface } from './EmitterMixin' + in class: + on: EmitterInterface['on'] + one: EmitterInterface['one'] + off: EmitterInterface['off'] + trigger: EmitterInterface['trigger'] + triggerWith: EmitterInterface['triggerWith'] + hasHandlers: EmitterInterface['hasHandlers'] + after class: + EmitterMixin.mixInto(TheClass) + */ + var EmitterMixin = /** @class */ (function (_super) { + __extends(EmitterMixin, _super); + function EmitterMixin() { + return _super !== null && _super.apply(this, arguments) || this; + } + EmitterMixin.prototype.on = function (type, handler) { + addToHash(this._handlers || (this._handlers = {}), type, handler); + return this; // for chaining + }; + // todo: add comments + EmitterMixin.prototype.one = function (type, handler) { + addToHash(this._oneHandlers || (this._oneHandlers = {}), type, handler); + return this; // for chaining + }; + EmitterMixin.prototype.off = function (type, handler) { + if (this._handlers) { + removeFromHash(this._handlers, type, handler); + } + if (this._oneHandlers) { + removeFromHash(this._oneHandlers, type, handler); + } + return this; // for chaining + }; + EmitterMixin.prototype.trigger = function (type) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + this.triggerWith(type, this, args); + return this; // for chaining + }; + EmitterMixin.prototype.triggerWith = function (type, context, args) { + if (this._handlers) { + applyAll(this._handlers[type], context, args); + } + if (this._oneHandlers) { + applyAll(this._oneHandlers[type], context, args); + delete this._oneHandlers[type]; // will never fire again + } + return this; // for chaining + }; + EmitterMixin.prototype.hasHandlers = function (type) { + return (this._handlers && this._handlers[type] && this._handlers[type].length) || + (this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length); + }; + return EmitterMixin; + }(Mixin)); + function addToHash(hash, type, handler) { + (hash[type] || (hash[type] = [])) + .push(handler); + } + function removeFromHash(hash, type, handler) { + if (handler) { + if (hash[type]) { + hash[type] = hash[type].filter(function (func) { + return func !== handler; + }); + } + } + else { + delete hash[type]; // remove all handler funcs for this type + } + } + + /* + Records offset information for a set of elements, relative to an origin element. + Can record the left/right OR the top/bottom OR both. + Provides methods for querying the cache by position. + */ + var PositionCache = /** @class */ (function () { + function PositionCache(originEl, els, isHorizontal, isVertical) { + this.originEl = originEl; + this.els = els; + this.isHorizontal = isHorizontal; + this.isVertical = isVertical; + } + // Queries the els for coordinates and stores them. + // Call this method before using and of the get* methods below. + PositionCache.prototype.build = function () { + var originEl = this.originEl; + var originClientRect = this.originClientRect = + originEl.getBoundingClientRect(); // relative to viewport top-left + if (this.isHorizontal) { + this.buildElHorizontals(originClientRect.left); + } + if (this.isVertical) { + this.buildElVerticals(originClientRect.top); + } + }; + // Populates the left/right internal coordinate arrays + PositionCache.prototype.buildElHorizontals = function (originClientLeft) { + var lefts = []; + var rights = []; + for (var _i = 0, _a = this.els; _i < _a.length; _i++) { + var el = _a[_i]; + var rect = el.getBoundingClientRect(); + lefts.push(rect.left - originClientLeft); + rights.push(rect.right - originClientLeft); + } + this.lefts = lefts; + this.rights = rights; + }; + // Populates the top/bottom internal coordinate arrays + PositionCache.prototype.buildElVerticals = function (originClientTop) { + var tops = []; + var bottoms = []; + for (var _i = 0, _a = this.els; _i < _a.length; _i++) { + var el = _a[_i]; + var rect = el.getBoundingClientRect(); + tops.push(rect.top - originClientTop); + bottoms.push(rect.bottom - originClientTop); + } + this.tops = tops; + this.bottoms = bottoms; + }; + // Given a left offset (from document left), returns the index of the el that it horizontally intersects. + // If no intersection is made, returns undefined. + PositionCache.prototype.leftToIndex = function (leftPosition) { + var lefts = this.lefts; + var rights = this.rights; + var len = lefts.length; + var i; + for (i = 0; i < len; i++) { + if (leftPosition >= lefts[i] && leftPosition < rights[i]) { + return i; + } + } + }; + // Given a top offset (from document top), returns the index of the el that it vertically intersects. + // If no intersection is made, returns undefined. + PositionCache.prototype.topToIndex = function (topPosition) { + var tops = this.tops; + var bottoms = this.bottoms; + var len = tops.length; + var i; + for (i = 0; i < len; i++) { + if (topPosition >= tops[i] && topPosition < bottoms[i]) { + return i; + } + } + }; + // Gets the width of the element at the given index + PositionCache.prototype.getWidth = function (leftIndex) { + return this.rights[leftIndex] - this.lefts[leftIndex]; + }; + // Gets the height of the element at the given index + PositionCache.prototype.getHeight = function (topIndex) { + return this.bottoms[topIndex] - this.tops[topIndex]; + }; + return PositionCache; + }()); + + /* + An object for getting/setting scroll-related information for an element. + Internally, this is done very differently for window versus DOM element, + so this object serves as a common interface. + */ + var ScrollController = /** @class */ (function () { + function ScrollController() { + } + ScrollController.prototype.getMaxScrollTop = function () { + return this.getScrollHeight() - this.getClientHeight(); + }; + ScrollController.prototype.getMaxScrollLeft = function () { + return this.getScrollWidth() - this.getClientWidth(); + }; + ScrollController.prototype.canScrollVertically = function () { + return this.getMaxScrollTop() > 0; + }; + ScrollController.prototype.canScrollHorizontally = function () { + return this.getMaxScrollLeft() > 0; + }; + ScrollController.prototype.canScrollUp = function () { + return this.getScrollTop() > 0; + }; + ScrollController.prototype.canScrollDown = function () { + return this.getScrollTop() < this.getMaxScrollTop(); + }; + ScrollController.prototype.canScrollLeft = function () { + return this.getScrollLeft() > 0; + }; + ScrollController.prototype.canScrollRight = function () { + return this.getScrollLeft() < this.getMaxScrollLeft(); + }; + return ScrollController; + }()); + var ElementScrollController = /** @class */ (function (_super) { + __extends(ElementScrollController, _super); + function ElementScrollController(el) { + var _this = _super.call(this) || this; + _this.el = el; + return _this; + } + ElementScrollController.prototype.getScrollTop = function () { + return this.el.scrollTop; + }; + ElementScrollController.prototype.getScrollLeft = function () { + return this.el.scrollLeft; + }; + ElementScrollController.prototype.setScrollTop = function (top) { + this.el.scrollTop = top; + }; + ElementScrollController.prototype.setScrollLeft = function (left) { + this.el.scrollLeft = left; + }; + ElementScrollController.prototype.getScrollWidth = function () { + return this.el.scrollWidth; + }; + ElementScrollController.prototype.getScrollHeight = function () { + return this.el.scrollHeight; + }; + ElementScrollController.prototype.getClientHeight = function () { + return this.el.clientHeight; + }; + ElementScrollController.prototype.getClientWidth = function () { + return this.el.clientWidth; + }; + return ElementScrollController; + }(ScrollController)); + var WindowScrollController = /** @class */ (function (_super) { + __extends(WindowScrollController, _super); + function WindowScrollController() { + return _super !== null && _super.apply(this, arguments) || this; + } + WindowScrollController.prototype.getScrollTop = function () { + return window.pageYOffset; + }; + WindowScrollController.prototype.getScrollLeft = function () { + return window.pageXOffset; + }; + WindowScrollController.prototype.setScrollTop = function (n) { + window.scroll(window.pageXOffset, n); + }; + WindowScrollController.prototype.setScrollLeft = function (n) { + window.scroll(n, window.pageYOffset); + }; + WindowScrollController.prototype.getScrollWidth = function () { + return document.documentElement.scrollWidth; + }; + WindowScrollController.prototype.getScrollHeight = function () { + return document.documentElement.scrollHeight; + }; + WindowScrollController.prototype.getClientHeight = function () { + return document.documentElement.clientHeight; + }; + WindowScrollController.prototype.getClientWidth = function () { + return document.documentElement.clientWidth; + }; + return WindowScrollController; + }(ScrollController)); + + /* + Embodies a div that has potential scrollbars + */ + var ScrollComponent = /** @class */ (function (_super) { + __extends(ScrollComponent, _super); + function ScrollComponent(overflowX, overflowY) { + var _this = _super.call(this, createElement('div', { + className: 'fc-scroller' + })) || this; + _this.overflowX = overflowX; + _this.overflowY = overflowY; + _this.applyOverflow(); + return _this; + } + // sets to natural height, unlocks overflow + ScrollComponent.prototype.clear = function () { + this.setHeight('auto'); + this.applyOverflow(); + }; + ScrollComponent.prototype.destroy = function () { + removeElement(this.el); + }; + // Overflow + // ----------------------------------------------------------------------------------------------------------------- + ScrollComponent.prototype.applyOverflow = function () { + applyStyle(this.el, { + overflowX: this.overflowX, + overflowY: this.overflowY + }); + }; + // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'. + // Useful for preserving scrollbar widths regardless of future resizes. + // Can pass in scrollbarWidths for optimization. + ScrollComponent.prototype.lockOverflow = function (scrollbarWidths) { + var overflowX = this.overflowX; + var overflowY = this.overflowY; + scrollbarWidths = scrollbarWidths || this.getScrollbarWidths(); + if (overflowX === 'auto') { + overflowX = (scrollbarWidths.bottom || // horizontal scrollbars? + this.canScrollHorizontally() // OR scrolling pane with massless scrollbars? + ) ? 'scroll' : 'hidden'; + } + if (overflowY === 'auto') { + overflowY = (scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars? + this.canScrollVertically() // OR scrolling pane with massless scrollbars? + ) ? 'scroll' : 'hidden'; + } + applyStyle(this.el, { overflowX: overflowX, overflowY: overflowY }); + }; + ScrollComponent.prototype.setHeight = function (height) { + applyStyleProp(this.el, 'height', height); + }; + ScrollComponent.prototype.getScrollbarWidths = function () { + var edges = computeEdges(this.el); + return { + left: edges.scrollbarLeft, + right: edges.scrollbarRight, + bottom: edges.scrollbarBottom + }; + }; + return ScrollComponent; + }(ElementScrollController)); + + var Theme = /** @class */ (function () { + function Theme(calendarOptions) { + this.calendarOptions = calendarOptions; + this.processIconOverride(); + } + Theme.prototype.processIconOverride = function () { + if (this.iconOverrideOption) { + this.setIconOverride(this.calendarOptions[this.iconOverrideOption]); + } + }; + Theme.prototype.setIconOverride = function (iconOverrideHash) { + var iconClassesCopy; + var buttonName; + if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object + iconClassesCopy = __assign({}, this.iconClasses); + for (buttonName in iconOverrideHash) { + iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]); + } + this.iconClasses = iconClassesCopy; + } + else if (iconOverrideHash === false) { + this.iconClasses = {}; + } + }; + Theme.prototype.applyIconOverridePrefix = function (className) { + var prefix = this.iconOverridePrefix; + if (prefix && className.indexOf(prefix) !== 0) { // if not already present + className = prefix + className; + } + return className; + }; + Theme.prototype.getClass = function (key) { + return this.classes[key] || ''; + }; + Theme.prototype.getIconClass = function (buttonName) { + var className = this.iconClasses[buttonName]; + if (className) { + return this.baseIconClass + ' ' + className; + } + return ''; + }; + Theme.prototype.getCustomButtonIconClass = function (customButtonProps) { + var className; + if (this.iconOverrideCustomButtonOption) { + className = customButtonProps[this.iconOverrideCustomButtonOption]; + if (className) { + return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className); + } + } + return ''; + }; + return Theme; + }()); + Theme.prototype.classes = {}; + Theme.prototype.iconClasses = {}; + Theme.prototype.baseIconClass = ''; + Theme.prototype.iconOverridePrefix = ''; + + var guid = 0; + var ComponentContext = /** @class */ (function () { + function ComponentContext(calendar, theme, dateEnv, options, view) { + this.calendar = calendar; + this.theme = theme; + this.dateEnv = dateEnv; + this.options = options; + this.view = view; + this.isRtl = options.dir === 'rtl'; + this.eventOrderSpecs = parseFieldSpecs(options.eventOrder); + this.nextDayThreshold = createDuration(options.nextDayThreshold); + } + ComponentContext.prototype.extend = function (options, view) { + return new ComponentContext(this.calendar, this.theme, this.dateEnv, options || this.options, view || this.view); + }; + return ComponentContext; + }()); + var Component = /** @class */ (function () { + function Component() { + this.uid = String(guid++); + } + Component.addEqualityFuncs = function (newFuncs) { + this.prototype.equalityFuncs = __assign({}, this.prototype.equalityFuncs, newFuncs); + }; + Component.prototype.receiveProps = function (props, context) { + var oldContext = this.context; + this.context = context; + if (!oldContext) { + this.firstContext(context); + } + var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps; + this.props = comboProps; + if (anyChanges) { + if (oldContext) { + this.beforeUpdate(); + } + this.render(comboProps, context); + if (oldContext) { + this.afterUpdate(); + } + } + }; + Component.prototype.render = function (props, context) { + }; + Component.prototype.firstContext = function (context) { + }; + Component.prototype.beforeUpdate = function () { + }; + Component.prototype.afterUpdate = function () { + }; + // after destroy is called, this component won't ever be used again + Component.prototype.destroy = function () { + }; + return Component; + }()); + Component.prototype.equalityFuncs = {}; + /* + Reuses old values when equal. If anything is unequal, returns newProps as-is. + Great for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing. + */ + function recycleProps(oldProps, newProps, equalityFuncs) { + var comboProps = {}; // some old, some new + var anyChanges = false; + for (var key in newProps) { + if (key in oldProps && (oldProps[key] === newProps[key] || + (equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key])))) { + // equal to old? use old prop + comboProps[key] = oldProps[key]; + } + else { + comboProps[key] = newProps[key]; + anyChanges = true; + } + } + for (var key in oldProps) { + if (!(key in newProps)) { + anyChanges = true; + break; + } + } + return { anyChanges: anyChanges, comboProps: comboProps }; + } + + /* + PURPOSES: + - hook up to fg, fill, and mirror renderers + - interface for dragging and hits + */ + var DateComponent = /** @class */ (function (_super) { + __extends(DateComponent, _super); + function DateComponent(el) { + var _this = _super.call(this) || this; + _this.el = el; + return _this; + } + DateComponent.prototype.destroy = function () { + _super.prototype.destroy.call(this); + removeElement(this.el); + }; + // Hit System + // ----------------------------------------------------------------------------------------------------------------- + DateComponent.prototype.buildPositionCaches = function () { + }; + DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) { + return null; // this should be abstract + }; + // Validation + // ----------------------------------------------------------------------------------------------------------------- + DateComponent.prototype.isInteractionValid = function (interaction) { + var calendar = this.context.calendar; + var dateProfile = this.props.dateProfile; // HACK + var instances = interaction.mutatedEvents.instances; + if (dateProfile) { // HACK for DayTile + for (var instanceId in instances) { + if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) { + return false; + } + } + } + return isInteractionValid(interaction, calendar); + }; + DateComponent.prototype.isDateSelectionValid = function (selection) { + var calendar = this.context.calendar; + var dateProfile = this.props.dateProfile; // HACK + if (dateProfile && // HACK for DayTile + !rangeContainsRange(dateProfile.validRange, selection.range)) { + return false; + } + return isDateSelectionValid(selection, calendar); + }; + // Pointer Interaction Utils + // ----------------------------------------------------------------------------------------------------------------- + DateComponent.prototype.isValidSegDownEl = function (el) { + return !this.props.eventDrag && // HACK + !this.props.eventResize && // HACK + !elementClosest(el, '.fc-mirror') && + (this.isPopover() || !this.isInPopover(el)); + // ^above line ensures we don't detect a seg interaction within a nested component. + // it's a HACK because it only supports a popover as the nested component. + }; + DateComponent.prototype.isValidDateDownEl = function (el) { + var segEl = elementClosest(el, this.fgSegSelector); + return (!segEl || segEl.classList.contains('fc-mirror')) && + !elementClosest(el, '.fc-more') && // a "more.." link + !elementClosest(el, 'a[data-goto]') && // a clickable nav link + !this.isInPopover(el); + }; + DateComponent.prototype.isPopover = function () { + return this.el.classList.contains('fc-popover'); + }; + DateComponent.prototype.isInPopover = function (el) { + return Boolean(elementClosest(el, '.fc-popover')); + }; + return DateComponent; + }(Component)); + DateComponent.prototype.fgSegSelector = '.fc-event-container > *'; + DateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)'; + + var uid$1 = 0; + function createPlugin(input) { + return { + id: String(uid$1++), + deps: input.deps || [], + reducers: input.reducers || [], + eventDefParsers: input.eventDefParsers || [], + isDraggableTransformers: input.isDraggableTransformers || [], + eventDragMutationMassagers: input.eventDragMutationMassagers || [], + eventDefMutationAppliers: input.eventDefMutationAppliers || [], + dateSelectionTransformers: input.dateSelectionTransformers || [], + datePointTransforms: input.datePointTransforms || [], + dateSpanTransforms: input.dateSpanTransforms || [], + views: input.views || {}, + viewPropsTransformers: input.viewPropsTransformers || [], + isPropsValid: input.isPropsValid || null, + externalDefTransforms: input.externalDefTransforms || [], + eventResizeJoinTransforms: input.eventResizeJoinTransforms || [], + viewContainerModifiers: input.viewContainerModifiers || [], + eventDropTransformers: input.eventDropTransformers || [], + componentInteractions: input.componentInteractions || [], + calendarInteractions: input.calendarInteractions || [], + themeClasses: input.themeClasses || {}, + eventSourceDefs: input.eventSourceDefs || [], + cmdFormatter: input.cmdFormatter, + recurringTypes: input.recurringTypes || [], + namedTimeZonedImpl: input.namedTimeZonedImpl, + defaultView: input.defaultView || '', + elementDraggingImpl: input.elementDraggingImpl, + optionChangeHandlers: input.optionChangeHandlers || {} + }; + } + var PluginSystem = /** @class */ (function () { + function PluginSystem() { + this.hooks = { + reducers: [], + eventDefParsers: [], + isDraggableTransformers: [], + eventDragMutationMassagers: [], + eventDefMutationAppliers: [], + dateSelectionTransformers: [], + datePointTransforms: [], + dateSpanTransforms: [], + views: {}, + viewPropsTransformers: [], + isPropsValid: null, + externalDefTransforms: [], + eventResizeJoinTransforms: [], + viewContainerModifiers: [], + eventDropTransformers: [], + componentInteractions: [], + calendarInteractions: [], + themeClasses: {}, + eventSourceDefs: [], + cmdFormatter: null, + recurringTypes: [], + namedTimeZonedImpl: null, + defaultView: '', + elementDraggingImpl: null, + optionChangeHandlers: {} + }; + this.addedHash = {}; + } + PluginSystem.prototype.add = function (plugin) { + if (!this.addedHash[plugin.id]) { + this.addedHash[plugin.id] = true; + for (var _i = 0, _a = plugin.deps; _i < _a.length; _i++) { + var dep = _a[_i]; + this.add(dep); + } + this.hooks = combineHooks(this.hooks, plugin); + } + }; + return PluginSystem; + }()); + function combineHooks(hooks0, hooks1) { + return { + reducers: hooks0.reducers.concat(hooks1.reducers), + eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers), + isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers), + eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers), + eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers), + dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers), + datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms), + dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms), + views: __assign({}, hooks0.views, hooks1.views), + viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers), + isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid, + externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms), + eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms), + viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers), + eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers), + calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions), + componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions), + themeClasses: __assign({}, hooks0.themeClasses, hooks1.themeClasses), + eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs), + cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter, + recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes), + namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl, + defaultView: hooks0.defaultView || hooks1.defaultView, + elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl, + optionChangeHandlers: __assign({}, hooks0.optionChangeHandlers, hooks1.optionChangeHandlers) + }; + } + + var eventSourceDef = { + ignoreRange: true, + parseMeta: function (raw) { + if (Array.isArray(raw)) { // short form + return raw; + } + else if (Array.isArray(raw.events)) { + return raw.events; + } + return null; + }, + fetch: function (arg, success) { + success({ + rawEvents: arg.eventSource.meta + }); + } + }; + var ArrayEventSourcePlugin = createPlugin({ + eventSourceDefs: [eventSourceDef] + }); + + var eventSourceDef$1 = { + parseMeta: function (raw) { + if (typeof raw === 'function') { // short form + return raw; + } + else if (typeof raw.events === 'function') { + return raw.events; + } + return null; + }, + fetch: function (arg, success, failure) { + var dateEnv = arg.calendar.dateEnv; + var func = arg.eventSource.meta; + unpromisify(func.bind(null, { + start: dateEnv.toDate(arg.range.start), + end: dateEnv.toDate(arg.range.end), + startStr: dateEnv.formatIso(arg.range.start), + endStr: dateEnv.formatIso(arg.range.end), + timeZone: dateEnv.timeZone + }), function (rawEvents) { + success({ rawEvents: rawEvents }); // needs an object response + }, failure // send errorObj directly to failure callback + ); + } + }; + var FuncEventSourcePlugin = createPlugin({ + eventSourceDefs: [eventSourceDef$1] + }); + + function requestJson(method, url, params, successCallback, failureCallback) { + method = method.toUpperCase(); + var body = null; + if (method === 'GET') { + url = injectQueryStringParams(url, params); + } + else { + body = encodeParams(params); + } + var xhr = new XMLHttpRequest(); + xhr.open(method, url, true); + if (method !== 'GET') { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + } + xhr.onload = function () { + if (xhr.status >= 200 && xhr.status < 400) { + try { + var res = JSON.parse(xhr.responseText); + successCallback(res, xhr); + } + catch (err) { + failureCallback('Failure parsing JSON', xhr); + } + } + else { + failureCallback('Request failed', xhr); + } + }; + xhr.onerror = function () { + failureCallback('Request failed', xhr); + }; + xhr.send(body); + } + function injectQueryStringParams(url, params) { + return url + + (url.indexOf('?') === -1 ? '?' : '&') + + encodeParams(params); + } + function encodeParams(params) { + var parts = []; + for (var key in params) { + parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key])); + } + return parts.join('&'); + } + + var eventSourceDef$2 = { + parseMeta: function (raw) { + if (typeof raw === 'string') { // short form + raw = { url: raw }; + } + else if (!raw || typeof raw !== 'object' || !raw.url) { + return null; + } + return { + url: raw.url, + method: (raw.method || 'GET').toUpperCase(), + extraParams: raw.extraParams, + startParam: raw.startParam, + endParam: raw.endParam, + timeZoneParam: raw.timeZoneParam + }; + }, + fetch: function (arg, success, failure) { + var meta = arg.eventSource.meta; + var requestParams = buildRequestParams(meta, arg.range, arg.calendar); + requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) { + success({ rawEvents: rawEvents, xhr: xhr }); + }, function (errorMessage, xhr) { + failure({ message: errorMessage, xhr: xhr }); + }); + } + }; + var JsonFeedEventSourcePlugin = createPlugin({ + eventSourceDefs: [eventSourceDef$2] + }); + function buildRequestParams(meta, range, calendar) { + var dateEnv = calendar.dateEnv; + var startParam; + var endParam; + var timeZoneParam; + var customRequestParams; + var params = {}; + startParam = meta.startParam; + if (startParam == null) { + startParam = calendar.opt('startParam'); + } + endParam = meta.endParam; + if (endParam == null) { + endParam = calendar.opt('endParam'); + } + timeZoneParam = meta.timeZoneParam; + if (timeZoneParam == null) { + timeZoneParam = calendar.opt('timeZoneParam'); + } + // retrieve any outbound GET/POST data from the options + if (typeof meta.extraParams === 'function') { + // supplied as a function that returns a key/value object + customRequestParams = meta.extraParams(); + } + else { + // probably supplied as a straight key/value object + customRequestParams = meta.extraParams || {}; + } + __assign(params, customRequestParams); + params[startParam] = dateEnv.formatIso(range.start); + params[endParam] = dateEnv.formatIso(range.end); + if (dateEnv.timeZone !== 'local') { + params[timeZoneParam] = dateEnv.timeZone; + } + return params; + } + + var recurring = { + parse: function (rawEvent, leftoverProps, dateEnv) { + var createMarker = dateEnv.createMarker.bind(dateEnv); + var processors = { + daysOfWeek: null, + startTime: createDuration, + endTime: createDuration, + startRecur: createMarker, + endRecur: createMarker + }; + var props = refineProps(rawEvent, processors, {}, leftoverProps); + var anyValid = false; + for (var propName in props) { + if (props[propName] != null) { + anyValid = true; + break; + } + } + if (anyValid) { + var duration = null; + if ('duration' in leftoverProps) { + duration = createDuration(leftoverProps.duration); + delete leftoverProps.duration; + } + if (!duration && props.startTime && props.endTime) { + duration = subtractDurations(props.endTime, props.startTime); + } + return { + allDayGuess: Boolean(!props.startTime && !props.endTime), + duration: duration, + typeData: props // doesn't need endTime anymore but oh well + }; + } + return null; + }, + expand: function (typeData, framingRange, dateEnv) { + var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur }); + if (clippedFramingRange) { + return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv); + } + else { + return []; + } + } + }; + var SimpleRecurrencePlugin = createPlugin({ + recurringTypes: [recurring] + }); + function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) { + var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null; + var dayMarker = startOfDay(framingRange.start); + var endMarker = framingRange.end; + var instanceStarts = []; + while (dayMarker < endMarker) { + var instanceStart + // if everyday, or this particular day-of-week + = void 0; + // if everyday, or this particular day-of-week + if (!dowHash || dowHash[dayMarker.getUTCDay()]) { + if (startTime) { + instanceStart = dateEnv.add(dayMarker, startTime); + } + else { + instanceStart = dayMarker; + } + instanceStarts.push(instanceStart); + } + dayMarker = addDays(dayMarker, 1); + } + return instanceStarts; + } + + var DefaultOptionChangeHandlers = createPlugin({ + optionChangeHandlers: { + events: function (events, calendar, deepEqual) { + handleEventSources([events], calendar, deepEqual); + }, + eventSources: handleEventSources, + plugins: handlePlugins + } + }); + function handleEventSources(inputs, calendar, deepEqual) { + var unfoundSources = hashValuesToArray(calendar.state.eventSources); + var newInputs = []; + for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) { + var input = inputs_1[_i]; + var inputFound = false; + for (var i = 0; i < unfoundSources.length; i++) { + if (deepEqual(unfoundSources[i]._raw, input)) { + unfoundSources.splice(i, 1); // delete + inputFound = true; + break; + } + } + if (!inputFound) { + newInputs.push(input); + } + } + for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) { + var unfoundSource = unfoundSources_1[_a]; + calendar.dispatch({ + type: 'REMOVE_EVENT_SOURCE', + sourceId: unfoundSource.sourceId + }); + } + for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) { + var newInput = newInputs_1[_b]; + calendar.addEventSource(newInput); + } + } + // shortcoming: won't remove plugins + function handlePlugins(inputs, calendar) { + calendar.addPluginInputs(inputs); // will gracefully handle duplicates + } + + var config = {}; // TODO: make these options + var globalDefaults = { + defaultRangeSeparator: ' - ', + titleRangeSeparator: ' \u2013 ', + defaultTimedEventDuration: '01:00:00', + defaultAllDayEventDuration: { day: 1 }, + forceEventDuration: false, + nextDayThreshold: '00:00:00', + // display + columnHeader: true, + defaultView: '', + aspectRatio: 1.35, + header: { + left: 'title', + center: '', + right: 'today prev,next' + }, + weekends: true, + weekNumbers: false, + weekNumberCalculation: 'local', + editable: false, + // nowIndicator: false, + scrollTime: '06:00:00', + minTime: '00:00:00', + maxTime: '24:00:00', + showNonCurrentDates: true, + // event ajax + lazyFetching: true, + startParam: 'start', + endParam: 'end', + timeZoneParam: 'timeZone', + timeZone: 'local', + // allDayDefault: undefined, + // locale + locales: [], + locale: '', + // dir: will get this from the default locale + // buttonIcons: null, + // allows setting a min-height to the event segment to prevent short events overlapping each other + timeGridEventMinHeight: 0, + themeSystem: 'standard', + // eventResizableFromStart: false, + dragRevertDuration: 500, + dragScroll: true, + allDayMaintainDuration: false, + // selectable: false, + unselectAuto: true, + // selectMinDistance: 0, + dropAccept: '*', + eventOrder: 'start,-duration,allDay,title', + // ^ if start tie, longer events go before shorter. final tie-breaker is title text + // rerenderDelay: null, + eventLimit: false, + eventLimitClick: 'popover', + dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' }, + handleWindowResize: true, + windowResizeDelay: 100, + longPressDelay: 1000, + eventDragMinDistance: 5 // only applies to mouse + }; + var rtlDefaults = { + header: { + left: 'next,prev today', + center: '', + right: 'title' + }, + buttonIcons: { + // TODO: make RTL support the responibility of the theme + prev: 'fc-icon-chevron-right', + next: 'fc-icon-chevron-left', + prevYear: 'fc-icon-chevrons-right', + nextYear: 'fc-icon-chevrons-left' + } + }; + var complexOptions = [ + 'header', + 'footer', + 'buttonText', + 'buttonIcons' + ]; + // Merges an array of option objects into a single object + function mergeOptions(optionObjs) { + return mergeProps(optionObjs, complexOptions); + } + // TODO: move this stuff to a "plugin"-related file... + var INTERNAL_PLUGINS = [ + ArrayEventSourcePlugin, + FuncEventSourcePlugin, + JsonFeedEventSourcePlugin, + SimpleRecurrencePlugin, + DefaultOptionChangeHandlers + ]; + function refinePluginDefs(pluginInputs) { + var plugins = []; + for (var _i = 0, pluginInputs_1 = pluginInputs; _i < pluginInputs_1.length; _i++) { + var pluginInput = pluginInputs_1[_i]; + if (typeof pluginInput === 'string') { + var globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput); + if (!window[globalName]) { + console.warn('Plugin file not loaded for ' + pluginInput); + } + else { + plugins.push(window[globalName].default); // is an ES6 module + } + } + else { + plugins.push(pluginInput); + } + } + return INTERNAL_PLUGINS.concat(plugins); + } + + var RAW_EN_LOCALE = { + code: 'en', + week: { + dow: 0, + doy: 4 // 4 days need to be within the year to be considered the first week + }, + dir: 'ltr', + buttonText: { + prev: 'prev', + next: 'next', + prevYear: 'prev year', + nextYear: 'next year', + year: 'year', + today: 'today', + month: 'month', + week: 'week', + day: 'day', + list: 'list' + }, + weekLabel: 'W', + allDayText: 'all-day', + eventLimitText: 'more', + noEventsMessage: 'No events to display' + }; + function parseRawLocales(explicitRawLocales) { + var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en'; + var globalArray = window['FullCalendarLocalesAll'] || []; // from locales-all.js + var globalObject = window['FullCalendarLocales'] || {}; // from locales/*.js. keys are meaningless + var allRawLocales = globalArray.concat(// globalArray is low prio + hashValuesToArray(globalObject), // medium prio + explicitRawLocales // highest prio + ); + var rawLocaleMap = { + en: RAW_EN_LOCALE // necessary? + }; + for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) { + var rawLocale = allRawLocales_1[_i]; + rawLocaleMap[rawLocale.code] = rawLocale; + } + return { + map: rawLocaleMap, + defaultCode: defaultCode + }; + } + function buildLocale(inputSingular, available) { + if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) { + return parseLocale(inputSingular.code, [inputSingular.code], inputSingular); + } + else { + return queryLocale(inputSingular, available); + } + } + function queryLocale(codeArg, available) { + var codes = [].concat(codeArg || []); // will convert to array + var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE; + return parseLocale(codeArg, codes, raw); + } + function queryRawLocale(codes, available) { + for (var i = 0; i < codes.length; i++) { + var parts = codes[i].toLocaleLowerCase().split('-'); + for (var j = parts.length; j > 0; j--) { + var simpleId = parts.slice(0, j).join('-'); + if (available[simpleId]) { + return available[simpleId]; + } + } + } + return null; + } + function parseLocale(codeArg, codes, raw) { + var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']); + delete merged.code; // don't want this part of the options + var week = merged.week; + delete merged.week; + return { + codeArg: codeArg, + codes: codes, + week: week, + simpleNumberFormat: new Intl.NumberFormat(codeArg), + options: merged + }; + } + + var OptionsManager = /** @class */ (function () { + function OptionsManager(overrides) { + this.overrides = __assign({}, overrides); // make a copy + this.dynamicOverrides = {}; + this.compute(); + } + OptionsManager.prototype.mutate = function (updates, removals, isDynamic) { + if (!Object.keys(updates).length && !removals.length) { + return; + } + var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides; + __assign(overrideHash, updates); + for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) { + var propName = removals_1[_i]; + delete overrideHash[propName]; + } + this.compute(); + }; + // Computes the flattened options hash for the calendar and assigns to `this.options`. + // Assumes this.overrides and this.dynamicOverrides have already been initialized. + OptionsManager.prototype.compute = function () { + // TODO: not a very efficient system + var locales = firstDefined(// explicit locale option given? + this.dynamicOverrides.locales, this.overrides.locales, globalDefaults.locales); + var locale = firstDefined(// explicit locales option given? + this.dynamicOverrides.locale, this.overrides.locale, globalDefaults.locale); + var available = parseRawLocales(locales); + var localeDefaults = buildLocale(locale || available.defaultCode, available.map).options; + var dir = firstDefined(// based on options computed so far, is direction RTL? + this.dynamicOverrides.dir, this.overrides.dir, localeDefaults.dir); + var dirDefaults = dir === 'rtl' ? rtlDefaults : {}; + this.dirDefaults = dirDefaults; + this.localeDefaults = localeDefaults; + this.computed = mergeOptions([ + globalDefaults, + dirDefaults, + localeDefaults, + this.overrides, + this.dynamicOverrides + ]); + }; + return OptionsManager; + }()); + + var calendarSystemClassMap = {}; + function registerCalendarSystem(name, theClass) { + calendarSystemClassMap[name] = theClass; + } + function createCalendarSystem(name) { + return new calendarSystemClassMap[name](); + } + var GregorianCalendarSystem = /** @class */ (function () { + function GregorianCalendarSystem() { + } + GregorianCalendarSystem.prototype.getMarkerYear = function (d) { + return d.getUTCFullYear(); + }; + GregorianCalendarSystem.prototype.getMarkerMonth = function (d) { + return d.getUTCMonth(); + }; + GregorianCalendarSystem.prototype.getMarkerDay = function (d) { + return d.getUTCDate(); + }; + GregorianCalendarSystem.prototype.arrayToMarker = function (arr) { + return arrayToUtcDate(arr); + }; + GregorianCalendarSystem.prototype.markerToArray = function (marker) { + return dateToUtcArray(marker); + }; + return GregorianCalendarSystem; + }()); + registerCalendarSystem('gregory', GregorianCalendarSystem); + + var ISO_RE = /^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/; + function parse(str) { + var m = ISO_RE.exec(str); + if (m) { + var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0)); + if (isValidDate(marker)) { + var timeZoneOffset = null; + if (m[13]) { + timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 + + Number(m[18] || 0)); + } + return { + marker: marker, + isTimeUnspecified: !m[6], + timeZoneOffset: timeZoneOffset + }; + } + } + return null; + } + + var DateEnv = /** @class */ (function () { + function DateEnv(settings) { + var timeZone = this.timeZone = settings.timeZone; + var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC'; + if (settings.namedTimeZoneImpl && isNamedTimeZone) { + this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone); + } + this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl); + this.calendarSystem = createCalendarSystem(settings.calendarSystem); + this.locale = settings.locale; + this.weekDow = settings.locale.week.dow; + this.weekDoy = settings.locale.week.doy; + if (settings.weekNumberCalculation === 'ISO') { + this.weekDow = 1; + this.weekDoy = 4; + } + if (typeof settings.firstDay === 'number') { + this.weekDow = settings.firstDay; + } + if (typeof settings.weekNumberCalculation === 'function') { + this.weekNumberFunc = settings.weekNumberCalculation; + } + this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel; + this.cmdFormatter = settings.cmdFormatter; + } + // Creating / Parsing + DateEnv.prototype.createMarker = function (input) { + var meta = this.createMarkerMeta(input); + if (meta === null) { + return null; + } + return meta.marker; + }; + DateEnv.prototype.createNowMarker = function () { + if (this.canComputeOffset) { + return this.timestampToMarker(new Date().valueOf()); + } + else { + // if we can't compute the current date val for a timezone, + // better to give the current local date vals than UTC + return arrayToUtcDate(dateToLocalArray(new Date())); + } + }; + DateEnv.prototype.createMarkerMeta = function (input) { + if (typeof input === 'string') { + return this.parse(input); + } + var marker = null; + if (typeof input === 'number') { + marker = this.timestampToMarker(input); + } + else if (input instanceof Date) { + input = input.valueOf(); + if (!isNaN(input)) { + marker = this.timestampToMarker(input); + } + } + else if (Array.isArray(input)) { + marker = arrayToUtcDate(input); + } + if (marker === null || !isValidDate(marker)) { + return null; + } + return { marker: marker, isTimeUnspecified: false, forcedTzo: null }; + }; + DateEnv.prototype.parse = function (s) { + var parts = parse(s); + if (parts === null) { + return null; + } + var marker = parts.marker; + var forcedTzo = null; + if (parts.timeZoneOffset !== null) { + if (this.canComputeOffset) { + marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000); + } + else { + forcedTzo = parts.timeZoneOffset; + } + } + return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo }; + }; + // Accessors + DateEnv.prototype.getYear = function (marker) { + return this.calendarSystem.getMarkerYear(marker); + }; + DateEnv.prototype.getMonth = function (marker) { + return this.calendarSystem.getMarkerMonth(marker); + }; + // Adding / Subtracting + DateEnv.prototype.add = function (marker, dur) { + var a = this.calendarSystem.markerToArray(marker); + a[0] += dur.years; + a[1] += dur.months; + a[2] += dur.days; + a[6] += dur.milliseconds; + return this.calendarSystem.arrayToMarker(a); + }; + DateEnv.prototype.subtract = function (marker, dur) { + var a = this.calendarSystem.markerToArray(marker); + a[0] -= dur.years; + a[1] -= dur.months; + a[2] -= dur.days; + a[6] -= dur.milliseconds; + return this.calendarSystem.arrayToMarker(a); + }; + DateEnv.prototype.addYears = function (marker, n) { + var a = this.calendarSystem.markerToArray(marker); + a[0] += n; + return this.calendarSystem.arrayToMarker(a); + }; + DateEnv.prototype.addMonths = function (marker, n) { + var a = this.calendarSystem.markerToArray(marker); + a[1] += n; + return this.calendarSystem.arrayToMarker(a); + }; + // Diffing Whole Units + DateEnv.prototype.diffWholeYears = function (m0, m1) { + var calendarSystem = this.calendarSystem; + if (timeAsMs(m0) === timeAsMs(m1) && + calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) && + calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) { + return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0); + } + return null; + }; + DateEnv.prototype.diffWholeMonths = function (m0, m1) { + var calendarSystem = this.calendarSystem; + if (timeAsMs(m0) === timeAsMs(m1) && + calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) { + return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) + + (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12; + } + return null; + }; + // Range / Duration + DateEnv.prototype.greatestWholeUnit = function (m0, m1) { + var n = this.diffWholeYears(m0, m1); + if (n !== null) { + return { unit: 'year', value: n }; + } + n = this.diffWholeMonths(m0, m1); + if (n !== null) { + return { unit: 'month', value: n }; + } + n = diffWholeWeeks(m0, m1); + if (n !== null) { + return { unit: 'week', value: n }; + } + n = diffWholeDays(m0, m1); + if (n !== null) { + return { unit: 'day', value: n }; + } + n = diffHours(m0, m1); + if (isInt(n)) { + return { unit: 'hour', value: n }; + } + n = diffMinutes(m0, m1); + if (isInt(n)) { + return { unit: 'minute', value: n }; + } + n = diffSeconds(m0, m1); + if (isInt(n)) { + return { unit: 'second', value: n }; + } + return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() }; + }; + DateEnv.prototype.countDurationsBetween = function (m0, m1, d) { + // TODO: can use greatestWholeUnit + var diff; + if (d.years) { + diff = this.diffWholeYears(m0, m1); + if (diff !== null) { + return diff / asRoughYears(d); + } + } + if (d.months) { + diff = this.diffWholeMonths(m0, m1); + if (diff !== null) { + return diff / asRoughMonths(d); + } + } + if (d.days) { + diff = diffWholeDays(m0, m1); + if (diff !== null) { + return diff / asRoughDays(d); + } + } + return (m1.valueOf() - m0.valueOf()) / asRoughMs(d); + }; + // Start-Of + DateEnv.prototype.startOf = function (m, unit) { + if (unit === 'year') { + return this.startOfYear(m); + } + else if (unit === 'month') { + return this.startOfMonth(m); + } + else if (unit === 'week') { + return this.startOfWeek(m); + } + else if (unit === 'day') { + return startOfDay(m); + } + else if (unit === 'hour') { + return startOfHour(m); + } + else if (unit === 'minute') { + return startOfMinute(m); + } + else if (unit === 'second') { + return startOfSecond(m); + } + }; + DateEnv.prototype.startOfYear = function (m) { + return this.calendarSystem.arrayToMarker([ + this.calendarSystem.getMarkerYear(m) + ]); + }; + DateEnv.prototype.startOfMonth = function (m) { + return this.calendarSystem.arrayToMarker([ + this.calendarSystem.getMarkerYear(m), + this.calendarSystem.getMarkerMonth(m) + ]); + }; + DateEnv.prototype.startOfWeek = function (m) { + return this.calendarSystem.arrayToMarker([ + this.calendarSystem.getMarkerYear(m), + this.calendarSystem.getMarkerMonth(m), + m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7) + ]); + }; + // Week Number + DateEnv.prototype.computeWeekNumber = function (marker) { + if (this.weekNumberFunc) { + return this.weekNumberFunc(this.toDate(marker)); + } + else { + return weekOfYear(marker, this.weekDow, this.weekDoy); + } + }; + // TODO: choke on timeZoneName: long + DateEnv.prototype.format = function (marker, formatter, dateOptions) { + if (dateOptions === void 0) { dateOptions = {}; } + return formatter.format({ + marker: marker, + timeZoneOffset: dateOptions.forcedTzo != null ? + dateOptions.forcedTzo : + this.offsetForMarker(marker) + }, this); + }; + DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) { + if (dateOptions === void 0) { dateOptions = {}; } + if (dateOptions.isEndExclusive) { + end = addMs(end, -1); + } + return formatter.formatRange({ + marker: start, + timeZoneOffset: dateOptions.forcedStartTzo != null ? + dateOptions.forcedStartTzo : + this.offsetForMarker(start) + }, { + marker: end, + timeZoneOffset: dateOptions.forcedEndTzo != null ? + dateOptions.forcedEndTzo : + this.offsetForMarker(end) + }, this); + }; + DateEnv.prototype.formatIso = function (marker, extraOptions) { + if (extraOptions === void 0) { extraOptions = {}; } + var timeZoneOffset = null; + if (!extraOptions.omitTimeZoneOffset) { + if (extraOptions.forcedTzo != null) { + timeZoneOffset = extraOptions.forcedTzo; + } + else { + timeZoneOffset = this.offsetForMarker(marker); + } + } + return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime); + }; + // TimeZone + DateEnv.prototype.timestampToMarker = function (ms) { + if (this.timeZone === 'local') { + return arrayToUtcDate(dateToLocalArray(new Date(ms))); + } + else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) { + return new Date(ms); + } + else { + return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms)); + } + }; + DateEnv.prototype.offsetForMarker = function (m) { + if (this.timeZone === 'local') { + return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset + } + else if (this.timeZone === 'UTC') { + return 0; + } + else if (this.namedTimeZoneImpl) { + return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)); + } + return null; + }; + // Conversion + DateEnv.prototype.toDate = function (m, forcedTzo) { + if (this.timeZone === 'local') { + return arrayToLocalDate(dateToUtcArray(m)); + } + else if (this.timeZone === 'UTC') { + return new Date(m.valueOf()); // make sure it's a copy + } + else if (!this.namedTimeZoneImpl) { + return new Date(m.valueOf() - (forcedTzo || 0)); + } + else { + return new Date(m.valueOf() - + this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms + ); + } + }; + return DateEnv; + }()); + + var SIMPLE_SOURCE_PROPS = { + id: String, + allDayDefault: Boolean, + eventDataTransform: Function, + success: Function, + failure: Function + }; + var uid$2 = 0; + function doesSourceNeedRange(eventSource, calendar) { + var defs = calendar.pluginSystem.hooks.eventSourceDefs; + return !defs[eventSource.sourceDefId].ignoreRange; + } + function parseEventSource(raw, calendar) { + var defs = calendar.pluginSystem.hooks.eventSourceDefs; + for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence + var def = defs[i]; + var meta = def.parseMeta(raw); + if (meta) { + var res = parseEventSourceProps(typeof raw === 'object' ? raw : {}, meta, i, calendar); + res._raw = raw; + return res; + } + } + return null; + } + function parseEventSourceProps(raw, meta, sourceDefId, calendar) { + var leftovers0 = {}; + var props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0); + var leftovers1 = {}; + var ui = processUnscopedUiProps(leftovers0, calendar, leftovers1); + props.isFetching = false; + props.latestFetchId = ''; + props.fetchRange = null; + props.publicId = String(raw.id || ''); + props.sourceId = String(uid$2++); + props.sourceDefId = sourceDefId; + props.meta = meta; + props.ui = ui; + props.extendedProps = leftovers1; + return props; + } + + function reduceEventSources (eventSources, action, dateProfile, calendar) { + switch (action.type) { + case 'ADD_EVENT_SOURCES': // already parsed + return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar); + case 'REMOVE_EVENT_SOURCE': + return removeSource(eventSources, action.sourceId); + case 'PREV': // TODO: how do we track all actions that affect dateProfile :( + case 'NEXT': + case 'SET_DATE': + case 'SET_VIEW_TYPE': + if (dateProfile) { + return fetchDirtySources(eventSources, dateProfile.activeRange, calendar); + } + else { + return eventSources; + } + case 'FETCH_EVENT_SOURCES': + case 'CHANGE_TIMEZONE': + return fetchSourcesByIds(eventSources, action.sourceIds ? + arrayToHash(action.sourceIds) : + excludeStaticSources(eventSources, calendar), dateProfile ? dateProfile.activeRange : null, calendar); + case 'RECEIVE_EVENTS': + case 'RECEIVE_EVENT_ERROR': + return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange); + case 'REMOVE_ALL_EVENT_SOURCES': + return {}; + default: + return eventSources; + } + } + var uid$3 = 0; + function addSources(eventSourceHash, sources, fetchRange, calendar) { + var hash = {}; + for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) { + var source = sources_1[_i]; + hash[source.sourceId] = source; + } + if (fetchRange) { + hash = fetchDirtySources(hash, fetchRange, calendar); + } + return __assign({}, eventSourceHash, hash); + } + function removeSource(eventSourceHash, sourceId) { + return filterHash(eventSourceHash, function (eventSource) { + return eventSource.sourceId !== sourceId; + }); + } + function fetchDirtySources(sourceHash, fetchRange, calendar) { + return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { + return isSourceDirty(eventSource, fetchRange, calendar); + }), fetchRange, calendar); + } + function isSourceDirty(eventSource, fetchRange, calendar) { + if (!doesSourceNeedRange(eventSource, calendar)) { + return !eventSource.latestFetchId; + } + else { + return !calendar.opt('lazyFetching') || + !eventSource.fetchRange || + eventSource.isFetching || // always cancel outdated in-progress fetches + fetchRange.start < eventSource.fetchRange.start || + fetchRange.end > eventSource.fetchRange.end; + } + } + function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, calendar) { + var nextSources = {}; + for (var sourceId in prevSources) { + var source = prevSources[sourceId]; + if (sourceIdHash[sourceId]) { + nextSources[sourceId] = fetchSource(source, fetchRange, calendar); + } + else { + nextSources[sourceId] = source; + } + } + return nextSources; + } + function fetchSource(eventSource, fetchRange, calendar) { + var sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId]; + var fetchId = String(uid$3++); + sourceDef.fetch({ + eventSource: eventSource, + calendar: calendar, + range: fetchRange + }, function (res) { + var rawEvents = res.rawEvents; + var calSuccess = calendar.opt('eventSourceSuccess'); + var calSuccessRes; + var sourceSuccessRes; + if (eventSource.success) { + sourceSuccessRes = eventSource.success(rawEvents, res.xhr); + } + if (calSuccess) { + calSuccessRes = calSuccess(rawEvents, res.xhr); + } + rawEvents = sourceSuccessRes || calSuccessRes || rawEvents; + calendar.dispatch({ + type: 'RECEIVE_EVENTS', + sourceId: eventSource.sourceId, + fetchId: fetchId, + fetchRange: fetchRange, + rawEvents: rawEvents + }); + }, function (error) { + var callFailure = calendar.opt('eventSourceFailure'); + console.warn(error.message, error); + if (eventSource.failure) { + eventSource.failure(error); + } + if (callFailure) { + callFailure(error); + } + calendar.dispatch({ + type: 'RECEIVE_EVENT_ERROR', + sourceId: eventSource.sourceId, + fetchId: fetchId, + fetchRange: fetchRange, + error: error + }); + }); + return __assign({}, eventSource, { isFetching: true, latestFetchId: fetchId }); + } + function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) { + var _a; + var eventSource = sourceHash[sourceId]; + if (eventSource && // not already removed + fetchId === eventSource.latestFetchId) { + return __assign({}, sourceHash, (_a = {}, _a[sourceId] = __assign({}, eventSource, { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed + }), _a)); + } + return sourceHash; + } + function excludeStaticSources(eventSources, calendar) { + return filterHash(eventSources, function (eventSource) { + return doesSourceNeedRange(eventSource, calendar); + }); + } + + var DateProfileGenerator = /** @class */ (function () { + function DateProfileGenerator(viewSpec, calendar) { + this.viewSpec = viewSpec; + this.options = viewSpec.options; + this.dateEnv = calendar.dateEnv; + this.calendar = calendar; + this.initHiddenDays(); + } + /* Date Range Computation + ------------------------------------------------------------------------------------------------------------------*/ + // Builds a structure with info about what the dates/ranges will be for the "prev" view. + DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate) { + var dateEnv = this.dateEnv; + var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month + currentDateProfile.dateIncrement); + return this.build(prevDate, -1); + }; + // Builds a structure with info about what the dates/ranges will be for the "next" view. + DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate) { + var dateEnv = this.dateEnv; + var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month + currentDateProfile.dateIncrement); + return this.build(nextDate, 1); + }; + // Builds a structure holding dates/ranges for rendering around the given date. + // Optional direction param indicates whether the date is being incremented/decremented + // from its previous value. decremented = -1, incremented = 1 (default). + DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) { + if (forceToValid === void 0) { forceToValid = false; } + var validRange; + var minTime = null; + var maxTime = null; + var currentInfo; + var isRangeAllDay; + var renderRange; + var activeRange; + var isValid; + validRange = this.buildValidRange(); + validRange = this.trimHiddenDays(validRange); + if (forceToValid) { + currentDate = constrainMarkerToRange(currentDate, validRange); + } + currentInfo = this.buildCurrentRangeInfo(currentDate, direction); + isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit); + renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay); + renderRange = this.trimHiddenDays(renderRange); + activeRange = renderRange; + if (!this.options.showNonCurrentDates) { + activeRange = intersectRanges(activeRange, currentInfo.range); + } + minTime = createDuration(this.options.minTime); + maxTime = createDuration(this.options.maxTime); + activeRange = this.adjustActiveRange(activeRange, minTime, maxTime); + activeRange = intersectRanges(activeRange, validRange); // might return null + // it's invalid if the originally requested date is not contained, + // or if the range is completely outside of the valid range. + isValid = rangesIntersect(currentInfo.range, validRange); + return { + // constraint for where prev/next operations can go and where events can be dragged/resized to. + // an object with optional start and end properties. + validRange: validRange, + // range the view is formally responsible for. + // for example, a month view might have 1st-31st, excluding padded dates + currentRange: currentInfo.range, + // name of largest unit being displayed, like "month" or "week" + currentRangeUnit: currentInfo.unit, + isRangeAllDay: isRangeAllDay, + // dates that display events and accept drag-n-drop + // will be `null` if no dates accept events + activeRange: activeRange, + // date range with a rendered skeleton + // includes not-active days that need some sort of DOM + renderRange: renderRange, + // Duration object that denotes the first visible time of any given day + minTime: minTime, + // Duration object that denotes the exclusive visible end time of any given day + maxTime: maxTime, + isValid: isValid, + // how far the current date will move for a prev/next operation + dateIncrement: this.buildDateIncrement(currentInfo.duration) + // pass a fallback (might be null) ^ + }; + }; + // Builds an object with optional start/end properties. + // Indicates the minimum/maximum dates to display. + // not responsible for trimming hidden days. + DateProfileGenerator.prototype.buildValidRange = function () { + return this.getRangeOption('validRange', this.calendar.getNow()) || + { start: null, end: null }; // completely open-ended + }; + // Builds a structure with info about the "current" range, the range that is + // highlighted as being the current month for example. + // See build() for a description of `direction`. + // Guaranteed to have `range` and `unit` properties. `duration` is optional. + DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) { + var _a = this, viewSpec = _a.viewSpec, dateEnv = _a.dateEnv; + var duration = null; + var unit = null; + var range = null; + var dayCount; + if (viewSpec.duration) { + duration = viewSpec.duration; + unit = viewSpec.durationUnit; + range = this.buildRangeFromDuration(date, direction, duration, unit); + } + else if ((dayCount = this.options.dayCount)) { + unit = 'day'; + range = this.buildRangeFromDayCount(date, direction, dayCount); + } + else if ((range = this.buildCustomVisibleRange(date))) { + unit = dateEnv.greatestWholeUnit(range.start, range.end).unit; + } + else { + duration = this.getFallbackDuration(); + unit = greatestDurationDenominator(duration).unit; + range = this.buildRangeFromDuration(date, direction, duration, unit); + } + return { duration: duration, unit: unit, range: range }; + }; + DateProfileGenerator.prototype.getFallbackDuration = function () { + return createDuration({ day: 1 }); + }; + // Returns a new activeRange to have time values (un-ambiguate) + // minTime or maxTime causes the range to expand. + DateProfileGenerator.prototype.adjustActiveRange = function (range, minTime, maxTime) { + var dateEnv = this.dateEnv; + var start = range.start; + var end = range.end; + if (this.viewSpec.class.prototype.usesMinMaxTime) { + // expand active range if minTime is negative (why not when positive?) + if (asRoughDays(minTime) < 0) { + start = startOfDay(start); // necessary? + start = dateEnv.add(start, minTime); + } + // expand active range if maxTime is beyond one day (why not when positive?) + if (asRoughDays(maxTime) > 1) { + end = startOfDay(end); // necessary? + end = addDays(end, -1); + end = dateEnv.add(end, maxTime); + } + } + return { start: start, end: end }; + }; + // Builds the "current" range when it is specified as an explicit duration. + // `unit` is the already-computed greatestDurationDenominator unit of duration. + DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) { + var dateEnv = this.dateEnv; + var alignment = this.options.dateAlignment; + var dateIncrementInput; + var dateIncrementDuration; + var start; + var end; + var res; + // compute what the alignment should be + if (!alignment) { + dateIncrementInput = this.options.dateIncrement; + if (dateIncrementInput) { + dateIncrementDuration = createDuration(dateIncrementInput); + // use the smaller of the two units + if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) { + alignment = greatestDurationDenominator(dateIncrementDuration, !getWeeksFromInput(dateIncrementInput)).unit; + } + else { + alignment = unit; + } + } + else { + alignment = unit; + } + } + // if the view displays a single day or smaller + if (asRoughDays(duration) <= 1) { + if (this.isHiddenDay(start)) { + start = this.skipHiddenDays(start, direction); + start = startOfDay(start); + } + } + function computeRes() { + start = dateEnv.startOf(date, alignment); + end = dateEnv.add(start, duration); + res = { start: start, end: end }; + } + computeRes(); + // if range is completely enveloped by hidden days, go past the hidden days + if (!this.trimHiddenDays(res)) { + date = this.skipHiddenDays(date, direction); + computeRes(); + } + return res; + }; + // Builds the "current" range when a dayCount is specified. + DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) { + var dateEnv = this.dateEnv; + var customAlignment = this.options.dateAlignment; + var runningCount = 0; + var start = date; + var end; + if (customAlignment) { + start = dateEnv.startOf(start, customAlignment); + } + start = startOfDay(start); + start = this.skipHiddenDays(start, direction); + end = start; + do { + end = addDays(end, 1); + if (!this.isHiddenDay(end)) { + runningCount++; + } + } while (runningCount < dayCount); + return { start: start, end: end }; + }; + // Builds a normalized range object for the "visible" range, + // which is a way to define the currentRange and activeRange at the same time. + DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) { + var dateEnv = this.dateEnv; + var visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date)); + if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) { + return null; + } + return visibleRange; + }; + // Computes the range that will represent the element/cells for *rendering*, + // but which may have voided days/times. + // not responsible for trimming hidden days. + DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) { + return currentRange; + }; + // Compute the duration value that should be added/substracted to the current date + // when a prev/next operation happens. + DateProfileGenerator.prototype.buildDateIncrement = function (fallback) { + var dateIncrementInput = this.options.dateIncrement; + var customAlignment; + if (dateIncrementInput) { + return createDuration(dateIncrementInput); + } + else if ((customAlignment = this.options.dateAlignment)) { + return createDuration(1, customAlignment); + } + else if (fallback) { + return fallback; + } + else { + return createDuration({ days: 1 }); + } + }; + // Arguments after name will be forwarded to a hypothetical function value + // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects. + // Always clone your objects if you fear mutation. + DateProfileGenerator.prototype.getRangeOption = function (name) { + var otherArgs = []; + for (var _i = 1; _i < arguments.length; _i++) { + otherArgs[_i - 1] = arguments[_i]; + } + var val = this.options[name]; + if (typeof val === 'function') { + val = val.apply(null, otherArgs); + } + if (val) { + val = parseRange(val, this.dateEnv); + } + if (val) { + val = computeVisibleDayRange(val); + } + return val; + }; + /* Hidden Days + ------------------------------------------------------------------------------------------------------------------*/ + // Initializes internal variables related to calculating hidden days-of-week + DateProfileGenerator.prototype.initHiddenDays = function () { + var hiddenDays = this.options.hiddenDays || []; // array of day-of-week indices that are hidden + var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool) + var dayCnt = 0; + var i; + if (this.options.weekends === false) { + hiddenDays.push(0, 6); // 0=sunday, 6=saturday + } + for (i = 0; i < 7; i++) { + if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) { + dayCnt++; + } + } + if (!dayCnt) { + throw new Error('invalid hiddenDays'); // all days were hidden? bad. + } + this.isHiddenDayHash = isHiddenDayHash; + }; + // Remove days from the beginning and end of the range that are computed as hidden. + // If the whole range is trimmed off, returns null + DateProfileGenerator.prototype.trimHiddenDays = function (range) { + var start = range.start; + var end = range.end; + if (start) { + start = this.skipHiddenDays(start); + } + if (end) { + end = this.skipHiddenDays(end, -1, true); + } + if (start == null || end == null || start < end) { + return { start: start, end: end }; + } + return null; + }; + // Is the current day hidden? + // `day` is a day-of-week index (0-6), or a Date (used for UTC) + DateProfileGenerator.prototype.isHiddenDay = function (day) { + if (day instanceof Date) { + day = day.getUTCDay(); + } + return this.isHiddenDayHash[day]; + }; + // Incrementing the current day until it is no longer a hidden day, returning a copy. + // DOES NOT CONSIDER validRange! + // If the initial value of `date` is not a hidden day, don't do anything. + // Pass `isExclusive` as `true` if you are dealing with an end date. + // `inc` defaults to `1` (increment one day forward each time) + DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) { + if (inc === void 0) { inc = 1; } + if (isExclusive === void 0) { isExclusive = false; } + while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) { + date = addDays(date, inc); + } + return date; + }; + return DateProfileGenerator; + }()); + // TODO: find a way to avoid comparing DateProfiles. it's tedious + function isDateProfilesEqual(p0, p1) { + return rangesEqual(p0.validRange, p1.validRange) && + rangesEqual(p0.activeRange, p1.activeRange) && + rangesEqual(p0.renderRange, p1.renderRange) && + durationsEqual(p0.minTime, p1.minTime) && + durationsEqual(p0.maxTime, p1.maxTime); + /* + TODO: compare more? + currentRange: DateRange + currentRangeUnit: string + isRangeAllDay: boolean + isValid: boolean + dateIncrement: Duration + */ + } + + function reduce (state, action, calendar) { + var viewType = reduceViewType(state.viewType, action); + var dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar); + var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar); + var nextState = __assign({}, state, { viewType: viewType, + dateProfile: dateProfile, currentDate: reduceCurrentDate(state.currentDate, action, dateProfile), eventSources: eventSources, eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar), dateSelection: reduceDateSelection(state.dateSelection, action, calendar), eventSelection: reduceSelectedEvent(state.eventSelection, action), eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar), eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar), eventSourceLoadingLevel: computeLoadingLevel(eventSources), loadingLevel: computeLoadingLevel(eventSources) }); + for (var _i = 0, _a = calendar.pluginSystem.hooks.reducers; _i < _a.length; _i++) { + var reducerFunc = _a[_i]; + nextState = reducerFunc(nextState, action, calendar); + } + // console.log(action.type, nextState) + return nextState; + } + function reduceViewType(currentViewType, action) { + switch (action.type) { + case 'SET_VIEW_TYPE': + return action.viewType; + default: + return currentViewType; + } + } + function reduceDateProfile(currentDateProfile, action, currentDate, viewType, calendar) { + var newDateProfile; + switch (action.type) { + case 'PREV': + newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate); + break; + case 'NEXT': + newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate); + break; + case 'SET_DATE': + if (!currentDateProfile.activeRange || + !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)) { + newDateProfile = calendar.dateProfileGenerators[viewType].build(action.dateMarker, undefined, true // forceToValid + ); + } + break; + case 'SET_VIEW_TYPE': + var generator = calendar.dateProfileGenerators[viewType]; + if (!generator) { + throw new Error(viewType ? + 'The FullCalendar view "' + viewType + '" does not exist. Make sure your plugins are loaded correctly.' : + 'No available FullCalendar view plugins.'); + } + newDateProfile = generator.build(action.dateMarker || currentDate, undefined, true // forceToValid + ); + break; + } + if (newDateProfile && + newDateProfile.isValid && + !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))) { + return newDateProfile; + } + else { + return currentDateProfile; + } + } + function reduceCurrentDate(currentDate, action, dateProfile) { + switch (action.type) { + case 'PREV': + case 'NEXT': + if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) { + return dateProfile.currentRange.start; + } + else { + return currentDate; + } + case 'SET_DATE': + case 'SET_VIEW_TYPE': + var newDate = action.dateMarker || currentDate; + if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) { + return dateProfile.currentRange.start; + } + else { + return newDate; + } + default: + return currentDate; + } + } + function reduceDateSelection(currentSelection, action, calendar) { + switch (action.type) { + case 'SELECT_DATES': + return action.selection; + case 'UNSELECT_DATES': + return null; + default: + return currentSelection; + } + } + function reduceSelectedEvent(currentInstanceId, action) { + switch (action.type) { + case 'SELECT_EVENT': + return action.eventInstanceId; + case 'UNSELECT_EVENT': + return ''; + default: + return currentInstanceId; + } + } + function reduceEventDrag(currentDrag, action, sources, calendar) { + switch (action.type) { + case 'SET_EVENT_DRAG': + var newDrag = action.state; + return { + affectedEvents: newDrag.affectedEvents, + mutatedEvents: newDrag.mutatedEvents, + isEvent: newDrag.isEvent, + origSeg: newDrag.origSeg + }; + case 'UNSET_EVENT_DRAG': + return null; + default: + return currentDrag; + } + } + function reduceEventResize(currentResize, action, sources, calendar) { + switch (action.type) { + case 'SET_EVENT_RESIZE': + var newResize = action.state; + return { + affectedEvents: newResize.affectedEvents, + mutatedEvents: newResize.mutatedEvents, + isEvent: newResize.isEvent, + origSeg: newResize.origSeg + }; + case 'UNSET_EVENT_RESIZE': + return null; + default: + return currentResize; + } + } + function computeLoadingLevel(eventSources) { + var cnt = 0; + for (var sourceId in eventSources) { + if (eventSources[sourceId].isFetching) { + cnt++; + } + } + return cnt; + } + + var STANDARD_PROPS = { + start: null, + end: null, + allDay: Boolean + }; + function parseDateSpan(raw, dateEnv, defaultDuration) { + var span = parseOpenDateSpan(raw, dateEnv); + var range = span.range; + if (!range.start) { + return null; + } + if (!range.end) { + if (defaultDuration == null) { + return null; + } + else { + range.end = dateEnv.add(range.start, defaultDuration); + } + } + return span; + } + /* + TODO: somehow combine with parseRange? + Will return null if the start/end props were present but parsed invalidly. + */ + function parseOpenDateSpan(raw, dateEnv) { + var leftovers = {}; + var standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers); + var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null; + var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null; + var allDay = standardProps.allDay; + if (allDay == null) { + allDay = (startMeta && startMeta.isTimeUnspecified) && + (!endMeta || endMeta.isTimeUnspecified); + } + // use this leftover object as the selection object + leftovers.range = { + start: startMeta ? startMeta.marker : null, + end: endMeta ? endMeta.marker : null + }; + leftovers.allDay = allDay; + return leftovers; + } + function isDateSpansEqual(span0, span1) { + return rangesEqual(span0.range, span1.range) && + span0.allDay === span1.allDay && + isSpanPropsEqual(span0, span1); + } + // the NON-DATE-RELATED props + function isSpanPropsEqual(span0, span1) { + for (var propName in span1) { + if (propName !== 'range' && propName !== 'allDay') { + if (span0[propName] !== span1[propName]) { + return false; + } + } + } + // are there any props that span0 has that span1 DOESN'T have? + // both have range/allDay, so no need to special-case. + for (var propName in span0) { + if (!(propName in span1)) { + return false; + } + } + return true; + } + function buildDateSpanApi(span, dateEnv) { + return { + start: dateEnv.toDate(span.range.start), + end: dateEnv.toDate(span.range.end), + startStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }), + endStr: dateEnv.formatIso(span.range.end, { omitTime: span.allDay }), + allDay: span.allDay + }; + } + function buildDatePointApi(span, dateEnv) { + return { + date: dateEnv.toDate(span.range.start), + dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }), + allDay: span.allDay + }; + } + function fabricateEventRange(dateSpan, eventUiBases, calendar) { + var def = parseEventDef({ editable: false }, '', // sourceId + dateSpan.allDay, true, // hasEnd + calendar); + return { + def: def, + ui: compileEventUi(def, eventUiBases), + instance: createEventInstance(def.defId, dateSpan.range), + range: dateSpan.range, + isStart: true, + isEnd: true + }; + } + + function compileViewDefs(defaultConfigs, overrideConfigs) { + var hash = {}; + var viewType; + for (viewType in defaultConfigs) { + ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs); + } + for (viewType in overrideConfigs) { + ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs); + } + return hash; + } + function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) { + if (hash[viewType]) { + return hash[viewType]; + } + var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs); + if (viewDef) { + hash[viewType] = viewDef; + } + return viewDef; + } + function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) { + var defaultConfig = defaultConfigs[viewType]; + var overrideConfig = overrideConfigs[viewType]; + var queryProp = function (name) { + return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] : + ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null); + }; + var theClass = queryProp('class'); + var superType = queryProp('superType'); + if (!superType && theClass) { + superType = + findViewNameBySubclass(theClass, overrideConfigs) || + findViewNameBySubclass(theClass, defaultConfigs); + } + var superDef = null; + if (superType) { + if (superType === viewType) { + throw new Error('Can\'t have a custom view type that references itself'); + } + superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs); + } + if (!theClass && superDef) { + theClass = superDef.class; + } + if (!theClass) { + return null; // don't throw a warning, might be settings for a single-unit view + } + return { + type: viewType, + class: theClass, + defaults: __assign({}, (superDef ? superDef.defaults : {}), (defaultConfig ? defaultConfig.options : {})), + overrides: __assign({}, (superDef ? superDef.overrides : {}), (overrideConfig ? overrideConfig.options : {})) + }; + } + function findViewNameBySubclass(viewSubclass, configs) { + var superProto = Object.getPrototypeOf(viewSubclass.prototype); + for (var viewType in configs) { + var parsed = configs[viewType]; + // need DIRECT subclass, so instanceof won't do it + if (parsed.class && parsed.class.prototype === superProto) { + return viewType; + } + } + return ''; + } + + function parseViewConfigs(inputs) { + return mapHash(inputs, parseViewConfig); + } + var VIEW_DEF_PROPS = { + type: String, + class: null + }; + function parseViewConfig(input) { + if (typeof input === 'function') { + input = { class: input }; + } + var options = {}; + var props = refineProps(input, VIEW_DEF_PROPS, {}, options); + return { + superType: props.type, + class: props.class, + options: options + }; + } + + function buildViewSpecs(defaultInputs, optionsManager) { + var defaultConfigs = parseViewConfigs(defaultInputs); + var overrideConfigs = parseViewConfigs(optionsManager.overrides.views); + var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs); + return mapHash(viewDefs, function (viewDef) { + return buildViewSpec(viewDef, overrideConfigs, optionsManager); + }); + } + function buildViewSpec(viewDef, overrideConfigs, optionsManager) { + var durationInput = viewDef.overrides.duration || + viewDef.defaults.duration || + optionsManager.dynamicOverrides.duration || + optionsManager.overrides.duration; + var duration = null; + var durationUnit = ''; + var singleUnit = ''; + var singleUnitOverrides = {}; + if (durationInput) { + duration = createDuration(durationInput); + if (duration) { // valid? + var denom = greatestDurationDenominator(duration, !getWeeksFromInput(durationInput)); + durationUnit = denom.unit; + if (denom.value === 1) { + singleUnit = durationUnit; + singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {}; + } + } + } + var queryButtonText = function (options) { + var buttonTextMap = options.buttonText || {}; + var buttonTextKey = viewDef.defaults.buttonTextKey; + if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) { + return buttonTextMap[buttonTextKey]; + } + if (buttonTextMap[viewDef.type] != null) { + return buttonTextMap[viewDef.type]; + } + if (buttonTextMap[singleUnit] != null) { + return buttonTextMap[singleUnit]; + } + }; + return { + type: viewDef.type, + class: viewDef.class, + duration: duration, + durationUnit: durationUnit, + singleUnit: singleUnit, + options: __assign({}, globalDefaults, viewDef.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, singleUnitOverrides, viewDef.overrides, optionsManager.dynamicOverrides), + buttonTextOverride: queryButtonText(optionsManager.dynamicOverrides) || + queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence + viewDef.overrides.buttonText, + buttonTextDefault: queryButtonText(optionsManager.localeDefaults) || + queryButtonText(optionsManager.dirDefaults) || + viewDef.defaults.buttonText || + queryButtonText(globalDefaults) || + viewDef.type // fall back to given view name + }; + } + + var Toolbar = /** @class */ (function (_super) { + __extends(Toolbar, _super); + function Toolbar(extraClassName) { + var _this = _super.call(this) || this; + _this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout); + _this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]); + _this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]); + _this._updateToday = memoizeRendering(_this.updateToday, null, [_this._renderLayout]); + _this._updatePrev = memoizeRendering(_this.updatePrev, null, [_this._renderLayout]); + _this._updateNext = memoizeRendering(_this.updateNext, null, [_this._renderLayout]); + _this.el = createElement('div', { className: 'fc-toolbar ' + extraClassName }); + return _this; + } + Toolbar.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this._renderLayout.unrender(); // should unrender everything else + removeElement(this.el); + }; + Toolbar.prototype.render = function (props) { + this._renderLayout(props.layout); + this._updateTitle(props.title); + this._updateActiveButton(props.activeButton); + this._updateToday(props.isTodayEnabled); + this._updatePrev(props.isPrevEnabled); + this._updateNext(props.isNextEnabled); + }; + Toolbar.prototype.renderLayout = function (layout) { + var el = this.el; + this.viewsWithButtons = []; + appendToElement(el, this.renderSection('left', layout.left)); + appendToElement(el, this.renderSection('center', layout.center)); + appendToElement(el, this.renderSection('right', layout.right)); + }; + Toolbar.prototype.unrenderLayout = function () { + this.el.innerHTML = ''; + }; + Toolbar.prototype.renderSection = function (position, buttonStr) { + var _this = this; + var _a = this.context, theme = _a.theme, calendar = _a.calendar; + var optionsManager = calendar.optionsManager; + var viewSpecs = calendar.viewSpecs; + var sectionEl = createElement('div', { className: 'fc-' + position }); + var calendarCustomButtons = optionsManager.computed.customButtons || {}; + var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {}; + var calendarButtonText = optionsManager.computed.buttonText || {}; + if (buttonStr) { + buttonStr.split(' ').forEach(function (buttonGroupStr, i) { + var groupChildren = []; + var isOnlyButtons = true; + var groupEl; + buttonGroupStr.split(',').forEach(function (buttonName, j) { + var customButtonProps; + var viewSpec; + var buttonClick; + var buttonIcon; // only one of these will be set + var buttonText; // " + var buttonInnerHtml; + var buttonClasses; + var buttonEl; + var buttonAriaAttr; + if (buttonName === 'title') { + groupChildren.push(htmlToElement('

 

')); // we always want it to take up height + isOnlyButtons = false; + } + else { + if ((customButtonProps = calendarCustomButtons[buttonName])) { + buttonClick = function (ev) { + if (customButtonProps.click) { + customButtonProps.click.call(buttonEl, ev); + } + }; + (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) || + (buttonIcon = theme.getIconClass(buttonName)) || + (buttonText = customButtonProps.text); + } + else if ((viewSpec = viewSpecs[buttonName])) { + _this.viewsWithButtons.push(buttonName); + buttonClick = function () { + calendar.changeView(buttonName); + }; + (buttonText = viewSpec.buttonTextOverride) || + (buttonIcon = theme.getIconClass(buttonName)) || + (buttonText = viewSpec.buttonTextDefault); + } + else if (calendar[buttonName]) { // a calendar method + buttonClick = function () { + calendar[buttonName](); + }; + (buttonText = calendarButtonTextOverrides[buttonName]) || + (buttonIcon = theme.getIconClass(buttonName)) || + (buttonText = calendarButtonText[buttonName]); + // ^ everything else is considered default + } + if (buttonClick) { + buttonClasses = [ + 'fc-' + buttonName + '-button', + theme.getClass('button') + ]; + if (buttonText) { + buttonInnerHtml = htmlEscape(buttonText); + buttonAriaAttr = ''; + } + else if (buttonIcon) { + buttonInnerHtml = ""; + buttonAriaAttr = ' aria-label="' + buttonName + '"'; + } + buttonEl = htmlToElement(// type="button" so that it doesn't submit a form + ''); + buttonEl.addEventListener('click', buttonClick); + groupChildren.push(buttonEl); + } + } + }); + if (groupChildren.length > 1) { + groupEl = document.createElement('div'); + var buttonGroupClassName = theme.getClass('buttonGroup'); + if (isOnlyButtons && buttonGroupClassName) { + groupEl.classList.add(buttonGroupClassName); + } + appendToElement(groupEl, groupChildren); + sectionEl.appendChild(groupEl); + } + else { + appendToElement(sectionEl, groupChildren); // 1 or 0 children + } + }); + } + return sectionEl; + }; + Toolbar.prototype.updateToday = function (isTodayEnabled) { + this.toggleButtonEnabled('today', isTodayEnabled); + }; + Toolbar.prototype.updatePrev = function (isPrevEnabled) { + this.toggleButtonEnabled('prev', isPrevEnabled); + }; + Toolbar.prototype.updateNext = function (isNextEnabled) { + this.toggleButtonEnabled('next', isNextEnabled); + }; + Toolbar.prototype.updateTitle = function (text) { + findElements(this.el, 'h2').forEach(function (titleEl) { + titleEl.innerText = text; + }); + }; + Toolbar.prototype.updateActiveButton = function (buttonName) { + var theme = this.context.theme; + var className = theme.getClass('buttonActive'); + findElements(this.el, 'button').forEach(function (buttonEl) { + if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) { + buttonEl.classList.add(className); + } + else { + buttonEl.classList.remove(className); + } + }); + }; + Toolbar.prototype.toggleButtonEnabled = function (buttonName, bool) { + findElements(this.el, '.fc-' + buttonName + '-button').forEach(function (buttonEl) { + buttonEl.disabled = !bool; + }); + }; + return Toolbar; + }(Component)); + + var CalendarComponent = /** @class */ (function (_super) { + __extends(CalendarComponent, _super); + function CalendarComponent(el) { + var _this = _super.call(this) || this; + _this.elClassNames = []; + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + _this.renderToolbars = memoizeRendering(_this._renderToolbars, _this._unrenderToolbars, [_this.renderSkeleton]); + _this.buildComponentContext = memoize(buildComponentContext); + _this.buildViewPropTransformers = memoize(buildViewPropTransformers); + _this.el = el; + _this.computeTitle = memoize(computeTitle); + _this.parseBusinessHours = memoize(function (input) { + return parseBusinessHours(input, _this.context.calendar); + }); + return _this; + } + CalendarComponent.prototype.render = function (props, context) { + this.freezeHeight(); + var title = this.computeTitle(props.dateProfile, props.viewSpec.options); + this.renderSkeleton(context); + this.renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, title); + this.renderView(props, title); + this.updateSize(); + this.thawHeight(); + }; + CalendarComponent.prototype.destroy = function () { + if (this.header) { + this.header.destroy(); + } + if (this.footer) { + this.footer.destroy(); + } + this.renderSkeleton.unrender(); // will call destroyView + _super.prototype.destroy.call(this); + }; + CalendarComponent.prototype._renderSkeleton = function (context) { + this.updateElClassNames(context); + prependToElement(this.el, this.contentEl = createElement('div', { className: 'fc-view-container' })); + var calendar = context.calendar; + for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) { + var modifyViewContainer = _a[_i]; + modifyViewContainer(this.contentEl, calendar); + } + }; + CalendarComponent.prototype._unrenderSkeleton = function () { + // weird to have this here + if (this.view) { + this.savedScroll = this.view.queryScroll(); + this.view.destroy(); + this.view = null; + } + removeElement(this.contentEl); + this.removeElClassNames(); + }; + CalendarComponent.prototype.removeElClassNames = function () { + var classList = this.el.classList; + for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) { + var className = _a[_i]; + classList.remove(className); + } + this.elClassNames = []; + }; + CalendarComponent.prototype.updateElClassNames = function (context) { + this.removeElClassNames(); + var theme = context.theme, options = context.options; + this.elClassNames = [ + 'fc', + 'fc-' + options.dir, + theme.getClass('widget') + ]; + var classList = this.el.classList; + for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) { + var className = _a[_i]; + classList.add(className); + } + }; + CalendarComponent.prototype._renderToolbars = function (viewSpec, dateProfile, currentDate, title) { + var _a = this, context = _a.context, header = _a.header, footer = _a.footer; + var options = context.options, calendar = context.calendar; + var headerLayout = options.header; + var footerLayout = options.footer; + var dateProfileGenerator = this.props.dateProfileGenerator; + var now = calendar.getNow(); + var todayInfo = dateProfileGenerator.build(now); + var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate); + var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate); + var toolbarProps = { + title: title, + activeButton: viewSpec.type, + isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now), + isPrevEnabled: prevInfo.isValid, + isNextEnabled: nextInfo.isValid + }; + if (headerLayout) { + if (!header) { + header = this.header = new Toolbar('fc-header-toolbar'); + prependToElement(this.el, header.el); + } + header.receiveProps(__assign({ layout: headerLayout }, toolbarProps), context); + } + else if (header) { + header.destroy(); + header = this.header = null; + } + if (footerLayout) { + if (!footer) { + footer = this.footer = new Toolbar('fc-footer-toolbar'); + appendToElement(this.el, footer.el); + } + footer.receiveProps(__assign({ layout: footerLayout }, toolbarProps), context); + } + else if (footer) { + footer.destroy(); + footer = this.footer = null; + } + }; + CalendarComponent.prototype._unrenderToolbars = function () { + if (this.header) { + this.header.destroy(); + this.header = null; + } + if (this.footer) { + this.footer.destroy(); + this.footer = null; + } + }; + CalendarComponent.prototype.renderView = function (props, title) { + var view = this.view; + var _a = this.context, calendar = _a.calendar, options = _a.options; + var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator; + if (!view || view.viewSpec !== viewSpec) { + if (view) { + view.destroy(); + } + view = this.view = new viewSpec['class'](viewSpec, this.contentEl); + if (this.savedScroll) { + view.addScroll(this.savedScroll, true); + this.savedScroll = null; + } + } + view.title = title; // for the API + var viewProps = { + dateProfileGenerator: dateProfileGenerator, + dateProfile: props.dateProfile, + businessHours: this.parseBusinessHours(viewSpec.options.businessHours), + eventStore: props.eventStore, + eventUiBases: props.eventUiBases, + dateSelection: props.dateSelection, + eventSelection: props.eventSelection, + eventDrag: props.eventDrag, + eventResize: props.eventResize + }; + var transformers = this.buildViewPropTransformers(calendar.pluginSystem.hooks.viewPropsTransformers); + for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) { + var transformer = transformers_1[_i]; + __assign(viewProps, transformer.transform(viewProps, viewSpec, props, options)); + } + view.receiveProps(viewProps, this.buildComponentContext(this.context, viewSpec, view)); + }; + // Sizing + // ----------------------------------------------------------------------------------------------------------------- + CalendarComponent.prototype.updateSize = function (isResize) { + if (isResize === void 0) { isResize = false; } + var view = this.view; + if (!view) { + return; // why? + } + if (isResize || this.isHeightAuto == null) { + this.computeHeightVars(); + } + view.updateSize(isResize, this.viewHeight, this.isHeightAuto); + view.updateNowIndicator(); // we need to guarantee this will run after updateSize + view.popScroll(isResize); + }; + CalendarComponent.prototype.computeHeightVars = function () { + var calendar = this.context.calendar; // yuck. need to handle dynamic options + var heightInput = calendar.opt('height'); + var contentHeightInput = calendar.opt('contentHeight'); + this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto'; + if (typeof contentHeightInput === 'number') { // exists and not 'auto' + this.viewHeight = contentHeightInput; + } + else if (typeof contentHeightInput === 'function') { // exists and is a function + this.viewHeight = contentHeightInput(); + } + else if (typeof heightInput === 'number') { // exists and not 'auto' + this.viewHeight = heightInput - this.queryToolbarsHeight(); + } + else if (typeof heightInput === 'function') { // exists and is a function + this.viewHeight = heightInput() - this.queryToolbarsHeight(); + } + else if (heightInput === 'parent') { // set to height of parent element + var parentEl = this.el.parentNode; + this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight(); + } + else { + this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width / + Math.max(calendar.opt('aspectRatio'), .5)); + } + }; + CalendarComponent.prototype.queryToolbarsHeight = function () { + var height = 0; + if (this.header) { + height += computeHeightAndMargins(this.header.el); + } + if (this.footer) { + height += computeHeightAndMargins(this.footer.el); + } + return height; + }; + // Height "Freezing" + // ----------------------------------------------------------------------------------------------------------------- + CalendarComponent.prototype.freezeHeight = function () { + applyStyle(this.el, { + height: this.el.getBoundingClientRect().height, + overflow: 'hidden' + }); + }; + CalendarComponent.prototype.thawHeight = function () { + applyStyle(this.el, { + height: '', + overflow: '' + }); + }; + return CalendarComponent; + }(Component)); + // Title and Date Formatting + // ----------------------------------------------------------------------------------------------------------------- + // Computes what the title at the top of the calendar should be for this view + function computeTitle(dateProfile, viewOptions) { + var range; + // for views that span a large unit of time, show the proper interval, ignoring stray days before and after + if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) { + range = dateProfile.currentRange; + } + else { // for day units or smaller, use the actual day range + range = dateProfile.activeRange; + } + return this.context.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay }); + } + // Generates the format string that should be used to generate the title for the current date range. + // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`. + function computeTitleFormat(dateProfile) { + var currentRangeUnit = dateProfile.currentRangeUnit; + if (currentRangeUnit === 'year') { + return { year: 'numeric' }; + } + else if (currentRangeUnit === 'month') { + return { year: 'numeric', month: 'long' }; // like "September 2014" + } + else { + var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end); + if (days !== null && days > 1) { + // multi-day range. shorter, like "Sep 9 - 10 2014" + return { year: 'numeric', month: 'short', day: 'numeric' }; + } + else { + // one day. longer, like "September 9 2014" + return { year: 'numeric', month: 'long', day: 'numeric' }; + } + } + } + // build a context scoped to the view + function buildComponentContext(context, viewSpec, view) { + return context.extend(viewSpec.options, view); + } + // Plugin + // ----------------------------------------------------------------------------------------------------------------- + function buildViewPropTransformers(theClasses) { + return theClasses.map(function (theClass) { + return new theClass(); + }); + } + + var Interaction = /** @class */ (function () { + function Interaction(settings) { + this.component = settings.component; + } + Interaction.prototype.destroy = function () { + }; + return Interaction; + }()); + function parseInteractionSettings(component, input) { + return { + component: component, + el: input.el, + useEventCenter: input.useEventCenter != null ? input.useEventCenter : true + }; + } + function interactionSettingsToStore(settings) { + var _a; + return _a = {}, + _a[settings.component.uid] = settings, + _a; + } + // global state + var interactionSettingsStore = {}; + + /* + Detects when the user clicks on an event within a DateComponent + */ + var EventClicking = /** @class */ (function (_super) { + __extends(EventClicking, _super); + function EventClicking(settings) { + var _this = _super.call(this, settings) || this; + _this.handleSegClick = function (ev, segEl) { + var component = _this.component; + var _a = component.context, calendar = _a.calendar, view = _a.view; + var seg = getElSeg(segEl); + if (seg && // might be the
surrounding the more link + component.isValidSegDownEl(ev.target)) { + // our way to simulate a link click for elements that can't be tags + // grab before trigger fired in case trigger trashes DOM thru rerendering + var hasUrlContainer = elementClosest(ev.target, '.fc-has-url'); + var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : ''; + calendar.publiclyTrigger('eventClick', [ + { + el: segEl, + event: new EventApi(component.context.calendar, seg.eventRange.def, seg.eventRange.instance), + jsEvent: ev, + view: view + } + ]); + if (url && !ev.defaultPrevented) { + window.location.href = url; + } + } + }; + var component = settings.component; + _this.destroy = listenBySelector(component.el, 'click', component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegClick); + return _this; + } + return EventClicking; + }(Interaction)); + + /* + Triggers events and adds/removes core classNames when the user's pointer + enters/leaves event-elements of a component. + */ + var EventHovering = /** @class */ (function (_super) { + __extends(EventHovering, _super); + function EventHovering(settings) { + var _this = _super.call(this, settings) || this; + // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it + _this.handleEventElRemove = function (el) { + if (el === _this.currentSegEl) { + _this.handleSegLeave(null, _this.currentSegEl); + } + }; + _this.handleSegEnter = function (ev, segEl) { + if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper + segEl.classList.add('fc-allow-mouse-resize'); + _this.currentSegEl = segEl; + _this.triggerEvent('eventMouseEnter', ev, segEl); + } + }; + _this.handleSegLeave = function (ev, segEl) { + if (_this.currentSegEl) { + segEl.classList.remove('fc-allow-mouse-resize'); + _this.currentSegEl = null; + _this.triggerEvent('eventMouseLeave', ev, segEl); + } + }; + var component = settings.component; + _this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave); + // how to make sure component already has context? + component.context.calendar.on('eventElRemove', _this.handleEventElRemove); + return _this; + } + EventHovering.prototype.destroy = function () { + this.removeHoverListeners(); + this.component.context.calendar.off('eventElRemove', this.handleEventElRemove); + }; + EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) { + var component = this.component; + var _a = component.context, calendar = _a.calendar, view = _a.view; + var seg = getElSeg(segEl); + if (!ev || component.isValidSegDownEl(ev.target)) { + calendar.publiclyTrigger(publicEvName, [ + { + el: segEl, + event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance), + jsEvent: ev, + view: view + } + ]); + } + }; + return EventHovering; + }(Interaction)); + + var StandardTheme = /** @class */ (function (_super) { + __extends(StandardTheme, _super); + function StandardTheme() { + return _super !== null && _super.apply(this, arguments) || this; + } + return StandardTheme; + }(Theme)); + StandardTheme.prototype.classes = { + widget: 'fc-unthemed', + widgetHeader: 'fc-widget-header', + widgetContent: 'fc-widget-content', + buttonGroup: 'fc-button-group', + button: 'fc-button fc-button-primary', + buttonActive: 'fc-button-active', + popoverHeader: 'fc-widget-header', + popoverContent: 'fc-widget-content', + // day grid + headerRow: 'fc-widget-header', + dayRow: 'fc-widget-content', + // list view + listView: 'fc-widget-content' + }; + StandardTheme.prototype.baseIconClass = 'fc-icon'; + StandardTheme.prototype.iconClasses = { + close: 'fc-icon-x', + prev: 'fc-icon-chevron-left', + next: 'fc-icon-chevron-right', + prevYear: 'fc-icon-chevrons-left', + nextYear: 'fc-icon-chevrons-right' + }; + StandardTheme.prototype.iconOverrideOption = 'buttonIcons'; + StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon'; + StandardTheme.prototype.iconOverridePrefix = 'fc-icon-'; + + var Calendar = /** @class */ (function () { + function Calendar(el, overrides) { + var _this = this; + this.buildComponentContext = memoize(buildComponentContext$1); + this.parseRawLocales = memoize(parseRawLocales); + this.buildLocale = memoize(buildLocale); + this.buildDateEnv = memoize(buildDateEnv); + this.buildTheme = memoize(buildTheme); + this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase); + this.buildSelectionConfig = memoize(this._buildSelectionConfig); + this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual); + this.buildEventUiBases = memoize(buildEventUiBases); + this.interactionsStore = {}; + this.actionQueue = []; + this.isReducing = false; + // isDisplaying: boolean = false // installed in DOM? accepting renders? + this.needsRerender = false; // needs a render? + this.isRendering = false; // currently in the executeRender function? + this.renderingPauseDepth = 0; + this.buildDelayedRerender = memoize(buildDelayedRerender); + this.afterSizingTriggers = {}; + this.isViewUpdated = false; + this.isDatesUpdated = false; + this.isEventsUpdated = false; + this.el = el; + this.optionsManager = new OptionsManager(overrides || {}); + this.pluginSystem = new PluginSystem(); + // only do once. don't do in handleOptions. because can't remove plugins + this.addPluginInputs(this.optionsManager.computed.plugins || []); + this.handleOptions(this.optionsManager.computed); + this.publiclyTrigger('_init'); // for tests + this.hydrate(); + this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions + .map(function (calendarInteractionClass) { + return new calendarInteractionClass(_this); + }); + } + Calendar.prototype.addPluginInputs = function (pluginInputs) { + var pluginDefs = refinePluginDefs(pluginInputs); + for (var _i = 0, pluginDefs_1 = pluginDefs; _i < pluginDefs_1.length; _i++) { + var pluginDef = pluginDefs_1[_i]; + this.pluginSystem.add(pluginDef); + } + }; + Object.defineProperty(Calendar.prototype, "view", { + // public API + get: function () { + return this.component ? this.component.view : null; + }, + enumerable: true, + configurable: true + }); + // Public API for rendering + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.render = function () { + if (!this.component) { + this.component = new CalendarComponent(this.el); + this.renderableEventStore = createEmptyEventStore(); + this.bindHandlers(); + this.executeRender(); + } + else { + this.requestRerender(); + } + }; + Calendar.prototype.destroy = function () { + if (this.component) { + this.unbindHandlers(); + this.component.destroy(); // don't null-out. in case API needs access + this.component = null; // umm ??? + for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) { + var interaction = _a[_i]; + interaction.destroy(); + } + this.publiclyTrigger('_destroyed'); + } + }; + // Handlers + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.bindHandlers = function () { + var _this = this; + // event delegation for nav links + this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', function (ev, anchorEl) { + var gotoOptions = anchorEl.getAttribute('data-goto'); + gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {}; + var dateEnv = _this.dateEnv; + var dateMarker = dateEnv.createMarker(gotoOptions.date); + var viewType = gotoOptions.type; + // property like "navLinkDayClick". might be a string or a function + var customAction = _this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click'); + if (typeof customAction === 'function') { + customAction(dateEnv.toDate(dateMarker), ev); + } + else { + if (typeof customAction === 'string') { + viewType = customAction; + } + _this.zoomTo(dateMarker, viewType); + } + }); + if (this.opt('handleWindowResize')) { + window.addEventListener('resize', this.windowResizeProxy = debounce(// prevents rapid calls + this.windowResize.bind(this), this.opt('windowResizeDelay'))); + } + }; + Calendar.prototype.unbindHandlers = function () { + this.removeNavLinkListener(); + if (this.windowResizeProxy) { + window.removeEventListener('resize', this.windowResizeProxy); + this.windowResizeProxy = null; + } + }; + // Dispatcher + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.hydrate = function () { + var _this = this; + this.state = this.buildInitialState(); + var rawSources = this.opt('eventSources') || []; + var singleRawSource = this.opt('events'); + var sources = []; // parsed + if (singleRawSource) { + rawSources.unshift(singleRawSource); + } + for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) { + var rawSource = rawSources_1[_i]; + var source = parseEventSource(rawSource, this); + if (source) { + sources.push(source); + } + } + this.batchRendering(function () { + _this.dispatch({ type: 'INIT' }); // pass in sources here? + _this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: sources }); + _this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: _this.opt('defaultView') || _this.pluginSystem.hooks.defaultView + }); + }); + }; + Calendar.prototype.buildInitialState = function () { + return { + viewType: null, + loadingLevel: 0, + eventSourceLoadingLevel: 0, + currentDate: this.getInitialDate(), + dateProfile: null, + eventSources: {}, + eventStore: createEmptyEventStore(), + dateSelection: null, + eventSelection: '', + eventDrag: null, + eventResize: null + }; + }; + Calendar.prototype.dispatch = function (action) { + this.actionQueue.push(action); + if (!this.isReducing) { + this.isReducing = true; + var oldState = this.state; + while (this.actionQueue.length) { + this.state = this.reduce(this.state, this.actionQueue.shift(), this); + } + var newState = this.state; + this.isReducing = false; + if (!oldState.loadingLevel && newState.loadingLevel) { + this.publiclyTrigger('loading', [true]); + } + else if (oldState.loadingLevel && !newState.loadingLevel) { + this.publiclyTrigger('loading', [false]); + } + var view = this.component && this.component.view; + if (oldState.eventStore !== newState.eventStore) { + if (oldState.eventStore) { + this.isEventsUpdated = true; + } + } + if (oldState.dateProfile !== newState.dateProfile) { + if (oldState.dateProfile && view) { // why would view be null!? + this.publiclyTrigger('datesDestroy', [ + { + view: view, + el: view.el + } + ]); + } + this.isDatesUpdated = true; + } + if (oldState.viewType !== newState.viewType) { + if (oldState.viewType && view) { // why would view be null!? + this.publiclyTrigger('viewSkeletonDestroy', [ + { + view: view, + el: view.el + } + ]); + } + this.isViewUpdated = true; + } + this.requestRerender(); + } + }; + Calendar.prototype.reduce = function (state, action, calendar) { + return reduce(state, action, calendar); + }; + // Render Queue + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.requestRerender = function () { + this.needsRerender = true; + this.delayedRerender(); // will call a debounced-version of tryRerender + }; + Calendar.prototype.tryRerender = function () { + if (this.component && // must be accepting renders + this.needsRerender && // indicates that a rerender was requested + !this.renderingPauseDepth && // not paused + !this.isRendering // not currently in the render loop + ) { + this.executeRender(); + } + }; + Calendar.prototype.batchRendering = function (func) { + this.renderingPauseDepth++; + func(); + this.renderingPauseDepth--; + if (this.needsRerender) { + this.requestRerender(); + } + }; + // Rendering + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.executeRender = function () { + // clear these BEFORE the render so that new values will accumulate during render + this.needsRerender = false; + this.isRendering = true; + this.renderComponent(); + this.isRendering = false; + // received a rerender request while rendering + if (this.needsRerender) { + this.delayedRerender(); + } + }; + /* + don't call this directly. use executeRender instead + */ + Calendar.prototype.renderComponent = function () { + var _a = this, state = _a.state, component = _a.component; + var viewType = state.viewType; + var viewSpec = this.viewSpecs[viewType]; + if (!viewSpec) { + throw new Error("View type \"" + viewType + "\" is not valid"); + } + // if event sources are still loading and progressive rendering hasn't been enabled, + // keep rendering the last fully loaded set of events + var renderableEventStore = this.renderableEventStore = + (state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering')) ? + this.renderableEventStore : + state.eventStore; + var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options); + var eventUiBySource = this.buildEventUiBySource(state.eventSources); + var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource); + component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfileGenerator: this.dateProfileGenerators[viewType], dateProfile: state.dateProfile, eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }), this.buildComponentContext(this.theme, this.dateEnv, this.optionsManager.computed)); + if (this.isViewUpdated) { + this.isViewUpdated = false; + this.publiclyTrigger('viewSkeletonRender', [ + { + view: component.view, + el: component.view.el + } + ]); + } + if (this.isDatesUpdated) { + this.isDatesUpdated = false; + this.publiclyTrigger('datesRender', [ + { + view: component.view, + el: component.view.el + } + ]); + } + if (this.isEventsUpdated) { + this.isEventsUpdated = false; + } + this.releaseAfterSizingTriggers(); + }; + // Options + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.setOption = function (name, val) { + var _a; + this.mutateOptions((_a = {}, _a[name] = val, _a), [], true); + }; + Calendar.prototype.getOption = function (name) { + return this.optionsManager.computed[name]; + }; + Calendar.prototype.opt = function (name) { + return this.optionsManager.computed[name]; + }; + Calendar.prototype.viewOpt = function (name) { + return this.viewOpts()[name]; + }; + Calendar.prototype.viewOpts = function () { + return this.viewSpecs[this.state.viewType].options; + }; + /* + handles option changes (like a diff) + */ + Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) { + var _this = this; + var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers; + var normalUpdates = {}; + var specialUpdates = {}; + var oldDateEnv = this.dateEnv; // do this before handleOptions + var isTimeZoneDirty = false; + var isSizeDirty = false; + var anyDifficultOptions = Boolean(removals.length); + for (var name_1 in updates) { + if (changeHandlers[name_1]) { + specialUpdates[name_1] = updates[name_1]; + } + else { + normalUpdates[name_1] = updates[name_1]; + } + } + for (var name_2 in normalUpdates) { + if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) { + isSizeDirty = true; + } + else if (/^(defaultDate|defaultView)$/.test(name_2)) ; + else { + anyDifficultOptions = true; + if (name_2 === 'timeZone') { + isTimeZoneDirty = true; + } + } + } + this.optionsManager.mutate(normalUpdates, removals, isDynamic); + if (anyDifficultOptions) { + this.handleOptions(this.optionsManager.computed); + } + this.batchRendering(function () { + if (anyDifficultOptions) { + if (isTimeZoneDirty) { + _this.dispatch({ + type: 'CHANGE_TIMEZONE', + oldDateEnv: oldDateEnv + }); + } + /* HACK + has the same effect as calling this.requestRerender() + but recomputes the state's dateProfile + */ + _this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: _this.state.viewType + }); + } + else if (isSizeDirty) { + _this.updateSize(); + } + // special updates + if (deepEqual) { + for (var name_3 in specialUpdates) { + changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual); + } + } + }); + }; + /* + rebuilds things based off of a complete set of refined options + */ + Calendar.prototype.handleOptions = function (options) { + var _this = this; + var pluginHooks = this.pluginSystem.hooks; + this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration); + this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration); + this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay); + this.theme = this.buildTheme(options); + var available = this.parseRawLocales(options.locales); + this.availableRawLocales = available.map; + var locale = this.buildLocale(options.locale || available.defaultCode, available.map); + this.dateEnv = this.buildDateEnv(locale, options.timeZone, pluginHooks.namedTimeZonedImpl, options.firstDay, options.weekNumberCalculation, options.weekLabel, pluginHooks.cmdFormatter); + this.selectionConfig = this.buildSelectionConfig(options); // needs dateEnv. do after :( + // ineffecient to do every time? + this.viewSpecs = buildViewSpecs(pluginHooks.views, this.optionsManager); + // ineffecient to do every time? + this.dateProfileGenerators = mapHash(this.viewSpecs, function (viewSpec) { + return new viewSpec.class.prototype.dateProfileGeneratorClass(viewSpec, _this); + }); + }; + Calendar.prototype.getAvailableLocaleCodes = function () { + return Object.keys(this.availableRawLocales); + }; + Calendar.prototype._buildSelectionConfig = function (rawOpts) { + return processScopedUiProps('select', rawOpts, this); + }; + Calendar.prototype._buildEventUiSingleBase = function (rawOpts) { + if (rawOpts.editable) { // so 'editable' affected events + rawOpts = __assign({}, rawOpts, { eventEditable: true }); + } + return processScopedUiProps('event', rawOpts, this); + }; + // Trigger + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.hasPublicHandlers = function (name) { + return this.hasHandlers(name) || + this.opt(name); // handler specified in options + }; + Calendar.prototype.publiclyTrigger = function (name, args) { + var optHandler = this.opt(name); + this.triggerWith(name, this, args); + if (optHandler) { + return optHandler.apply(this, args); + } + }; + Calendar.prototype.publiclyTriggerAfterSizing = function (name, args) { + var afterSizingTriggers = this.afterSizingTriggers; + (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args); + }; + Calendar.prototype.releaseAfterSizingTriggers = function () { + var afterSizingTriggers = this.afterSizingTriggers; + for (var name_4 in afterSizingTriggers) { + for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) { + var args = _a[_i]; + this.publiclyTrigger(name_4, args); + } + } + this.afterSizingTriggers = {}; + }; + // View + // ----------------------------------------------------------------------------------------------------------------- + // Returns a boolean about whether the view is okay to instantiate at some point + Calendar.prototype.isValidViewType = function (viewType) { + return Boolean(this.viewSpecs[viewType]); + }; + Calendar.prototype.changeView = function (viewType, dateOrRange) { + var dateMarker = null; + if (dateOrRange) { + if (dateOrRange.start && dateOrRange.end) { // a range + this.optionsManager.mutate({ visibleRange: dateOrRange }, []); // will not rerender + this.handleOptions(this.optionsManager.computed); // ...but yuck + } + else { // a date + dateMarker = this.dateEnv.createMarker(dateOrRange); // just like gotoDate + } + } + this.unselect(); + this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: viewType, + dateMarker: dateMarker + }); + }; + // Forces navigation to a view for the given date. + // `viewType` can be a specific view name or a generic one like "week" or "day". + // needs to change + Calendar.prototype.zoomTo = function (dateMarker, viewType) { + var spec; + viewType = viewType || 'day'; // day is default zoom + spec = this.viewSpecs[viewType] || + this.getUnitViewSpec(viewType); + this.unselect(); + if (spec) { + this.dispatch({ + type: 'SET_VIEW_TYPE', + viewType: spec.type, + dateMarker: dateMarker + }); + } + else { + this.dispatch({ + type: 'SET_DATE', + dateMarker: dateMarker + }); + } + }; + // Given a duration singular unit, like "week" or "day", finds a matching view spec. + // Preference is given to views that have corresponding buttons. + Calendar.prototype.getUnitViewSpec = function (unit) { + var component = this.component; + var viewTypes = []; + var i; + var spec; + // put views that have buttons first. there will be duplicates, but oh + if (component.header) { + viewTypes.push.apply(viewTypes, component.header.viewsWithButtons); + } + if (component.footer) { + viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons); + } + for (var viewType in this.viewSpecs) { + viewTypes.push(viewType); + } + for (i = 0; i < viewTypes.length; i++) { + spec = this.viewSpecs[viewTypes[i]]; + if (spec) { + if (spec.singleUnit === unit) { + return spec; + } + } + } + }; + // Current Date + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.getInitialDate = function () { + var defaultDateInput = this.opt('defaultDate'); + // compute the initial ambig-timezone date + if (defaultDateInput != null) { + return this.dateEnv.createMarker(defaultDateInput); + } + else { + return this.getNow(); // getNow already returns unzoned + } + }; + Calendar.prototype.prev = function () { + this.unselect(); + this.dispatch({ type: 'PREV' }); + }; + Calendar.prototype.next = function () { + this.unselect(); + this.dispatch({ type: 'NEXT' }); + }; + Calendar.prototype.prevYear = function () { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.addYears(this.state.currentDate, -1) + }); + }; + Calendar.prototype.nextYear = function () { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.addYears(this.state.currentDate, 1) + }); + }; + Calendar.prototype.today = function () { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.getNow() + }); + }; + Calendar.prototype.gotoDate = function (zonedDateInput) { + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.createMarker(zonedDateInput) + }); + }; + Calendar.prototype.incrementDate = function (deltaInput) { + var delta = createDuration(deltaInput); + if (delta) { // else, warn about invalid input? + this.unselect(); + this.dispatch({ + type: 'SET_DATE', + dateMarker: this.dateEnv.add(this.state.currentDate, delta) + }); + } + }; + // for external API + Calendar.prototype.getDate = function () { + return this.dateEnv.toDate(this.state.currentDate); + }; + // Date Formatting Utils + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.formatDate = function (d, formatter) { + var dateEnv = this.dateEnv; + return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter)); + }; + // `settings` is for formatter AND isEndExclusive + Calendar.prototype.formatRange = function (d0, d1, settings) { + var dateEnv = this.dateEnv; + return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings, this.opt('defaultRangeSeparator')), settings); + }; + Calendar.prototype.formatIso = function (d, omitTime) { + var dateEnv = this.dateEnv; + return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime }); + }; + // Sizing + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.windowResize = function (ev) { + if (!this.isHandlingWindowResize && + this.component && // why? + ev.target === window // not a jqui resize event + ) { + this.isHandlingWindowResize = true; + this.updateSize(); + this.publiclyTrigger('windowResize', [this.view]); + this.isHandlingWindowResize = false; + } + }; + Calendar.prototype.updateSize = function () { + if (this.component) { // when? + this.component.updateSize(true); + } + }; + // Component Registration + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.registerInteractiveComponent = function (component, settingsInput) { + var settings = parseInteractionSettings(component, settingsInput); + var DEFAULT_INTERACTIONS = [ + EventClicking, + EventHovering + ]; + var interactionClasses = DEFAULT_INTERACTIONS.concat(this.pluginSystem.hooks.componentInteractions); + var interactions = interactionClasses.map(function (interactionClass) { + return new interactionClass(settings); + }); + this.interactionsStore[component.uid] = interactions; + interactionSettingsStore[component.uid] = settings; + }; + Calendar.prototype.unregisterInteractiveComponent = function (component) { + for (var _i = 0, _a = this.interactionsStore[component.uid]; _i < _a.length; _i++) { + var listener = _a[_i]; + listener.destroy(); + } + delete this.interactionsStore[component.uid]; + delete interactionSettingsStore[component.uid]; + }; + // Date Selection / Event Selection / DayClick + // ----------------------------------------------------------------------------------------------------------------- + // this public method receives start/end dates in any format, with any timezone + // NOTE: args were changed from v3 + Calendar.prototype.select = function (dateOrObj, endDate) { + var selectionInput; + if (endDate == null) { + if (dateOrObj.start != null) { + selectionInput = dateOrObj; + } + else { + selectionInput = { + start: dateOrObj, + end: null + }; + } + } + else { + selectionInput = { + start: dateOrObj, + end: endDate + }; + } + var selection = parseDateSpan(selectionInput, this.dateEnv, createDuration({ days: 1 }) // TODO: cache this? + ); + if (selection) { // throw parse error otherwise? + this.dispatch({ type: 'SELECT_DATES', selection: selection }); + this.triggerDateSelect(selection); + } + }; + // public method + Calendar.prototype.unselect = function (pev) { + if (this.state.dateSelection) { + this.dispatch({ type: 'UNSELECT_DATES' }); + this.triggerDateUnselect(pev); + } + }; + Calendar.prototype.triggerDateSelect = function (selection, pev) { + var arg = __assign({}, this.buildDateSpanApi(selection), { jsEvent: pev ? pev.origEvent : null, view: this.view }); + this.publiclyTrigger('select', [arg]); + }; + Calendar.prototype.triggerDateUnselect = function (pev) { + this.publiclyTrigger('unselect', [ + { + jsEvent: pev ? pev.origEvent : null, + view: this.view + } + ]); + }; + // TODO: receive pev? + Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) { + var arg = __assign({}, this.buildDatePointApi(dateSpan), { dayEl: dayEl, jsEvent: ev, // Is this always a mouse event? See #4655 + view: view }); + this.publiclyTrigger('dateClick', [arg]); + }; + Calendar.prototype.buildDatePointApi = function (dateSpan) { + var props = {}; + for (var _i = 0, _a = this.pluginSystem.hooks.datePointTransforms; _i < _a.length; _i++) { + var transform = _a[_i]; + __assign(props, transform(dateSpan, this)); + } + __assign(props, buildDatePointApi(dateSpan, this.dateEnv)); + return props; + }; + Calendar.prototype.buildDateSpanApi = function (dateSpan) { + var props = {}; + for (var _i = 0, _a = this.pluginSystem.hooks.dateSpanTransforms; _i < _a.length; _i++) { + var transform = _a[_i]; + __assign(props, transform(dateSpan, this)); + } + __assign(props, buildDateSpanApi(dateSpan, this.dateEnv)); + return props; + }; + // Date Utils + // ----------------------------------------------------------------------------------------------------------------- + // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option + Calendar.prototype.getNow = function () { + var now = this.opt('now'); + if (typeof now === 'function') { + now = now(); + } + if (now == null) { + return this.dateEnv.createNowMarker(); + } + return this.dateEnv.createMarker(now); + }; + // Event-Date Utilities + // ----------------------------------------------------------------------------------------------------------------- + // Given an event's allDay status and start date, return what its fallback end date should be. + // TODO: rename to computeDefaultEventEnd + Calendar.prototype.getDefaultEventEnd = function (allDay, marker) { + var end = marker; + if (allDay) { + end = startOfDay(end); + end = this.dateEnv.add(end, this.defaultAllDayEventDuration); + } + else { + end = this.dateEnv.add(end, this.defaultTimedEventDuration); + } + return end; + }; + // Public Events API + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.addEvent = function (eventInput, sourceInput) { + if (eventInput instanceof EventApi) { + var def = eventInput._def; + var instance = eventInput._instance; + // not already present? don't want to add an old snapshot + if (!this.state.eventStore.defs[def.defId]) { + this.dispatch({ + type: 'ADD_EVENTS', + eventStore: eventTupleToStore({ def: def, instance: instance }) // TODO: better util for two args? + }); + } + return eventInput; + } + var sourceId; + if (sourceInput instanceof EventSourceApi) { + sourceId = sourceInput.internalEventSource.sourceId; + } + else if (sourceInput != null) { + var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function + if (!sourceApi) { + console.warn('Could not find an event source with ID "' + sourceInput + '"'); // TODO: test + return null; + } + else { + sourceId = sourceApi.internalEventSource.sourceId; + } + } + var tuple = parseEvent(eventInput, sourceId, this); + if (tuple) { + this.dispatch({ + type: 'ADD_EVENTS', + eventStore: eventTupleToStore(tuple) + }); + return new EventApi(this, tuple.def, tuple.def.recurringDef ? null : tuple.instance); + } + return null; + }; + // TODO: optimize + Calendar.prototype.getEventById = function (id) { + var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances; + id = String(id); + for (var defId in defs) { + var def = defs[defId]; + if (def.publicId === id) { + if (def.recurringDef) { + return new EventApi(this, def, null); + } + else { + for (var instanceId in instances) { + var instance = instances[instanceId]; + if (instance.defId === def.defId) { + return new EventApi(this, def, instance); + } + } + } + } + } + return null; + }; + Calendar.prototype.getEvents = function () { + var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances; + var eventApis = []; + for (var id in instances) { + var instance = instances[id]; + var def = defs[instance.defId]; + eventApis.push(new EventApi(this, def, instance)); + } + return eventApis; + }; + Calendar.prototype.removeAllEvents = function () { + this.dispatch({ type: 'REMOVE_ALL_EVENTS' }); + }; + Calendar.prototype.rerenderEvents = function () { + this.dispatch({ type: 'RESET_EVENTS' }); + }; + // Public Event Sources API + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.getEventSources = function () { + var sourceHash = this.state.eventSources; + var sourceApis = []; + for (var internalId in sourceHash) { + sourceApis.push(new EventSourceApi(this, sourceHash[internalId])); + } + return sourceApis; + }; + Calendar.prototype.getEventSourceById = function (id) { + var sourceHash = this.state.eventSources; + id = String(id); + for (var sourceId in sourceHash) { + if (sourceHash[sourceId].publicId === id) { + return new EventSourceApi(this, sourceHash[sourceId]); + } + } + return null; + }; + Calendar.prototype.addEventSource = function (sourceInput) { + if (sourceInput instanceof EventSourceApi) { + // not already present? don't want to add an old snapshot + if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) { + this.dispatch({ + type: 'ADD_EVENT_SOURCES', + sources: [sourceInput.internalEventSource] + }); + } + return sourceInput; + } + var eventSource = parseEventSource(sourceInput, this); + if (eventSource) { // TODO: error otherwise? + this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] }); + return new EventSourceApi(this, eventSource); + } + return null; + }; + Calendar.prototype.removeAllEventSources = function () { + this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' }); + }; + Calendar.prototype.refetchEvents = function () { + this.dispatch({ type: 'FETCH_EVENT_SOURCES' }); + }; + // Scroll + // ----------------------------------------------------------------------------------------------------------------- + Calendar.prototype.scrollToTime = function (timeInput) { + var duration = createDuration(timeInput); + if (duration) { + this.component.view.scrollToDuration(duration); + } + }; + return Calendar; + }()); + EmitterMixin.mixInto(Calendar); + // for memoizers + // ----------------------------------------------------------------------------------------------------------------- + function buildComponentContext$1(theme, dateEnv, options) { + return new ComponentContext(this, theme, dateEnv, options, null); + } + function buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) { + return new DateEnv({ + calendarSystem: 'gregory', + timeZone: timeZone, + namedTimeZoneImpl: namedTimeZoneImpl, + locale: locale, + weekNumberCalculation: weekNumberCalculation, + firstDay: firstDay, + weekLabel: weekLabel, + cmdFormatter: cmdFormatter + }); + } + function buildTheme(calendarOptions) { + var themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme; + return new themeClass(calendarOptions); + } + function buildDelayedRerender(wait) { + var func = this.tryRerender.bind(this); + if (wait != null) { + func = debounce(func, wait); + } + return func; + } + function buildEventUiBySource(eventSources) { + return mapHash(eventSources, function (eventSource) { + return eventSource.ui; + }); + } + function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) { + var eventUiBases = { '': eventUiSingleBase }; + for (var defId in eventDefs) { + var def = eventDefs[defId]; + if (def.sourceId && eventUiBySource[def.sourceId]) { + eventUiBases[defId] = eventUiBySource[def.sourceId]; + } + } + return eventUiBases; + } + + var View = /** @class */ (function (_super) { + __extends(View, _super); + function View(viewSpec, parentEl) { + var _this = _super.call(this, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })) || this; + _this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap); + _this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]); + _this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]); + _this.renderEventsMem = memoizeRendering(_this.renderEvents, _this.unrenderEvents, [_this.renderDatesMem]); + _this.renderEventSelectionMem = memoizeRendering(_this.renderEventSelectionWrap, _this.unrenderEventSelectionWrap, [_this.renderEventsMem]); + _this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]); + _this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]); + _this.viewSpec = viewSpec; + _this.type = viewSpec.type; + parentEl.appendChild(_this.el); + _this.initialize(); + return _this; + } + View.prototype.initialize = function () { + }; + Object.defineProperty(View.prototype, "activeStart", { + // Date Setting/Unsetting + // ----------------------------------------------------------------------------------------------------------------- + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(View.prototype, "activeEnd", { + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(View.prototype, "currentStart", { + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(View.prototype, "currentEnd", { + get: function () { + return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end); + }, + enumerable: true, + configurable: true + }); + // General Rendering + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.render = function (props, context) { + this.renderDatesMem(props.dateProfile); + this.renderBusinessHoursMem(props.businessHours); + this.renderDateSelectionMem(props.dateSelection); + this.renderEventsMem(props.eventStore); + this.renderEventSelectionMem(props.eventSelection); + this.renderEventDragMem(props.eventDrag); + this.renderEventResizeMem(props.eventResize); + }; + View.prototype.beforeUpdate = function () { + this.addScroll(this.queryScroll()); + }; + View.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderDatesMem.unrender(); // should unrender everything else + }; + // Sizing + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.updateSize = function (isResize, viewHeight, isAuto) { + var calendar = this.context.calendar; + if (isResize) { + this.addScroll(this.queryScroll()); // NOTE: same code as in beforeUpdate + } + if (isResize || // HACKS... + calendar.isViewUpdated || + calendar.isDatesUpdated || + calendar.isEventsUpdated) { + // sort of the catch-all sizing + // anything that might cause dimension changes + this.updateBaseSize(isResize, viewHeight, isAuto); + } + // NOTE: popScroll is called by CalendarComponent + }; + View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) { + }; + // Date Rendering + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderDatesWrap = function (dateProfile) { + this.renderDates(dateProfile); + this.addScroll({ + duration: createDuration(this.context.options.scrollTime) + }); + }; + View.prototype.unrenderDatesWrap = function () { + this.stopNowIndicator(); + this.unrenderDates(); + }; + View.prototype.renderDates = function (dateProfile) { }; + View.prototype.unrenderDates = function () { }; + // Business Hours + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderBusinessHours = function (businessHours) { }; + View.prototype.unrenderBusinessHours = function () { }; + // Date Selection + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderDateSelectionWrap = function (selection) { + if (selection) { + this.renderDateSelection(selection); + } + }; + View.prototype.unrenderDateSelectionWrap = function (selection) { + if (selection) { + this.unrenderDateSelection(selection); + } + }; + View.prototype.renderDateSelection = function (selection) { }; + View.prototype.unrenderDateSelection = function (selection) { }; + // Event Rendering + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEvents = function (eventStore) { }; + View.prototype.unrenderEvents = function () { }; + // util for subclasses + View.prototype.sliceEvents = function (eventStore, allDay) { + var props = this.props; + return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.context.nextDayThreshold : null).fg; + }; + // Event Selection + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEventSelectionWrap = function (instanceId) { + if (instanceId) { + this.renderEventSelection(instanceId); + } + }; + View.prototype.unrenderEventSelectionWrap = function (instanceId) { + if (instanceId) { + this.unrenderEventSelection(instanceId); + } + }; + View.prototype.renderEventSelection = function (instanceId) { }; + View.prototype.unrenderEventSelection = function (instanceId) { }; + // Event Drag + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEventDragWrap = function (state) { + if (state) { + this.renderEventDrag(state); + } + }; + View.prototype.unrenderEventDragWrap = function (state) { + if (state) { + this.unrenderEventDrag(state); + } + }; + View.prototype.renderEventDrag = function (state) { }; + View.prototype.unrenderEventDrag = function (state) { }; + // Event Resize + // ----------------------------------------------------------------------------------------------------------------- + View.prototype.renderEventResizeWrap = function (state) { + if (state) { + this.renderEventResize(state); + } + }; + View.prototype.unrenderEventResizeWrap = function (state) { + if (state) { + this.unrenderEventResize(state); + } + }; + View.prototype.renderEventResize = function (state) { }; + View.prototype.unrenderEventResize = function (state) { }; + /* Now Indicator + ------------------------------------------------------------------------------------------------------------------*/ + // Immediately render the current time indicator and begins re-rendering it at an interval, + // which is defined by this.getNowIndicatorUnit(). + // TODO: somehow do this for the current whole day's background too + // USAGE: must be called manually from subclasses' render methods! don't need to call stopNowIndicator tho + View.prototype.startNowIndicator = function (dateProfile, dateProfileGenerator) { + var _this = this; + var _a = this.context, calendar = _a.calendar, dateEnv = _a.dateEnv, options = _a.options; + var unit; + var update; + var delay; // ms wait value + if (options.nowIndicator && !this.initialNowDate) { + unit = this.getNowIndicatorUnit(dateProfile, dateProfileGenerator); + if (unit) { + update = this.updateNowIndicator.bind(this); + this.initialNowDate = calendar.getNow(); + this.initialNowQueriedMs = new Date().valueOf(); + // wait until the beginning of the next interval + delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf(); + // TODO: maybe always use setTimeout, waiting until start of next unit + this.nowIndicatorTimeoutID = setTimeout(function () { + _this.nowIndicatorTimeoutID = null; + update(); + if (unit === 'second') { + delay = 1000; // every second + } + else { + delay = 1000 * 60; // otherwise, every minute + } + _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval + }, delay); + } + // rendering will be initiated in updateSize + } + }; + // rerenders the now indicator, computing the new current time from the amount of time that has passed + // since the initial getNow call. + View.prototype.updateNowIndicator = function () { + if (this.props.dateProfile && // a way to determine if dates were rendered yet + this.initialNowDate // activated before? + ) { + this.unrenderNowIndicator(); // won't unrender if unnecessary + this.renderNowIndicator(addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs)); + this.isNowIndicatorRendered = true; + } + }; + // Immediately unrenders the view's current time indicator and stops any re-rendering timers. + // Won't cause side effects if indicator isn't rendered. + View.prototype.stopNowIndicator = function () { + if (this.nowIndicatorTimeoutID) { + clearTimeout(this.nowIndicatorTimeoutID); + this.nowIndicatorTimeoutID = null; + } + if (this.nowIndicatorIntervalID) { + clearInterval(this.nowIndicatorIntervalID); + this.nowIndicatorIntervalID = null; + } + if (this.isNowIndicatorRendered) { + this.unrenderNowIndicator(); + this.isNowIndicatorRendered = false; + } + }; + View.prototype.getNowIndicatorUnit = function (dateProfile, dateProfileGenerator) { + // subclasses should implement + }; + // Renders a current time indicator at the given datetime + View.prototype.renderNowIndicator = function (date) { + // SUBCLASSES MUST PASS TO CHILDREN! + }; + // Undoes the rendering actions from renderNowIndicator + View.prototype.unrenderNowIndicator = function () { + // SUBCLASSES MUST PASS TO CHILDREN! + }; + /* Scroller + ------------------------------------------------------------------------------------------------------------------*/ + View.prototype.addScroll = function (scroll, isForced) { + if (isForced) { + scroll.isForced = isForced; + } + __assign(this.queuedScroll || (this.queuedScroll = {}), scroll); + }; + View.prototype.popScroll = function (isResize) { + this.applyQueuedScroll(isResize); + this.queuedScroll = null; + }; + View.prototype.applyQueuedScroll = function (isResize) { + if (this.queuedScroll) { + this.applyScroll(this.queuedScroll, isResize); + } + }; + View.prototype.queryScroll = function () { + var scroll = {}; + if (this.props.dateProfile) { // dates rendered yet? + __assign(scroll, this.queryDateScroll()); + } + return scroll; + }; + View.prototype.applyScroll = function (scroll, isResize) { + var duration = scroll.duration, isForced = scroll.isForced; + if (duration != null && !isForced) { + delete scroll.duration; + if (this.props.dateProfile) { // dates rendered yet? + __assign(scroll, this.computeDateScroll(duration)); + } + } + if (this.props.dateProfile) { // dates rendered yet? + this.applyDateScroll(scroll); + } + }; + View.prototype.computeDateScroll = function (duration) { + return {}; // subclasses must implement + }; + View.prototype.queryDateScroll = function () { + return {}; // subclasses must implement + }; + View.prototype.applyDateScroll = function (scroll) { + // subclasses must implement + }; + // for API + View.prototype.scrollToDuration = function (duration) { + this.applyScroll({ duration: duration }, false); + }; + return View; + }(DateComponent)); + EmitterMixin.mixInto(View); + View.prototype.usesMinMaxTime = false; + View.prototype.dateProfileGeneratorClass = DateProfileGenerator; + + var FgEventRenderer = /** @class */ (function () { + function FgEventRenderer() { + this.segs = []; + this.isSizeDirty = false; + } + FgEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) { + this.context = context; + this.rangeUpdated(); // called too frequently :( + // render an `.el` on each seg + // returns a subset of the segs. segs that were actually rendered + segs = this.renderSegEls(segs, mirrorInfo); + this.segs = segs; + this.attachSegs(segs, mirrorInfo); + this.isSizeDirty = true; + triggerRenderedSegs(this.context, this.segs, Boolean(mirrorInfo)); + }; + FgEventRenderer.prototype.unrender = function (context, _segs, mirrorInfo) { + triggerWillRemoveSegs(this.context, this.segs, Boolean(mirrorInfo)); + this.detachSegs(this.segs); + this.segs = []; + }; + // Updates values that rely on options and also relate to range + FgEventRenderer.prototype.rangeUpdated = function () { + var options = this.context.options; + var displayEventTime; + var displayEventEnd; + this.eventTimeFormat = createFormatter(options.eventTimeFormat || this.computeEventTimeFormat(), options.defaultRangeSeparator); + displayEventTime = options.displayEventTime; + if (displayEventTime == null) { + displayEventTime = this.computeDisplayEventTime(); // might be based off of range + } + displayEventEnd = options.displayEventEnd; + if (displayEventEnd == null) { + displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range + } + this.displayEventTime = displayEventTime; + this.displayEventEnd = displayEventEnd; + }; + // Renders and assigns an `el` property for each foreground event segment. + // Only returns segments that successfully rendered. + FgEventRenderer.prototype.renderSegEls = function (segs, mirrorInfo) { + var html = ''; + var i; + if (segs.length) { // don't build an empty html string + // build a large concatenation of event segment HTML + for (i = 0; i < segs.length; i++) { + html += this.renderSegHtml(segs[i], mirrorInfo); + } + // Grab individual elements from the combined HTML string. Use each as the default rendering. + // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false. + htmlToElements(html).forEach(function (el, i) { + var seg = segs[i]; + if (el) { + seg.el = el; + } + }); + segs = filterSegsViaEls(this.context, segs, Boolean(mirrorInfo)); + } + return segs; + }; + // Generic utility for generating the HTML classNames for an event segment's element + FgEventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable, mirrorInfo) { + var classes = [ + 'fc-event', + seg.isStart ? 'fc-start' : 'fc-not-start', + seg.isEnd ? 'fc-end' : 'fc-not-end' + ].concat(seg.eventRange.ui.classNames); + if (isDraggable) { + classes.push('fc-draggable'); + } + if (isResizable) { + classes.push('fc-resizable'); + } + if (mirrorInfo) { + classes.push('fc-mirror'); + if (mirrorInfo.isDragging) { + classes.push('fc-dragging'); + } + if (mirrorInfo.isResizing) { + classes.push('fc-resizing'); + } + } + return classes; + }; + // Compute the text that should be displayed on an event's element. + // `range` can be the Event object itself, or something range-like, with at least a `start`. + // If event times are disabled, or the event has no time, will return a blank string. + // If not specified, formatter will default to the eventTimeFormat setting, + // and displayEnd will default to the displayEventEnd setting. + FgEventRenderer.prototype.getTimeText = function (eventRange, formatter, displayEnd) { + var def = eventRange.def, instance = eventRange.instance; + return this._getTimeText(instance.range.start, def.hasEnd ? instance.range.end : null, def.allDay, formatter, displayEnd, instance.forcedStartTzo, instance.forcedEndTzo); + }; + FgEventRenderer.prototype._getTimeText = function (start, end, allDay, formatter, displayEnd, forcedStartTzo, forcedEndTzo) { + var dateEnv = this.context.dateEnv; + if (formatter == null) { + formatter = this.eventTimeFormat; + } + if (displayEnd == null) { + displayEnd = this.displayEventEnd; + } + if (this.displayEventTime && !allDay) { + if (displayEnd && end) { + return dateEnv.formatRange(start, end, formatter, { + forcedStartTzo: forcedStartTzo, + forcedEndTzo: forcedEndTzo + }); + } + else { + return dateEnv.format(start, formatter, { + forcedTzo: forcedStartTzo + }); + } + } + return ''; + }; + FgEventRenderer.prototype.computeEventTimeFormat = function () { + return { + hour: 'numeric', + minute: '2-digit', + omitZeroMinute: true + }; + }; + FgEventRenderer.prototype.computeDisplayEventTime = function () { + return true; + }; + FgEventRenderer.prototype.computeDisplayEventEnd = function () { + return true; + }; + // Utility for generating event skin-related CSS properties + FgEventRenderer.prototype.getSkinCss = function (ui) { + return { + 'background-color': ui.backgroundColor, + 'border-color': ui.borderColor, + color: ui.textColor + }; + }; + FgEventRenderer.prototype.sortEventSegs = function (segs) { + var specs = this.context.eventOrderSpecs; + var objs = segs.map(buildSegCompareObj); + objs.sort(function (obj0, obj1) { + return compareByFieldSpecs(obj0, obj1, specs); + }); + return objs.map(function (c) { + return c._seg; + }); + }; + FgEventRenderer.prototype.computeSizes = function (force) { + if (force || this.isSizeDirty) { + this.computeSegSizes(this.segs); + } + }; + FgEventRenderer.prototype.assignSizes = function (force) { + if (force || this.isSizeDirty) { + this.assignSegSizes(this.segs); + this.isSizeDirty = false; + } + }; + FgEventRenderer.prototype.computeSegSizes = function (segs) { + }; + FgEventRenderer.prototype.assignSegSizes = function (segs) { + }; + // Manipulation on rendered segs + FgEventRenderer.prototype.hideByHash = function (hash) { + if (hash) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + if (hash[seg.eventRange.instance.instanceId]) { + seg.el.style.visibility = 'hidden'; + } + } + } + }; + FgEventRenderer.prototype.showByHash = function (hash) { + if (hash) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + if (hash[seg.eventRange.instance.instanceId]) { + seg.el.style.visibility = ''; + } + } + } + }; + FgEventRenderer.prototype.selectByInstanceId = function (instanceId) { + if (instanceId) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + var eventInstance = seg.eventRange.instance; + if (eventInstance && eventInstance.instanceId === instanceId && + seg.el // necessary? + ) { + seg.el.classList.add('fc-selected'); + } + } + } + }; + FgEventRenderer.prototype.unselectByInstanceId = function (instanceId) { + if (instanceId) { + for (var _i = 0, _a = this.segs; _i < _a.length; _i++) { + var seg = _a[_i]; + if (seg.el) { // necessary? + seg.el.classList.remove('fc-selected'); + } + } + } + }; + return FgEventRenderer; + }()); + // returns a object with all primitive props that can be compared + function buildSegCompareObj(seg) { + var eventDef = seg.eventRange.def; + var range = seg.eventRange.instance.range; + var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events + var end = range.end ? range.end.valueOf() : 0; // " + return __assign({}, eventDef.extendedProps, eventDef, { id: eventDef.publicId, start: start, + end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg // for later retrieval + }); + } + + /* + TODO: when refactoring this class, make a new FillRenderer instance for each `type` + */ + var FillRenderer = /** @class */ (function () { + function FillRenderer() { + this.fillSegTag = 'div'; + this.dirtySizeFlags = {}; + this.containerElsByType = {}; + this.segsByType = {}; + } + FillRenderer.prototype.getSegsByType = function (type) { + return this.segsByType[type] || []; + }; + FillRenderer.prototype.renderSegs = function (type, context, segs) { + var _a; + this.context = context; + var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs + var containerEls = this.attachSegs(type, renderedSegs); + if (containerEls) { + (_a = (this.containerElsByType[type] || (this.containerElsByType[type] = []))).push.apply(_a, containerEls); + } + this.segsByType[type] = renderedSegs; + if (type === 'bgEvent') { + triggerRenderedSegs(context, renderedSegs, false); // isMirror=false + } + this.dirtySizeFlags[type] = true; + }; + // Unrenders a specific type of fill that is currently rendered on the grid + FillRenderer.prototype.unrender = function (type, context) { + var segs = this.segsByType[type]; + if (segs) { + if (type === 'bgEvent') { + triggerWillRemoveSegs(context, segs, false); // isMirror=false + } + this.detachSegs(type, segs); + } + }; + // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types. + // Only returns segments that successfully rendered. + FillRenderer.prototype.renderSegEls = function (type, segs) { + var _this = this; + var html = ''; + var i; + if (segs.length) { + // build a large concatenation of segment HTML + for (i = 0; i < segs.length; i++) { + html += this.renderSegHtml(type, segs[i]); + } + // Grab individual elements from the combined HTML string. Use each as the default rendering. + // Then, compute the 'el' for each segment. + htmlToElements(html).forEach(function (el, i) { + var seg = segs[i]; + if (el) { + seg.el = el; + } + }); + if (type === 'bgEvent') { + segs = filterSegsViaEls(this.context, segs, false // isMirror. background events can never be mirror elements + ); + } + // correct element type? (would be bad if a non-TD were inserted into a table for example) + segs = segs.filter(function (seg) { + return elementMatches(seg.el, _this.fillSegTag); + }); + } + return segs; + }; + // Builds the HTML needed for one fill segment. Generic enough to work with different types. + FillRenderer.prototype.renderSegHtml = function (type, seg) { + var css = null; + var classNames = []; + if (type !== 'highlight' && type !== 'businessHours') { + css = { + 'background-color': seg.eventRange.ui.backgroundColor + }; + } + if (type !== 'highlight') { + classNames = classNames.concat(seg.eventRange.ui.classNames); + } + if (type === 'businessHours') { + classNames.push('fc-bgevent'); + } + else { + classNames.push('fc-' + type.toLowerCase()); + } + return '<' + this.fillSegTag + + (classNames.length ? ' class="' + classNames.join(' ') + '"' : '') + + (css ? ' style="' + cssToStr(css) + '"' : '') + + '>'; + }; + FillRenderer.prototype.detachSegs = function (type, segs) { + var containerEls = this.containerElsByType[type]; + if (containerEls) { + containerEls.forEach(removeElement); + delete this.containerElsByType[type]; + } + }; + FillRenderer.prototype.computeSizes = function (force) { + for (var type in this.segsByType) { + if (force || this.dirtySizeFlags[type]) { + this.computeSegSizes(this.segsByType[type]); + } + } + }; + FillRenderer.prototype.assignSizes = function (force) { + for (var type in this.segsByType) { + if (force || this.dirtySizeFlags[type]) { + this.assignSegSizes(this.segsByType[type]); + } + } + this.dirtySizeFlags = {}; + }; + FillRenderer.prototype.computeSegSizes = function (segs) { + }; + FillRenderer.prototype.assignSegSizes = function (segs) { + }; + return FillRenderer; + }()); + + var NamedTimeZoneImpl = /** @class */ (function () { + function NamedTimeZoneImpl(timeZoneName) { + this.timeZoneName = timeZoneName; + } + return NamedTimeZoneImpl; + }()); + + /* + An abstraction for a dragging interaction originating on an event. + Does higher-level things than PointerDragger, such as possibly: + - a "mirror" that moves with the pointer + - a minimum number of pixels or other criteria for a true drag to begin + + subclasses must emit: + - pointerdown + - dragstart + - dragmove + - pointerup + - dragend + */ + var ElementDragging = /** @class */ (function () { + function ElementDragging(el) { + this.emitter = new EmitterMixin(); + } + ElementDragging.prototype.destroy = function () { + }; + ElementDragging.prototype.setMirrorIsVisible = function (bool) { + // optional if subclass doesn't want to support a mirror + }; + ElementDragging.prototype.setMirrorNeedsRevert = function (bool) { + // optional if subclass doesn't want to support a mirror + }; + ElementDragging.prototype.setAutoScrollEnabled = function (bool) { + // optional + }; + return ElementDragging; + }()); + + function formatDate(dateInput, settings) { + if (settings === void 0) { settings = {}; } + var dateEnv = buildDateEnv$1(settings); + var formatter = createFormatter(settings); + var dateMeta = dateEnv.createMarkerMeta(dateInput); + if (!dateMeta) { // TODO: warning? + return ''; + } + return dateEnv.format(dateMeta.marker, formatter, { + forcedTzo: dateMeta.forcedTzo + }); + } + function formatRange(startInput, endInput, settings // mixture of env and formatter settings + ) { + var dateEnv = buildDateEnv$1(typeof settings === 'object' && settings ? settings : {}); // pass in if non-null object + var formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator); + var startMeta = dateEnv.createMarkerMeta(startInput); + var endMeta = dateEnv.createMarkerMeta(endInput); + if (!startMeta || !endMeta) { // TODO: warning? + return ''; + } + return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, { + forcedStartTzo: startMeta.forcedTzo, + forcedEndTzo: endMeta.forcedTzo, + isEndExclusive: settings.isEndExclusive + }); + } + // TODO: more DRY and optimized + function buildDateEnv$1(settings) { + var locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map); // TODO: don't hardcode 'en' everywhere + // ensure required settings + settings = __assign({ timeZone: globalDefaults.timeZone, calendarSystem: 'gregory' }, settings, { locale: locale }); + return new DateEnv(settings); + } + + var DRAG_META_PROPS = { + startTime: createDuration, + duration: createDuration, + create: Boolean, + sourceId: String + }; + var DRAG_META_DEFAULTS = { + create: true + }; + function parseDragMeta(raw) { + var leftoverProps = {}; + var refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps); + refined.leftoverProps = leftoverProps; + return refined; + } + + // Computes a default column header formatting string if `colFormat` is not explicitly defined + function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) { + // if more than one week row, or if there are a lot of columns with not much space, + // put just the day numbers will be in each cell + if (!datesRepDistinctDays || dayCnt > 10) { + return { weekday: 'short' }; // "Sat" + } + else if (dayCnt > 1) { + return { weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }; // "Sat 11/12" + } + else { + return { weekday: 'long' }; // "Saturday" + } + } + function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) { + var dateEnv = context.dateEnv, theme = context.theme, options = context.options; + var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow. + var classNames = [ + 'fc-day-header', + theme.getClass('widgetHeader') + ]; + var innerHtml; + if (typeof options.columnHeaderHtml === 'function') { + innerHtml = options.columnHeaderHtml(dateEnv.toDate(dateMarker)); + } + else if (typeof options.columnHeaderText === 'function') { + innerHtml = htmlEscape(options.columnHeaderText(dateEnv.toDate(dateMarker))); + } + else { + innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat)); + } + // if only one row of days, the classNames on the header can represent the specific days beneath + if (datesRepDistinctDays) { + classNames = classNames.concat( + // includes the day-of-week class + // noThemeHighlight=true (don't highlight the header) + getDayClasses(dateMarker, dateProfile, context, true)); + } + else { + classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]); // only add the day-of-week class + } + return '' + + ' 1 ? + ' colspan="' + colspan + '"' : + '') + + (otherAttrs ? + ' ' + otherAttrs : + '') + + '>' + + (isDateValid ? + // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff) + buildGotoAnchorHtml(options, dateEnv, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) : + // if not valid, display text, but no link + innerHtml) + + ''; + } + + var DayHeader = /** @class */ (function (_super) { + __extends(DayHeader, _super); + function DayHeader(parentEl) { + var _this = _super.call(this) || this; + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + _this.parentEl = parentEl; + return _this; + } + DayHeader.prototype.render = function (props, context) { + var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays; + var parts = []; + this.renderSkeleton(context); + if (props.renderIntroHtml) { + parts.push(props.renderIntroHtml()); + } + var colHeadFormat = createFormatter(context.options.columnHeaderFormat || + computeFallbackHeaderFormat(datesRepDistinctDays, dates.length)); + for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) { + var date = dates_1[_i]; + parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, context)); + } + if (context.isRtl) { + parts.reverse(); + } + this.thead.innerHTML = '' + parts.join('') + ''; + }; + DayHeader.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + }; + DayHeader.prototype._renderSkeleton = function (context) { + var theme = context.theme; + var parentEl = this.parentEl; + parentEl.innerHTML = ''; // because might be nbsp + parentEl.appendChild(this.el = htmlToElement('
' + + '' + + '' + + '
' + + '
')); + this.thead = this.el.querySelector('thead'); + }; + DayHeader.prototype._unrenderSkeleton = function () { + removeElement(this.el); + }; + return DayHeader; + }(Component)); + + var DaySeries = /** @class */ (function () { + function DaySeries(range, dateProfileGenerator) { + var date = range.start; + var end = range.end; + var indices = []; + var dates = []; + var dayIndex = -1; + while (date < end) { // loop each day from start to end + if (dateProfileGenerator.isHiddenDay(date)) { + indices.push(dayIndex + 0.5); // mark that it's between indices + } + else { + dayIndex++; + indices.push(dayIndex); + dates.push(date); + } + date = addDays(date, 1); + } + this.dates = dates; + this.indices = indices; + this.cnt = dates.length; + } + DaySeries.prototype.sliceRange = function (range) { + var firstIndex = this.getDateDayIndex(range.start); // inclusive first index + var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index + var clippedFirstIndex = Math.max(0, firstIndex); + var clippedLastIndex = Math.min(this.cnt - 1, lastIndex); + // deal with in-between indices + clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell + clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell + if (clippedFirstIndex <= clippedLastIndex) { + return { + firstIndex: clippedFirstIndex, + lastIndex: clippedLastIndex, + isStart: firstIndex === clippedFirstIndex, + isEnd: lastIndex === clippedLastIndex + }; + } + else { + return null; + } + }; + // Given a date, returns its chronolocial cell-index from the first cell of the grid. + // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets. + // If before the first offset, returns a negative number. + // If after the last offset, returns an offset past the last cell offset. + // Only works for *start* dates of cells. Will not work for exclusive end dates for cells. + DaySeries.prototype.getDateDayIndex = function (date) { + var indices = this.indices; + var dayOffset = Math.floor(diffDays(this.dates[0], date)); + if (dayOffset < 0) { + return indices[0] - 1; + } + else if (dayOffset >= indices.length) { + return indices[indices.length - 1] + 1; + } + else { + return indices[dayOffset]; + } + }; + return DaySeries; + }()); + + var DayTable = /** @class */ (function () { + function DayTable(daySeries, breakOnWeeks) { + var dates = daySeries.dates; + var daysPerRow; + var firstDay; + var rowCnt; + if (breakOnWeeks) { + // count columns until the day-of-week repeats + firstDay = dates[0].getUTCDay(); + for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) { + if (dates[daysPerRow].getUTCDay() === firstDay) { + break; + } + } + rowCnt = Math.ceil(dates.length / daysPerRow); + } + else { + rowCnt = 1; + daysPerRow = dates.length; + } + this.rowCnt = rowCnt; + this.colCnt = daysPerRow; + this.daySeries = daySeries; + this.cells = this.buildCells(); + this.headerDates = this.buildHeaderDates(); + } + DayTable.prototype.buildCells = function () { + var rows = []; + for (var row = 0; row < this.rowCnt; row++) { + var cells = []; + for (var col = 0; col < this.colCnt; col++) { + cells.push(this.buildCell(row, col)); + } + rows.push(cells); + } + return rows; + }; + DayTable.prototype.buildCell = function (row, col) { + return { + date: this.daySeries.dates[row * this.colCnt + col] + }; + }; + DayTable.prototype.buildHeaderDates = function () { + var dates = []; + for (var col = 0; col < this.colCnt; col++) { + dates.push(this.cells[0][col].date); + } + return dates; + }; + DayTable.prototype.sliceRange = function (range) { + var colCnt = this.colCnt; + var seriesSeg = this.daySeries.sliceRange(range); + var segs = []; + if (seriesSeg) { + var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex; + var index = firstIndex; + while (index <= lastIndex) { + var row = Math.floor(index / colCnt); + var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1); + segs.push({ + row: row, + firstCol: index % colCnt, + lastCol: (nextIndex - 1) % colCnt, + isStart: seriesSeg.isStart && index === firstIndex, + isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex + }); + index = nextIndex; + } + } + return segs; + }; + return DayTable; + }()); + + var Slicer = /** @class */ (function () { + function Slicer() { + this.sliceBusinessHours = memoize(this._sliceBusinessHours); + this.sliceDateSelection = memoize(this._sliceDateSpan); + this.sliceEventStore = memoize(this._sliceEventStore); + this.sliceEventDrag = memoize(this._sliceInteraction); + this.sliceEventResize = memoize(this._sliceInteraction); + } + Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, calendar, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + var eventUiBases = props.eventUiBases; + var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)); + return { + dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)), + businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, calendar, component].concat(extraArgs)), + fgEventSegs: eventSegs.fg, + bgEventSegs: eventSegs.bg, + eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)), + eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)), + eventSelection: props.eventSelection + }; // TODO: give interactionSegs? + }; + Slicer.prototype.sliceNowDate = function (// does not memoize + date, component) { + var extraArgs = []; + for (var _i = 2; _i < arguments.length; _i++) { + extraArgs[_i - 2] = arguments[_i]; + } + return this._sliceDateSpan.apply(this, [{ range: { start: date, end: addMs(date, 1) }, allDay: false }, + {}, + component].concat(extraArgs)); + }; + Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, calendar, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + if (!businessHours) { + return []; + } + return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), calendar), + {}, + dateProfile, + nextDayThreshold, + component].concat(extraArgs)).bg; + }; + Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + if (eventStore) { + var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold); + return { + bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs), + fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs) + }; + } + else { + return { bg: [], fg: [] }; + } + }; + Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold, component) { + var extraArgs = []; + for (var _i = 5; _i < arguments.length; _i++) { + extraArgs[_i - 5] = arguments[_i]; + } + if (!interaction) { + return null; + } + var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold); + return { + segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs), + affectedInstances: interaction.affectedEvents.instances, + isEvent: interaction.isEvent, + sourceSeg: interaction.origSeg + }; + }; + Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, component) { + var extraArgs = []; + for (var _i = 3; _i < arguments.length; _i++) { + extraArgs[_i - 3] = arguments[_i]; + } + if (!dateSpan) { + return []; + } + var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.context.calendar); + var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs)); + for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) { + var seg = segs_1[_a]; + seg.component = component; + seg.eventRange = eventRange; + } + return segs; + }; + /* + "complete" seg means it has component and eventRange + */ + Slicer.prototype.sliceEventRanges = function (eventRanges, component, // TODO: kill + extraArgs) { + var segs = []; + for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) { + var eventRange = eventRanges_1[_i]; + segs.push.apply(segs, this.sliceEventRange(eventRange, component, extraArgs)); + } + return segs; + }; + /* + "complete" seg means it has component and eventRange + */ + Slicer.prototype.sliceEventRange = function (eventRange, component, // TODO: kill + extraArgs) { + var segs = this.sliceRange.apply(this, [eventRange.range].concat(extraArgs)); + for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) { + var seg = segs_2[_i]; + seg.component = component; + seg.eventRange = eventRange; + seg.isStart = eventRange.isStart && seg.isStart; + seg.isEnd = eventRange.isEnd && seg.isEnd; + } + return segs; + }; + return Slicer; + }()); + /* + for incorporating minTime/maxTime if appropriate + TODO: should be part of DateProfile! + TimelineDateProfile already does this btw + */ + function computeActiveRange(dateProfile, isComponentAllDay) { + var range = dateProfile.activeRange; + if (isComponentAllDay) { + return range; + } + return { + start: addMs(range.start, dateProfile.minTime.milliseconds), + end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day + }; + } + + // exports + // -------------------------------------------------------------------------------------------------- + var version = '4.4.0'; + + exports.Calendar = Calendar; + exports.Component = Component; + exports.ComponentContext = ComponentContext; + exports.DateComponent = DateComponent; + exports.DateEnv = DateEnv; + exports.DateProfileGenerator = DateProfileGenerator; + exports.DayHeader = DayHeader; + exports.DaySeries = DaySeries; + exports.DayTable = DayTable; + exports.ElementDragging = ElementDragging; + exports.ElementScrollController = ElementScrollController; + exports.EmitterMixin = EmitterMixin; + exports.EventApi = EventApi; + exports.FgEventRenderer = FgEventRenderer; + exports.FillRenderer = FillRenderer; + exports.Interaction = Interaction; + exports.Mixin = Mixin; + exports.NamedTimeZoneImpl = NamedTimeZoneImpl; + exports.PositionCache = PositionCache; + exports.ScrollComponent = ScrollComponent; + exports.ScrollController = ScrollController; + exports.Slicer = Slicer; + exports.Splitter = Splitter; + exports.Theme = Theme; + exports.View = View; + exports.WindowScrollController = WindowScrollController; + exports.addDays = addDays; + exports.addDurations = addDurations; + exports.addMs = addMs; + exports.addWeeks = addWeeks; + exports.allowContextMenu = allowContextMenu; + exports.allowSelection = allowSelection; + exports.appendToElement = appendToElement; + exports.applyAll = applyAll; + exports.applyMutationToEventStore = applyMutationToEventStore; + exports.applyStyle = applyStyle; + exports.applyStyleProp = applyStyleProp; + exports.asRoughMinutes = asRoughMinutes; + exports.asRoughMs = asRoughMs; + exports.asRoughSeconds = asRoughSeconds; + exports.buildGotoAnchorHtml = buildGotoAnchorHtml; + exports.buildSegCompareObj = buildSegCompareObj; + exports.capitaliseFirstLetter = capitaliseFirstLetter; + exports.combineEventUis = combineEventUis; + exports.compareByFieldSpec = compareByFieldSpec; + exports.compareByFieldSpecs = compareByFieldSpecs; + exports.compareNumbers = compareNumbers; + exports.compensateScroll = compensateScroll; + exports.computeClippingRect = computeClippingRect; + exports.computeEdges = computeEdges; + exports.computeEventDraggable = computeEventDraggable; + exports.computeEventEndResizable = computeEventEndResizable; + exports.computeEventStartResizable = computeEventStartResizable; + exports.computeFallbackHeaderFormat = computeFallbackHeaderFormat; + exports.computeHeightAndMargins = computeHeightAndMargins; + exports.computeInnerRect = computeInnerRect; + exports.computeRect = computeRect; + exports.computeVisibleDayRange = computeVisibleDayRange; + exports.config = config; + exports.constrainPoint = constrainPoint; + exports.createDuration = createDuration; + exports.createElement = createElement; + exports.createEmptyEventStore = createEmptyEventStore; + exports.createEventInstance = createEventInstance; + exports.createFormatter = createFormatter; + exports.createPlugin = createPlugin; + exports.cssToStr = cssToStr; + exports.debounce = debounce; + exports.diffDates = diffDates; + exports.diffDayAndTime = diffDayAndTime; + exports.diffDays = diffDays; + exports.diffPoints = diffPoints; + exports.diffWeeks = diffWeeks; + exports.diffWholeDays = diffWholeDays; + exports.diffWholeWeeks = diffWholeWeeks; + exports.disableCursor = disableCursor; + exports.distributeHeight = distributeHeight; + exports.elementClosest = elementClosest; + exports.elementMatches = elementMatches; + exports.enableCursor = enableCursor; + exports.eventTupleToStore = eventTupleToStore; + exports.filterEventStoreDefs = filterEventStoreDefs; + exports.filterHash = filterHash; + exports.findChildren = findChildren; + exports.findElements = findElements; + exports.flexibleCompare = flexibleCompare; + exports.forceClassName = forceClassName; + exports.formatDate = formatDate; + exports.formatIsoTimeString = formatIsoTimeString; + exports.formatRange = formatRange; + exports.getAllDayHtml = getAllDayHtml; + exports.getClippingParents = getClippingParents; + exports.getDayClasses = getDayClasses; + exports.getElSeg = getElSeg; + exports.getRectCenter = getRectCenter; + exports.getRelevantEvents = getRelevantEvents; + exports.globalDefaults = globalDefaults; + exports.greatestDurationDenominator = greatestDurationDenominator; + exports.hasBgRendering = hasBgRendering; + exports.htmlEscape = htmlEscape; + exports.htmlToElement = htmlToElement; + exports.insertAfterElement = insertAfterElement; + exports.interactionSettingsStore = interactionSettingsStore; + exports.interactionSettingsToStore = interactionSettingsToStore; + exports.intersectRanges = intersectRanges; + exports.intersectRects = intersectRects; + exports.isArraysEqual = isArraysEqual; + exports.isDateSpansEqual = isDateSpansEqual; + exports.isInt = isInt; + exports.isInteractionValid = isInteractionValid; + exports.isMultiDayRange = isMultiDayRange; + exports.isPropsEqual = isPropsEqual; + exports.isPropsValid = isPropsValid; + exports.isSingleDay = isSingleDay; + exports.isValidDate = isValidDate; + exports.listenBySelector = listenBySelector; + exports.mapHash = mapHash; + exports.matchCellWidths = matchCellWidths; + exports.memoize = memoize; + exports.memoizeOutput = memoizeOutput; + exports.memoizeRendering = memoizeRendering; + exports.mergeEventStores = mergeEventStores; + exports.multiplyDuration = multiplyDuration; + exports.padStart = padStart; + exports.parseBusinessHours = parseBusinessHours; + exports.parseDragMeta = parseDragMeta; + exports.parseEventDef = parseEventDef; + exports.parseFieldSpecs = parseFieldSpecs; + exports.parseMarker = parse; + exports.pointInsideRect = pointInsideRect; + exports.prependToElement = prependToElement; + exports.preventContextMenu = preventContextMenu; + exports.preventDefault = preventDefault; + exports.preventSelection = preventSelection; + exports.processScopedUiProps = processScopedUiProps; + exports.rangeContainsMarker = rangeContainsMarker; + exports.rangeContainsRange = rangeContainsRange; + exports.rangesEqual = rangesEqual; + exports.rangesIntersect = rangesIntersect; + exports.refineProps = refineProps; + exports.removeElement = removeElement; + exports.removeExact = removeExact; + exports.renderDateCell = renderDateCell; + exports.requestJson = requestJson; + exports.sliceEventStore = sliceEventStore; + exports.startOfDay = startOfDay; + exports.subtractInnerElHeight = subtractInnerElHeight; + exports.translateRect = translateRect; + exports.uncompensateScroll = uncompensateScroll; + exports.undistributeHeight = undistributeHeight; + exports.unpromisify = unpromisify; + exports.version = version; + exports.whenTransitionDone = whenTransitionDone; + exports.wholeDivideDurations = wholeDivideDurations; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/main/resources/static/packages/core/main.js.map b/src/main/resources/static/packages/core/main.js.map new file mode 100644 index 00000000..4b7a6a17 --- /dev/null +++ b/src/main/resources/static/packages/core/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sources":["../../../tmp/tsc-output/packages/core/src/util/dom-manip.js","../../../tmp/tsc-output/packages/core/src/util/geom.js","../../../tmp/tsc-output/packages/core/src/util/scrollbars.js","../../../tmp/tsc-output/packages/core/src/util/dom-geom.js","../../../tmp/tsc-output/packages/core/src/util/dom-event.js","../../../tmp/tsc-output/packages/core/src/datelib/marker.js","../../../tmp/tsc-output/packages/core/src/datelib/duration.js","../../../tmp/tsc-output/packages/core/src/util/misc.js","../../../tmp/tsc-output/packages/core/src/structs/recurring-event.js","../../../tmp/tsc-output/packages/core/src/util/object.js","../../../tmp/tsc-output/packages/core/src/structs/event-store.js","../../../tmp/tsc-output/packages/core/src/datelib/date-range.js","../../../tmp/tsc-output/packages/core/src/util/array.js","../../../tmp/tsc-output/packages/core/src/util/memoize.js","../../../tmp/tsc-output/packages/core/src/datelib/formatting-native.js","../../../tmp/tsc-output/packages/core/src/datelib/formatting-cmd.js","../../../tmp/tsc-output/packages/core/src/datelib/formatting-func.js","../../../tmp/tsc-output/packages/core/src/datelib/formatting.js","../../../tmp/tsc-output/packages/core/src/api/EventSourceApi.js","../../../tmp/tsc-output/packages/core/src/api/EventApi.js","../../../tmp/tsc-output/packages/core/src/component/event-rendering.js","../../../tmp/tsc-output/packages/core/src/structs/event-mutation.js","../../../tmp/tsc-output/packages/core/src/reducers/eventStore.js","../../../tmp/tsc-output/packages/core/src/validation.js","../../../tmp/tsc-output/packages/core/src/util/html.js","../../../tmp/tsc-output/packages/core/src/component/event-ui.js","../../../tmp/tsc-output/packages/core/src/structs/event.js","../../../tmp/tsc-output/packages/core/src/structs/business-hours.js","../../../tmp/tsc-output/packages/core/src/component/memoized-rendering.js","../../../tmp/tsc-output/packages/core/src/component/event-splitting.js","../../../tmp/tsc-output/packages/core/src/component/date-rendering.js","../../../tmp/tsc-output/packages/core/src/util/promise.js","../../../tmp/tsc-output/packages/core/src/common/Mixin.js","../../../tmp/tsc-output/packages/core/src/common/EmitterMixin.js","../../../tmp/tsc-output/packages/core/src/common/PositionCache.js","../../../tmp/tsc-output/packages/core/src/common/scroll-controller.js","../../../tmp/tsc-output/packages/core/src/common/ScrollComponent.js","../../../tmp/tsc-output/packages/core/src/theme/Theme.js","../../../tmp/tsc-output/packages/core/src/component/Component.js","../../../tmp/tsc-output/packages/core/src/component/DateComponent.js","../../../tmp/tsc-output/packages/core/src/plugin-system.js","../../../tmp/tsc-output/packages/core/src/event-sources/array-event-source.js","../../../tmp/tsc-output/packages/core/src/event-sources/func-event-source.js","../../../tmp/tsc-output/packages/core/src/util/requestJson.js","../../../tmp/tsc-output/packages/core/src/event-sources/json-feed-event-source.js","../../../tmp/tsc-output/packages/core/src/structs/recurring-event-simple.js","../../../tmp/tsc-output/packages/core/src/option-change-handlers.js","../../../tmp/tsc-output/packages/core/src/options.js","../../../tmp/tsc-output/packages/core/src/datelib/locale.js","../../../tmp/tsc-output/packages/core/src/OptionsManager.js","../../../tmp/tsc-output/packages/core/src/datelib/calendar-system.js","../../../tmp/tsc-output/packages/core/src/datelib/parsing.js","../../../tmp/tsc-output/packages/core/src/datelib/env.js","../../../tmp/tsc-output/packages/core/src/structs/event-source.js","../../../tmp/tsc-output/packages/core/src/reducers/eventSources.js","../../../tmp/tsc-output/packages/core/src/DateProfileGenerator.js","../../../tmp/tsc-output/packages/core/src/reducers/main.js","../../../tmp/tsc-output/packages/core/src/structs/date-span.js","../../../tmp/tsc-output/packages/core/src/structs/view-def.js","../../../tmp/tsc-output/packages/core/src/structs/view-config.js","../../../tmp/tsc-output/packages/core/src/structs/view-spec.js","../../../tmp/tsc-output/packages/core/src/Toolbar.js","../../../tmp/tsc-output/packages/core/src/CalendarComponent.js","../../../tmp/tsc-output/packages/core/src/interactions/interaction.js","../../../tmp/tsc-output/packages/core/src/interactions/EventClicking.js","../../../tmp/tsc-output/packages/core/src/interactions/EventHovering.js","../../../tmp/tsc-output/packages/core/src/theme/StandardTheme.js","../../../tmp/tsc-output/packages/core/src/Calendar.js","../../../tmp/tsc-output/packages/core/src/View.js","../../../tmp/tsc-output/packages/core/src/component/renderers/FgEventRenderer.js","../../../tmp/tsc-output/packages/core/src/component/renderers/FillRenderer.js","../../../tmp/tsc-output/packages/core/src/datelib/timezone.js","../../../tmp/tsc-output/packages/core/src/interactions/ElementDragging.js","../../../tmp/tsc-output/packages/core/src/formatting-api.js","../../../tmp/tsc-output/packages/core/src/structs/drag-meta.js","../../../tmp/tsc-output/packages/core/src/common/table-utils.js","../../../tmp/tsc-output/packages/core/src/common/DayHeader.js","../../../tmp/tsc-output/packages/core/src/common/DaySeries.js","../../../tmp/tsc-output/packages/core/src/common/DayTable.js","../../../tmp/tsc-output/packages/core/src/common/slicing-utils.js","../../../tmp/tsc-output/packages/core/src/main.js"],"sourcesContent":["// Creating\n// ----------------------------------------------------------------------------------------------------------------\nvar elementPropHash = {\n className: true,\n colSpan: true,\n rowSpan: true\n};\nvar containerTagHash = {\n '= rect.left &&\n point.left < rect.right &&\n point.top >= rect.top &&\n point.top < rect.bottom;\n}\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nexport function intersectRects(rect1, rect2) {\n var res = {\n left: Math.max(rect1.left, rect2.left),\n right: Math.min(rect1.right, rect2.right),\n top: Math.max(rect1.top, rect2.top),\n bottom: Math.min(rect1.bottom, rect2.bottom)\n };\n if (res.left < res.right && res.top < res.bottom) {\n return res;\n }\n return false;\n}\nexport function translateRect(rect, deltaX, deltaY) {\n return {\n left: rect.left + deltaX,\n right: rect.right + deltaX,\n top: rect.top + deltaY,\n bottom: rect.bottom + deltaY\n };\n}\n// Returns a new point that will have been moved to reside within the given rectangle\nexport function constrainPoint(point, rect) {\n return {\n left: Math.min(Math.max(point.left, rect.left), rect.right),\n top: Math.min(Math.max(point.top, rect.top), rect.bottom)\n };\n}\n// Returns a point that is the center of the given rectangle\nexport function getRectCenter(rect) {\n return {\n left: (rect.left + rect.right) / 2,\n top: (rect.top + rect.bottom) / 2\n };\n}\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nexport function diffPoints(point1, point2) {\n return {\n left: point1.left - point2.left,\n top: point1.top - point2.top\n };\n}\n","import { createElement, removeElement } from './dom-manip';\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\nvar isRtlScrollbarOnLeft = null;\nexport function getIsRtlScrollbarOnLeft() {\n if (isRtlScrollbarOnLeft === null) {\n isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();\n }\n return isRtlScrollbarOnLeft;\n}\nfunction computeIsRtlScrollbarOnLeft() {\n var outerEl = createElement('div', {\n style: {\n position: 'absolute',\n top: -1000,\n left: 0,\n border: 0,\n padding: 0,\n overflow: 'scroll',\n direction: 'rtl'\n }\n }, '
');\n document.body.appendChild(outerEl);\n var innerEl = outerEl.firstChild;\n var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;\n removeElement(outerEl);\n return res;\n}\n// The scrollbar width computations in computeEdges are sometimes flawed when it comes to\n// retina displays, rounding, and IE11. Massage them into a usable value.\nexport function sanitizeScrollbarWidth(width) {\n width = Math.max(0, width); // no negatives\n width = Math.round(width);\n return width;\n}\n","import { intersectRects } from './geom';\nimport { sanitizeScrollbarWidth, getIsRtlScrollbarOnLeft } from './scrollbars';\nexport function computeEdges(el, getPadding) {\n if (getPadding === void 0) { getPadding = false; }\n var computedStyle = window.getComputedStyle(el);\n var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;\n var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;\n var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;\n var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;\n // must use offset(Width|Height) because compatible with client(Width|Height)\n var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight);\n var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom);\n var res = {\n borderLeft: borderLeft,\n borderRight: borderRight,\n borderTop: borderTop,\n borderBottom: borderBottom,\n scrollbarBottom: scrollbarBottom,\n scrollbarLeft: 0,\n scrollbarRight: 0\n };\n if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?\n res.scrollbarLeft = scrollbarLeftRight;\n }\n else {\n res.scrollbarRight = scrollbarLeftRight;\n }\n if (getPadding) {\n res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;\n res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;\n res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;\n res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;\n }\n return res;\n}\nexport function computeInnerRect(el, goWithinPadding) {\n if (goWithinPadding === void 0) { goWithinPadding = false; }\n var outerRect = computeRect(el);\n var edges = computeEdges(el, goWithinPadding);\n var res = {\n left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n top: outerRect.top + edges.borderTop,\n bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom\n };\n if (goWithinPadding) {\n res.left += edges.paddingLeft;\n res.right -= edges.paddingRight;\n res.top += edges.paddingTop;\n res.bottom -= edges.paddingBottom;\n }\n return res;\n}\nexport function computeRect(el) {\n var rect = el.getBoundingClientRect();\n return {\n left: rect.left + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n right: rect.right + window.pageXOffset,\n bottom: rect.bottom + window.pageYOffset\n };\n}\nfunction computeViewportRect() {\n return {\n left: window.pageXOffset,\n right: window.pageXOffset + document.documentElement.clientWidth,\n top: window.pageYOffset,\n bottom: window.pageYOffset + document.documentElement.clientHeight\n };\n}\nexport function computeHeightAndMargins(el) {\n return el.getBoundingClientRect().height + computeVMargins(el);\n}\nexport function computeVMargins(el) {\n var computed = window.getComputedStyle(el);\n return parseInt(computed.marginTop, 10) +\n parseInt(computed.marginBottom, 10);\n}\n// does not return window\nexport function getClippingParents(el) {\n var parents = [];\n while (el instanceof HTMLElement) { // will stop when gets to document or null\n var computedStyle = window.getComputedStyle(el);\n if (computedStyle.position === 'fixed') {\n break;\n }\n if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n parents.push(el);\n }\n el = el.parentNode;\n }\n return parents;\n}\nexport function computeClippingRect(el) {\n return getClippingParents(el)\n .map(function (el) {\n return computeInnerRect(el);\n })\n .concat(computeViewportRect())\n .reduce(function (rect0, rect1) {\n return intersectRects(rect0, rect1) || rect1; // should always intersect\n });\n}\n","import { elementClosest } from './dom-manip';\n// Stops a mouse/touch event from doing it's native browser action\nexport function preventDefault(ev) {\n ev.preventDefault();\n}\n// Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\nexport function listenBySelector(container, eventType, selector, handler) {\n function realHandler(ev) {\n var matchedChild = elementClosest(ev.target, selector);\n if (matchedChild) {\n handler.call(matchedChild, ev, matchedChild);\n }\n }\n container.addEventListener(eventType, realHandler);\n return function () {\n container.removeEventListener(eventType, realHandler);\n };\n}\nexport function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {\n var currentMatchedChild;\n return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) {\n if (matchedChild !== currentMatchedChild) {\n currentMatchedChild = matchedChild;\n onMouseEnter(ev, matchedChild);\n var realOnMouseLeave_1 = function (ev) {\n currentMatchedChild = null;\n onMouseLeave(ev, matchedChild);\n matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1);\n };\n // listen to the next mouseleave, and then unattach\n matchedChild.addEventListener('mouseleave', realOnMouseLeave_1);\n }\n });\n}\n// Animation\n// ----------------------------------------------------------------------------------------------------------------\nvar transitionEventNames = [\n 'webkitTransitionEnd',\n 'otransitionend',\n 'oTransitionEnd',\n 'msTransitionEnd',\n 'transitionend'\n];\n// triggered only when the next single subsequent transition finishes\nexport function whenTransitionDone(el, callback) {\n var realCallback = function (ev) {\n callback(ev);\n transitionEventNames.forEach(function (eventName) {\n el.removeEventListener(eventName, realCallback);\n });\n };\n transitionEventNames.forEach(function (eventName) {\n el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes\n });\n}\n","export var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\n// Adding\nexport function addWeeks(m, n) {\n var a = dateToUtcArray(m);\n a[2] += n * 7;\n return arrayToUtcDate(a);\n}\nexport function addDays(m, n) {\n var a = dateToUtcArray(m);\n a[2] += n;\n return arrayToUtcDate(a);\n}\nexport function addMs(m, n) {\n var a = dateToUtcArray(m);\n a[6] += n;\n return arrayToUtcDate(a);\n}\n// Diffing (all return floats)\nexport function diffWeeks(m0, m1) {\n return diffDays(m0, m1) / 7;\n}\nexport function diffDays(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);\n}\nexport function diffHours(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);\n}\nexport function diffMinutes(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60);\n}\nexport function diffSeconds(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / 1000;\n}\nexport function diffDayAndTime(m0, m1) {\n var m0day = startOfDay(m0);\n var m1day = startOfDay(m1);\n return {\n years: 0,\n months: 0,\n days: Math.round(diffDays(m0day, m1day)),\n milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf())\n };\n}\n// Diffing Whole Units\nexport function diffWholeWeeks(m0, m1) {\n var d = diffWholeDays(m0, m1);\n if (d !== null && d % 7 === 0) {\n return d / 7;\n }\n return null;\n}\nexport function diffWholeDays(m0, m1) {\n if (timeAsMs(m0) === timeAsMs(m1)) {\n return Math.round(diffDays(m0, m1));\n }\n return null;\n}\n// Start-Of\nexport function startOfDay(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate()\n ]);\n}\nexport function startOfHour(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours()\n ]);\n}\nexport function startOfMinute(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes()\n ]);\n}\nexport function startOfSecond(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n m.getUTCSeconds()\n ]);\n}\n// Week Computation\nexport function weekOfYear(marker, dow, doy) {\n var y = marker.getUTCFullYear();\n var w = weekOfGivenYear(marker, y, dow, doy);\n if (w < 1) {\n return weekOfGivenYear(marker, y - 1, dow, doy);\n }\n var nextW = weekOfGivenYear(marker, y + 1, dow, doy);\n if (nextW >= 1) {\n return Math.min(w, nextW);\n }\n return w;\n}\nfunction weekOfGivenYear(marker, year, dow, doy) {\n var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);\n var dayStart = startOfDay(marker);\n var days = Math.round(diffDays(firstWeekStart, dayStart));\n return Math.floor(days / 7) + 1; // zero-indexed\n}\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n var fwd = 7 + dow - doy;\n // first-week day local weekday -- which local weekday is fwd\n var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n}\n// Array Conversion\nexport function dateToLocalArray(date) {\n return [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ];\n}\nexport function arrayToLocalDate(a) {\n return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month\n a[3] || 0, a[4] || 0, a[5] || 0);\n}\nexport function dateToUtcArray(date) {\n return [\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds()\n ];\n}\nexport function arrayToUtcDate(a) {\n // according to web standards (and Safari), a month index is required.\n // massage if only given a year.\n if (a.length === 1) {\n a = a.concat([0]);\n }\n return new Date(Date.UTC.apply(Date, a));\n}\n// Other Utils\nexport function isValidDate(m) {\n return !isNaN(m.valueOf());\n}\nexport function timeAsMs(m) {\n return m.getUTCHours() * 1000 * 60 * 60 +\n m.getUTCMinutes() * 1000 * 60 +\n m.getUTCSeconds() * 1000 +\n m.getUTCMilliseconds();\n}\n","import { isInt } from '../util/misc';\nvar INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];\nvar PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/;\n// Parsing and Creation\nexport function createDuration(input, unit) {\n var _a;\n if (typeof input === 'string') {\n return parseString(input);\n }\n else if (typeof input === 'object' && input) { // non-null object\n return normalizeObject(input);\n }\n else if (typeof input === 'number') {\n return normalizeObject((_a = {}, _a[unit || 'milliseconds'] = input, _a));\n }\n else {\n return null;\n }\n}\nfunction parseString(s) {\n var m = PARSE_RE.exec(s);\n if (m) {\n var sign = m[1] ? -1 : 1;\n return {\n years: 0,\n months: 0,\n days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds\n (m[6] ? parseInt(m[6], 10) : 0) // ms\n )\n };\n }\n return null;\n}\nfunction normalizeObject(obj) {\n return {\n years: obj.years || obj.year || 0,\n months: obj.months || obj.month || 0,\n days: (obj.days || obj.day || 0) +\n getWeeksFromInput(obj) * 7,\n milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n (obj.seconds || obj.second || 0) * 1000 + // seconds\n (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms\n };\n}\nexport function getWeeksFromInput(obj) {\n return obj.weeks || obj.week || 0;\n}\n// Equality\nexport function durationsEqual(d0, d1) {\n return d0.years === d1.years &&\n d0.months === d1.months &&\n d0.days === d1.days &&\n d0.milliseconds === d1.milliseconds;\n}\nexport function isSingleDay(dur) {\n return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0;\n}\n// Simple Math\nexport function addDurations(d0, d1) {\n return {\n years: d0.years + d1.years,\n months: d0.months + d1.months,\n days: d0.days + d1.days,\n milliseconds: d0.milliseconds + d1.milliseconds\n };\n}\nexport function subtractDurations(d1, d0) {\n return {\n years: d1.years - d0.years,\n months: d1.months - d0.months,\n days: d1.days - d0.days,\n milliseconds: d1.milliseconds - d0.milliseconds\n };\n}\nexport function multiplyDuration(d, n) {\n return {\n years: d.years * n,\n months: d.months * n,\n days: d.days * n,\n milliseconds: d.milliseconds * n\n };\n}\n// Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\nexport function asRoughYears(dur) {\n return asRoughDays(dur) / 365;\n}\nexport function asRoughMonths(dur) {\n return asRoughDays(dur) / 30;\n}\nexport function asRoughDays(dur) {\n return asRoughMs(dur) / 864e5;\n}\nexport function asRoughHours(dur) {\n return asRoughMs(dur) / (1000 * 60 * 60);\n}\nexport function asRoughMinutes(dur) {\n return asRoughMs(dur) / (1000 * 60);\n}\nexport function asRoughSeconds(dur) {\n return asRoughMs(dur) / 1000;\n}\nexport function asRoughMs(dur) {\n return dur.years * (365 * 864e5) +\n dur.months * (30 * 864e5) +\n dur.days * 864e5 +\n dur.milliseconds;\n}\n// Advanced Math\nexport function wholeDivideDurations(numerator, denominator) {\n var res = null;\n for (var i = 0; i < INTERNAL_UNITS.length; i++) {\n var unit = INTERNAL_UNITS[i];\n if (denominator[unit]) {\n var localRes = numerator[unit] / denominator[unit];\n if (!isInt(localRes) || (res !== null && res !== localRes)) {\n return null;\n }\n res = localRes;\n }\n else if (numerator[unit]) {\n // needs to divide by something but can't!\n return null;\n }\n }\n return res;\n}\nexport function greatestDurationDenominator(dur, dontReturnWeeks) {\n var ms = dur.milliseconds;\n if (ms) {\n if (ms % 1000 !== 0) {\n return { unit: 'millisecond', value: ms };\n }\n if (ms % (1000 * 60) !== 0) {\n return { unit: 'second', value: ms / 1000 };\n }\n if (ms % (1000 * 60 * 60) !== 0) {\n return { unit: 'minute', value: ms / (1000 * 60) };\n }\n if (ms) {\n return { unit: 'hour', value: ms / (1000 * 60 * 60) };\n }\n }\n if (dur.days) {\n if (!dontReturnWeeks && dur.days % 7 === 0) {\n return { unit: 'week', value: dur.days / 7 };\n }\n return { unit: 'day', value: dur.days };\n }\n if (dur.months) {\n return { unit: 'month', value: dur.months };\n }\n if (dur.years) {\n return { unit: 'year', value: dur.years };\n }\n return { unit: 'millisecond', value: 0 };\n}\n","import { applyStyle } from './dom-manip';\nimport { computeVMargins } from './dom-geom';\nimport { preventDefault } from './dom-event';\nimport { startOfDay, addDays, diffDays, diffDayAndTime } from '../datelib/marker';\nimport { asRoughMs, createDuration } from '../datelib/duration';\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\nexport function compensateScroll(rowEl, scrollbarWidths) {\n if (scrollbarWidths.left) {\n applyStyle(rowEl, {\n borderLeftWidth: 1,\n marginLeft: scrollbarWidths.left - 1\n });\n }\n if (scrollbarWidths.right) {\n applyStyle(rowEl, {\n borderRightWidth: 1,\n marginRight: scrollbarWidths.right - 1\n });\n }\n}\n// Undoes compensateScroll and restores all borders/margins\nexport function uncompensateScroll(rowEl) {\n applyStyle(rowEl, {\n marginLeft: '',\n marginRight: '',\n borderLeftWidth: '',\n borderRightWidth: ''\n });\n}\n// Make the mouse cursor express that an event is not allowed in the current area\nexport function disableCursor() {\n document.body.classList.add('fc-not-allowed');\n}\n// Returns the mouse cursor to its original look\nexport function enableCursor() {\n document.body.classList.remove('fc-not-allowed');\n}\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\n// reduces the available height.\nexport function distributeHeight(els, availableHeight, shouldRedistribute) {\n // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\n var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\n var flexEls = []; // elements that are allowed to expand. array of DOM nodes\n var flexOffsets = []; // amount of vertical space it takes up\n var flexHeights = []; // actual css height\n var usedHeight = 0;\n undistributeHeight(els); // give all elements their natural height\n // find elements that are below the recommended height (expandable).\n // important to query for heights in a single first pass (to avoid reflow oscillation).\n els.forEach(function (el, i) {\n var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\n var naturalHeight = el.getBoundingClientRect().height;\n var naturalOffset = naturalHeight + computeVMargins(el);\n if (naturalOffset < minOffset) {\n flexEls.push(el);\n flexOffsets.push(naturalOffset);\n flexHeights.push(naturalHeight);\n }\n else {\n // this element stretches past recommended height (non-expandable). mark the space as occupied.\n usedHeight += naturalOffset;\n }\n });\n // readjust the recommended height to only consider the height available to non-maxed-out rows.\n if (shouldRedistribute) {\n availableHeight -= usedHeight;\n minOffset1 = Math.floor(availableHeight / flexEls.length);\n minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\n }\n // assign heights to all expandable elements\n flexEls.forEach(function (el, i) {\n var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\n var naturalOffset = flexOffsets[i];\n var naturalHeight = flexHeights[i];\n var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\n if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\n el.style.height = newHeight + 'px';\n }\n });\n}\n// Undoes distrubuteHeight, restoring all els to their natural height\nexport function undistributeHeight(els) {\n els.forEach(function (el) {\n el.style.height = '';\n });\n}\n// Given `els`, a set of cells, find the cell with the largest natural width and set the widths of all the\n// cells to be that width.\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\nexport function matchCellWidths(els) {\n var maxInnerWidth = 0;\n els.forEach(function (el) {\n var innerEl = el.firstChild; // hopefully an element\n if (innerEl instanceof HTMLElement) {\n var innerWidth_1 = innerEl.getBoundingClientRect().width;\n if (innerWidth_1 > maxInnerWidth) {\n maxInnerWidth = innerWidth_1;\n }\n }\n });\n maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\n els.forEach(function (el) {\n el.style.width = maxInnerWidth + 'px';\n });\n return maxInnerWidth;\n}\n// Given one element that resides inside another,\n// Subtracts the height of the inner element from the outer element.\nexport function subtractInnerElHeight(outerEl, innerEl) {\n // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n var reflowStyleProps = {\n position: 'relative',\n left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n };\n applyStyle(outerEl, reflowStyleProps);\n applyStyle(innerEl, reflowStyleProps);\n var diff = // grab the dimensions\n outerEl.getBoundingClientRect().height -\n innerEl.getBoundingClientRect().height;\n // undo hack\n var resetStyleProps = { position: '', left: '' };\n applyStyle(outerEl, resetStyleProps);\n applyStyle(innerEl, resetStyleProps);\n return diff;\n}\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\nexport function preventSelection(el) {\n el.classList.add('fc-unselectable');\n el.addEventListener('selectstart', preventDefault);\n}\nexport function allowSelection(el) {\n el.classList.remove('fc-unselectable');\n el.removeEventListener('selectstart', preventDefault);\n}\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\nexport function preventContextMenu(el) {\n el.addEventListener('contextmenu', preventDefault);\n}\nexport function allowContextMenu(el) {\n el.removeEventListener('contextmenu', preventDefault);\n}\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\nexport function parseFieldSpecs(input) {\n var specs = [];\n var tokens = [];\n var i;\n var token;\n if (typeof input === 'string') {\n tokens = input.split(/\\s*,\\s*/);\n }\n else if (typeof input === 'function') {\n tokens = [input];\n }\n else if (Array.isArray(input)) {\n tokens = input;\n }\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n if (typeof token === 'string') {\n specs.push(token.charAt(0) === '-' ?\n { field: token.substring(1), order: -1 } :\n { field: token, order: 1 });\n }\n else if (typeof token === 'function') {\n specs.push({ func: token });\n }\n }\n return specs;\n}\nexport function compareByFieldSpecs(obj0, obj1, fieldSpecs) {\n var i;\n var cmp;\n for (i = 0; i < fieldSpecs.length; i++) {\n cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);\n if (cmp) {\n return cmp;\n }\n }\n return 0;\n}\nexport function compareByFieldSpec(obj0, obj1, fieldSpec) {\n if (fieldSpec.func) {\n return fieldSpec.func(obj0, obj1);\n }\n return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])\n * (fieldSpec.order || 1);\n}\nexport function flexibleCompare(a, b) {\n if (!a && !b) {\n return 0;\n }\n if (b == null) {\n return -1;\n }\n if (a == null) {\n return 1;\n }\n if (typeof a === 'string' || typeof b === 'string') {\n return String(a).localeCompare(String(b));\n }\n return a - b;\n}\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nexport function capitaliseFirstLetter(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nexport function padStart(val, len) {\n var s = String(val);\n return '000'.substr(0, len - s.length) + s;\n}\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nexport function compareNumbers(a, b) {\n return a - b;\n}\nexport function isInt(n) {\n return n % 1 === 0;\n}\n/* Weird Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nexport function applyAll(functions, thisObj, args) {\n if (typeof functions === 'function') { // supplied a single function\n functions = [functions];\n }\n if (functions) {\n var i = void 0;\n var ret = void 0;\n for (i = 0; i < functions.length; i++) {\n ret = functions[i].apply(thisObj, args) || ret;\n }\n return ret;\n }\n}\nexport function firstDefined() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n for (var i = 0; i < args.length; i++) {\n if (args[i] !== undefined) {\n return args[i];\n }\n }\n}\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\nexport function debounce(func, wait) {\n var timeout;\n var args;\n var context;\n var timestamp;\n var result;\n var later = function () {\n var last = new Date().valueOf() - timestamp;\n if (last < wait) {\n timeout = setTimeout(later, wait - last);\n }\n else {\n timeout = null;\n result = func.apply(context, args);\n context = args = null;\n }\n };\n return function () {\n context = this;\n args = arguments;\n timestamp = new Date().valueOf();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n return result;\n };\n}\n// Number and Boolean are only types that defaults or not computed for\n// TODO: write more comments\nexport function refineProps(rawProps, processors, defaults, leftoverProps) {\n if (defaults === void 0) { defaults = {}; }\n var refined = {};\n for (var key in processors) {\n var processor = processors[key];\n if (rawProps[key] !== undefined) {\n // found\n if (processor === Function) {\n refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null;\n }\n else if (processor) { // a refining function?\n refined[key] = processor(rawProps[key]);\n }\n else {\n refined[key] = rawProps[key];\n }\n }\n else if (defaults[key] !== undefined) {\n // there's an explicit default\n refined[key] = defaults[key];\n }\n else {\n // must compute a default\n if (processor === String) {\n refined[key] = ''; // empty string is default for String\n }\n else if (!processor || processor === Number || processor === Boolean || processor === Function) {\n refined[key] = null; // assign null for other non-custom processor funcs\n }\n else {\n refined[key] = processor(null); // run the custom processor func\n }\n }\n }\n if (leftoverProps) {\n for (var key in rawProps) {\n if (processors[key] === undefined) {\n leftoverProps[key] = rawProps[key];\n }\n }\n }\n return refined;\n}\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\nexport function computeAlignedDayRange(timedRange) {\n var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;\n var start = startOfDay(timedRange.start);\n var end = addDays(start, dayCnt);\n return { start: start, end: end };\n}\n// given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\nexport function computeVisibleDayRange(timedRange, nextDayThreshold) {\n if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); }\n var startDay = null;\n var endDay = null;\n if (timedRange.end) {\n endDay = startOfDay(timedRange.end);\n var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`\n // If the end time is actually inclusively part of the next day and is equal to or\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n endDay = addDays(endDay, 1);\n }\n }\n if (timedRange.start) {\n startDay = startOfDay(timedRange.start); // the beginning of the day the range starts\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n if (endDay && endDay <= startDay) {\n endDay = addDays(startDay, 1);\n }\n }\n return { start: startDay, end: endDay };\n}\n// spans from one day into another?\nexport function isMultiDayRange(range) {\n var visibleRange = computeVisibleDayRange(range);\n return diffDays(visibleRange.start, visibleRange.end) > 1;\n}\nexport function diffDates(date0, date1, dateEnv, largeUnit) {\n if (largeUnit === 'year') {\n return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');\n }\n else if (largeUnit === 'month') {\n return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');\n }\n else {\n return diffDayAndTime(date0, date1); // returns a duration\n }\n}\n","import { startOfDay } from '../datelib/marker';\nimport { __assign } from 'tslib';\nexport function parseRecurring(eventInput, allDayDefault, dateEnv, recurringTypes, leftovers) {\n for (var i = 0; i < recurringTypes.length; i++) {\n var localLeftovers = {};\n var parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv);\n if (parsed) {\n var allDay = localLeftovers.allDay;\n delete localLeftovers.allDay; // remove from leftovers\n if (allDay == null) {\n allDay = allDayDefault;\n if (allDay == null) {\n allDay = parsed.allDayGuess;\n if (allDay == null) {\n allDay = false;\n }\n }\n }\n __assign(leftovers, localLeftovers);\n return {\n allDay: allDay,\n duration: parsed.duration,\n typeData: parsed.typeData,\n typeId: i\n };\n }\n }\n return null;\n}\n/*\nEvent MUST have a recurringDef\n*/\nexport function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {\n var typeDef = recurringTypes[eventDef.recurringDef.typeId];\n var markers = typeDef.expand(eventDef.recurringDef.typeData, {\n start: dateEnv.subtract(framingRange.start, duration),\n end: framingRange.end\n }, dateEnv);\n // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n if (eventDef.allDay) {\n markers = markers.map(startOfDay);\n }\n return markers;\n}\n","var hasOwnProperty = Object.prototype.hasOwnProperty;\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nexport function mergeProps(propObjs, complexProps) {\n var dest = {};\n var i;\n var name;\n var complexObjs;\n var j;\n var val;\n var props;\n if (complexProps) {\n for (i = 0; i < complexProps.length; i++) {\n name = complexProps[i];\n complexObjs = [];\n // collect the trailing object values, stopping when a non-object is discovered\n for (j = propObjs.length - 1; j >= 0; j--) {\n val = propObjs[j][name];\n if (typeof val === 'object' && val) { // non-null object\n complexObjs.unshift(val);\n }\n else if (val !== undefined) {\n dest[name] = val; // if there were no objects, this value will be used\n break;\n }\n }\n // if the trailing values were objects, use the merged value\n if (complexObjs.length) {\n dest[name] = mergeProps(complexObjs);\n }\n }\n }\n // copy values into the destination, going from last to first\n for (i = propObjs.length - 1; i >= 0; i--) {\n props = propObjs[i];\n for (name in props) {\n if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n dest[name] = props[name];\n }\n }\n }\n return dest;\n}\nexport function filterHash(hash, func) {\n var filtered = {};\n for (var key in hash) {\n if (func(hash[key], key)) {\n filtered[key] = hash[key];\n }\n }\n return filtered;\n}\nexport function mapHash(hash, func) {\n var newHash = {};\n for (var key in hash) {\n newHash[key] = func(hash[key], key);\n }\n return newHash;\n}\nexport function arrayToHash(a) {\n var hash = {};\n for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {\n var item = a_1[_i];\n hash[item] = true;\n }\n return hash;\n}\nexport function hashValuesToArray(obj) {\n var a = [];\n for (var key in obj) {\n a.push(obj[key]);\n }\n return a;\n}\nexport function isPropsEqual(obj0, obj1) {\n for (var key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n return false;\n }\n }\n }\n for (var key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n return false;\n }\n }\n }\n return true;\n}\n","import * as tslib_1 from \"tslib\";\nimport { createEventInstance, parseEvent } from './event';\nimport { expandRecurringRanges } from './recurring-event';\nimport { filterHash } from '../util/object';\nexport function parseEvents(rawEvents, sourceId, calendar, allowOpenRange) {\n var eventStore = createEmptyEventStore();\n for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {\n var rawEvent = rawEvents_1[_i];\n var tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange);\n if (tuple) {\n eventTupleToStore(tuple, eventStore);\n }\n }\n return eventStore;\n}\nexport function eventTupleToStore(tuple, eventStore) {\n if (eventStore === void 0) { eventStore = createEmptyEventStore(); }\n eventStore.defs[tuple.def.defId] = tuple.def;\n if (tuple.instance) {\n eventStore.instances[tuple.instance.instanceId] = tuple.instance;\n }\n return eventStore;\n}\nexport function expandRecurring(eventStore, framingRange, calendar) {\n var dateEnv = calendar.dateEnv;\n var defs = eventStore.defs, instances = eventStore.instances;\n // remove existing recurring instances\n instances = filterHash(instances, function (instance) {\n return !defs[instance.defId].recurringDef;\n });\n for (var defId in defs) {\n var def = defs[defId];\n if (def.recurringDef) {\n var duration = def.recurringDef.duration;\n if (!duration) {\n duration = def.allDay ?\n calendar.defaultAllDayEventDuration :\n calendar.defaultTimedEventDuration;\n }\n var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);\n for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {\n var start = starts_1[_i];\n var instance = createEventInstance(defId, {\n start: start,\n end: dateEnv.add(start, duration)\n });\n instances[instance.instanceId] = instance;\n }\n }\n }\n return { defs: defs, instances: instances };\n}\n// retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\nexport function getRelevantEvents(eventStore, instanceId) {\n var instance = eventStore.instances[instanceId];\n if (instance) {\n var def_1 = eventStore.defs[instance.defId];\n // get events/instances with same group\n var newStore = filterEventStoreDefs(eventStore, function (lookDef) {\n return isEventDefsGrouped(def_1, lookDef);\n });\n // add the original\n // TODO: wish we could use eventTupleToStore or something like it\n newStore.defs[def_1.defId] = def_1;\n newStore.instances[instance.instanceId] = instance;\n return newStore;\n }\n return createEmptyEventStore();\n}\nfunction isEventDefsGrouped(def0, def1) {\n return Boolean(def0.groupId && def0.groupId === def1.groupId);\n}\nexport function transformRawEvents(rawEvents, eventSource, calendar) {\n var calEachTransform = calendar.opt('eventDataTransform');\n var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;\n if (sourceEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);\n }\n if (calEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, calEachTransform);\n }\n return rawEvents;\n}\nfunction transformEachRawEvent(rawEvents, func) {\n var refinedEvents;\n if (!func) {\n refinedEvents = rawEvents;\n }\n else {\n refinedEvents = [];\n for (var _i = 0, rawEvents_2 = rawEvents; _i < rawEvents_2.length; _i++) {\n var rawEvent = rawEvents_2[_i];\n var refinedEvent = func(rawEvent);\n if (refinedEvent) {\n refinedEvents.push(refinedEvent);\n }\n else if (refinedEvent == null) {\n refinedEvents.push(rawEvent);\n } // if a different falsy value, do nothing\n }\n }\n return refinedEvents;\n}\nexport function createEmptyEventStore() {\n return { defs: {}, instances: {} };\n}\nexport function mergeEventStores(store0, store1) {\n return {\n defs: tslib_1.__assign({}, store0.defs, store1.defs),\n instances: tslib_1.__assign({}, store0.instances, store1.instances)\n };\n}\nexport function filterEventStoreDefs(eventStore, filterFunc) {\n var defs = filterHash(eventStore.defs, filterFunc);\n var instances = filterHash(eventStore.instances, function (instance) {\n return defs[instance.defId]; // still exists?\n });\n return { defs: defs, instances: instances };\n}\n","export function parseRange(input, dateEnv) {\n var start = null;\n var end = null;\n if (input.start) {\n start = dateEnv.createMarker(input.start);\n }\n if (input.end) {\n end = dateEnv.createMarker(input.end);\n }\n if (!start && !end) {\n return null;\n }\n if (start && end && end < start) {\n return null;\n }\n return { start: start, end: end };\n}\n// SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\nexport function invertRanges(ranges, constraintRange) {\n var invertedRanges = [];\n var start = constraintRange.start; // the end of the previous range. the start of the new range\n var i;\n var dateRange;\n // ranges need to be in order. required for our date-walking algorithm\n ranges.sort(compareRanges);\n for (i = 0; i < ranges.length; i++) {\n dateRange = ranges[i];\n // add the span of time before the event (if there is any)\n if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start: start, end: dateRange.start });\n }\n if (dateRange.end > start) {\n start = dateRange.end;\n }\n }\n // add the span of time after the last event (if there is any)\n if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start: start, end: constraintRange.end });\n }\n return invertedRanges;\n}\nfunction compareRanges(range0, range1) {\n return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first\n}\nexport function intersectRanges(range0, range1) {\n var start = range0.start;\n var end = range0.end;\n var newRange = null;\n if (range1.start !== null) {\n if (start === null) {\n start = range1.start;\n }\n else {\n start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));\n }\n }\n if (range1.end != null) {\n if (end === null) {\n end = range1.end;\n }\n else {\n end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));\n }\n }\n if (start === null || end === null || start < end) {\n newRange = { start: start, end: end };\n }\n return newRange;\n}\nexport function rangesEqual(range0, range1) {\n return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&\n (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());\n}\nexport function rangesIntersect(range0, range1) {\n return (range0.end === null || range1.start === null || range0.end > range1.start) &&\n (range0.start === null || range1.end === null || range0.start < range1.end);\n}\nexport function rangeContainsRange(outerRange, innerRange) {\n return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&\n (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));\n}\nexport function rangeContainsMarker(range, date) {\n return (range.start === null || date >= range.start) &&\n (range.end === null || date < range.end);\n}\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\nexport function constrainMarkerToRange(date, range) {\n if (range.start != null && date < range.start) {\n return range.start;\n }\n if (range.end != null && date >= range.end) {\n return new Date(range.end.valueOf() - 1);\n }\n return date;\n}\n","export function removeMatching(array, testFunc) {\n var removeCnt = 0;\n var i = 0;\n while (i < array.length) {\n if (testFunc(array[i])) { // truthy value means *remove*\n array.splice(i, 1);\n removeCnt++;\n }\n else {\n i++;\n }\n }\n return removeCnt;\n}\nexport function removeExact(array, exactVal) {\n var removeCnt = 0;\n var i = 0;\n while (i < array.length) {\n if (array[i] === exactVal) {\n array.splice(i, 1);\n removeCnt++;\n }\n else {\n i++;\n }\n }\n return removeCnt;\n}\nexport function isArraysEqual(a0, a1) {\n var len = a0.length;\n var i;\n if (len !== a1.length) { // not array? or not same length?\n return false;\n }\n for (i = 0; i < len; i++) {\n if (a0[i] !== a1[i]) {\n return false;\n }\n }\n return true;\n}\n","import { isArraysEqual } from './array';\nexport function memoize(workerFunc) {\n var args;\n var res;\n return function () {\n if (!args || !isArraysEqual(args, arguments)) {\n args = arguments;\n res = workerFunc.apply(this, arguments);\n }\n return res;\n };\n}\n/*\nalways executes the workerFunc, but if the result is equal to the previous result,\nreturn the previous result instead.\n*/\nexport function memoizeOutput(workerFunc, equalityFunc) {\n var cachedRes = null;\n return function () {\n var newRes = workerFunc.apply(this, arguments);\n if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) {\n cachedRes = newRes;\n }\n return cachedRes;\n };\n}\n","import * as tslib_1 from \"tslib\";\nimport { timeAsMs } from './marker';\nimport { formatTimeZoneOffset } from './formatting';\nimport { memoize } from '../util/memoize';\nvar EXTENDED_SETTINGS_AND_SEVERITIES = {\n week: 3,\n separator: 0,\n omitZeroMinute: 0,\n meridiem: 0,\n omitCommas: 0\n};\nvar STANDARD_DATE_PROP_SEVERITIES = {\n timeZoneName: 7,\n era: 6,\n year: 5,\n month: 4,\n day: 2,\n weekday: 2,\n hour: 1,\n minute: 1,\n second: 1\n};\nvar MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i; // eats up leading spaces too\nvar COMMA_RE = /,/g; // we need re for globalness\nvar MULTI_SPACE_RE = /\\s+/g;\nvar LTR_RE = /\\u200e/g; // control character\nvar UTC_RE = /UTC|GMT/;\nvar NativeFormatter = /** @class */ (function () {\n function NativeFormatter(formatSettings) {\n var standardDateProps = {};\n var extendedSettings = {};\n var severity = 0;\n for (var name_1 in formatSettings) {\n if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) {\n extendedSettings[name_1] = formatSettings[name_1];\n severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity);\n }\n else {\n standardDateProps[name_1] = formatSettings[name_1];\n if (name_1 in STANDARD_DATE_PROP_SEVERITIES) {\n severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity);\n }\n }\n }\n this.standardDateProps = standardDateProps;\n this.extendedSettings = extendedSettings;\n this.severity = severity;\n this.buildFormattingFunc = memoize(buildFormattingFunc);\n }\n NativeFormatter.prototype.format = function (date, context) {\n return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);\n };\n NativeFormatter.prototype.formatRange = function (start, end, context) {\n var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings;\n var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);\n if (!diffSeverity) {\n return this.format(start, context);\n }\n var biggestUnitForPartial = diffSeverity;\n if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time\n (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&\n (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&\n (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {\n biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time\n }\n var full0 = this.format(start, context);\n var full1 = this.format(end, context);\n if (full0 === full1) {\n return full0;\n }\n var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);\n var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);\n var partial0 = partialFormattingFunc(start);\n var partial1 = partialFormattingFunc(end);\n var insertion = findCommonInsertion(full0, partial0, full1, partial1);\n var separator = extendedSettings.separator || '';\n if (insertion) {\n return insertion.before + partial0 + separator + partial1 + insertion.after;\n }\n return full0 + separator + full1;\n };\n NativeFormatter.prototype.getLargestUnit = function () {\n switch (this.severity) {\n case 7:\n case 6:\n case 5:\n return 'year';\n case 4:\n return 'month';\n case 3:\n return 'week';\n default:\n return 'day';\n }\n };\n return NativeFormatter;\n}());\nexport { NativeFormatter };\nfunction buildFormattingFunc(standardDateProps, extendedSettings, context) {\n var standardDatePropCnt = Object.keys(standardDateProps).length;\n if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n return function (date) {\n return formatTimeZoneOffset(date.timeZoneOffset);\n };\n }\n if (standardDatePropCnt === 0 && extendedSettings.week) {\n return function (date) {\n return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekLabel, context.locale, extendedSettings.week);\n };\n }\n return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);\n}\nfunction buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {\n standardDateProps = tslib_1.__assign({}, standardDateProps); // copy\n extendedSettings = tslib_1.__assign({}, extendedSettings); // copy\n sanitizeSettings(standardDateProps, extendedSettings);\n standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers\n var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);\n var zeroFormat; // needed?\n if (extendedSettings.omitZeroMinute) {\n var zeroProps = tslib_1.__assign({}, standardDateProps);\n delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings\n zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);\n }\n return function (date) {\n var marker = date.marker;\n var format;\n if (zeroFormat && !marker.getUTCMinutes()) {\n format = zeroFormat;\n }\n else {\n format = normalFormat;\n }\n var s = format.format(marker);\n return postProcess(s, date, standardDateProps, extendedSettings, context);\n };\n}\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n // deal with a browser inconsistency where formatting the timezone\n // requires that the hour/minute be present.\n if (standardDateProps.timeZoneName) {\n if (!standardDateProps.hour) {\n standardDateProps.hour = '2-digit';\n }\n if (!standardDateProps.minute) {\n standardDateProps.minute = '2-digit';\n }\n }\n // only support short timezone names\n if (standardDateProps.timeZoneName === 'long') {\n standardDateProps.timeZoneName = 'short';\n }\n // if requesting to display seconds, MUST display minutes\n if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n delete extendedSettings.omitZeroMinute;\n }\n}\nfunction postProcess(s, date, standardDateProps, extendedSettings, context) {\n s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes\n if (standardDateProps.timeZoneName === 'short') {\n s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?\n 'UTC' : // important to normalize for IE, which does \"GMT\"\n formatTimeZoneOffset(date.timeZoneOffset));\n }\n if (extendedSettings.omitCommas) {\n s = s.replace(COMMA_RE, '').trim();\n }\n if (extendedSettings.omitZeroMinute) {\n s = s.replace(':00', ''); // zeroFormat doesn't always achieve this\n }\n // ^ do anything that might create adjacent spaces before this point,\n // because MERIDIEM_RE likes to eat up loading spaces\n if (extendedSettings.meridiem === false) {\n s = s.replace(MERIDIEM_RE, '').trim();\n }\n else if (extendedSettings.meridiem === 'narrow') { // a/p\n s = s.replace(MERIDIEM_RE, function (m0, m1) {\n return m1.toLocaleLowerCase();\n });\n }\n else if (extendedSettings.meridiem === 'short') { // am/pm\n s = s.replace(MERIDIEM_RE, function (m0, m1) {\n return m1.toLocaleLowerCase() + 'm';\n });\n }\n else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase\n s = s.replace(MERIDIEM_RE, function (m0) {\n return m0.toLocaleLowerCase();\n });\n }\n s = s.replace(MULTI_SPACE_RE, ' ');\n s = s.trim();\n return s;\n}\nfunction injectTzoStr(s, tzoStr) {\n var replaced = false;\n s = s.replace(UTC_RE, function () {\n replaced = true;\n return tzoStr;\n });\n // IE11 doesn't include UTC/GMT in the original string, so append to end\n if (!replaced) {\n s += ' ' + tzoStr;\n }\n return s;\n}\nfunction formatWeekNumber(num, weekLabel, locale, display) {\n var parts = [];\n if (display === 'narrow') {\n parts.push(weekLabel);\n }\n else if (display === 'short') {\n parts.push(weekLabel, ' ');\n }\n // otherwise, considered 'numeric'\n parts.push(locale.simpleNumberFormat.format(num));\n if (locale.options.isRtl) { // TODO: use control characters instead?\n parts.reverse();\n }\n return parts.join('');\n}\n// Range Formatting Utils\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\nfunction computeMarkerDiffSeverity(d0, d1, ca) {\n if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n return 5;\n }\n if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n return 4;\n }\n if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n return 2;\n }\n if (timeAsMs(d0) !== timeAsMs(d1)) {\n return 1;\n }\n return 0;\n}\nfunction computePartialFormattingOptions(options, biggestUnit) {\n var partialOptions = {};\n for (var name_2 in options) {\n if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) {\n partialOptions[name_2] = options[name_2];\n }\n }\n return partialOptions;\n}\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n var i0 = 0;\n while (i0 < full0.length) {\n var found0 = full0.indexOf(partial0, i0);\n if (found0 === -1) {\n break;\n }\n var before0 = full0.substr(0, found0);\n i0 = found0 + partial0.length;\n var after0 = full0.substr(i0);\n var i1 = 0;\n while (i1 < full1.length) {\n var found1 = full1.indexOf(partial1, i1);\n if (found1 === -1) {\n break;\n }\n var before1 = full1.substr(0, found1);\n i1 = found1 + partial1.length;\n var after1 = full1.substr(i1);\n if (before0 === before1 && after0 === after1) {\n return {\n before: before0,\n after: after0\n };\n }\n }\n }\n return null;\n}\n","import { createVerboseFormattingArg } from './formatting';\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\nvar CmdFormatter = /** @class */ (function () {\n function CmdFormatter(cmdStr, separator) {\n this.cmdStr = cmdStr;\n this.separator = separator;\n }\n CmdFormatter.prototype.format = function (date, context) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator));\n };\n CmdFormatter.prototype.formatRange = function (start, end, context) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator));\n };\n return CmdFormatter;\n}());\nexport { CmdFormatter };\n","import { createVerboseFormattingArg } from './formatting';\nvar FuncFormatter = /** @class */ (function () {\n function FuncFormatter(func) {\n this.func = func;\n }\n FuncFormatter.prototype.format = function (date, context) {\n return this.func(createVerboseFormattingArg(date, null, context));\n };\n FuncFormatter.prototype.formatRange = function (start, end, context) {\n return this.func(createVerboseFormattingArg(start, end, context));\n };\n return FuncFormatter;\n}());\nexport { FuncFormatter };\n","import * as tslib_1 from \"tslib\";\nimport { padStart } from '../util/misc';\nimport { NativeFormatter } from './formatting-native';\nimport { CmdFormatter } from './formatting-cmd';\nimport { FuncFormatter } from './formatting-func';\n// Formatter Object Creation\nexport function createFormatter(input, defaultSeparator) {\n if (typeof input === 'object' && input) { // non-null object\n if (typeof defaultSeparator === 'string') {\n input = tslib_1.__assign({ separator: defaultSeparator }, input);\n }\n return new NativeFormatter(input);\n }\n else if (typeof input === 'string') {\n return new CmdFormatter(input, defaultSeparator);\n }\n else if (typeof input === 'function') {\n return new FuncFormatter(input);\n }\n}\n// String Utils\n// timeZoneOffset is in minutes\nexport function buildIsoString(marker, timeZoneOffset, stripZeroTime) {\n if (stripZeroTime === void 0) { stripZeroTime = false; }\n var s = marker.toISOString();\n s = s.replace('.000', '');\n if (stripZeroTime) {\n s = s.replace('T00:00:00Z', '');\n }\n if (s.length > 10) { // time part wasn't stripped, can add timezone info\n if (timeZoneOffset == null) {\n s = s.replace('Z', '');\n }\n else if (timeZoneOffset !== 0) {\n s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));\n }\n // otherwise, its UTC-0 and we want to keep the Z\n }\n return s;\n}\nexport function formatIsoTimeString(marker) {\n return padStart(marker.getUTCHours(), 2) + ':' +\n padStart(marker.getUTCMinutes(), 2) + ':' +\n padStart(marker.getUTCSeconds(), 2);\n}\nexport function formatTimeZoneOffset(minutes, doIso) {\n if (doIso === void 0) { doIso = false; }\n var sign = minutes < 0 ? '-' : '+';\n var abs = Math.abs(minutes);\n var hours = Math.floor(abs / 60);\n var mins = Math.round(abs % 60);\n if (doIso) {\n return sign + padStart(hours, 2) + ':' + padStart(mins, 2);\n }\n else {\n return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : '');\n }\n}\n// Arg Utils\nexport function createVerboseFormattingArg(start, end, context, separator) {\n var startInfo = expandZonedMarker(start, context.calendarSystem);\n var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;\n return {\n date: startInfo,\n start: startInfo,\n end: endInfo,\n timeZone: context.timeZone,\n localeCodes: context.locale.codes,\n separator: separator\n };\n}\nfunction expandZonedMarker(dateInfo, calendarSystem) {\n var a = calendarSystem.markerToArray(dateInfo.marker);\n return {\n marker: dateInfo.marker,\n timeZoneOffset: dateInfo.timeZoneOffset,\n array: a,\n year: a[0],\n month: a[1],\n day: a[2],\n hour: a[3],\n minute: a[4],\n second: a[5],\n millisecond: a[6]\n };\n}\n","var EventSourceApi = /** @class */ (function () {\n function EventSourceApi(calendar, internalEventSource) {\n this.calendar = calendar;\n this.internalEventSource = internalEventSource;\n }\n EventSourceApi.prototype.remove = function () {\n this.calendar.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: this.internalEventSource.sourceId\n });\n };\n EventSourceApi.prototype.refetch = function () {\n this.calendar.dispatch({\n type: 'FETCH_EVENT_SOURCES',\n sourceIds: [this.internalEventSource.sourceId]\n });\n };\n Object.defineProperty(EventSourceApi.prototype, \"id\", {\n get: function () {\n return this.internalEventSource.publicId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventSourceApi.prototype, \"url\", {\n // only relevant to json-feed event sources\n get: function () {\n return this.internalEventSource.meta.url;\n },\n enumerable: true,\n configurable: true\n });\n return EventSourceApi;\n}());\nexport default EventSourceApi;\n","import { NON_DATE_PROPS, DATE_PROPS } from '../structs/event';\nimport { UNSCOPED_EVENT_UI_PROPS } from '../component/event-ui';\nimport { diffDates, computeAlignedDayRange } from '../util/misc';\nimport { createDuration, durationsEqual } from '../datelib/duration';\nimport { createFormatter } from '../datelib/formatting';\nimport EventSourceApi from './EventSourceApi';\nvar EventApi = /** @class */ (function () {\n function EventApi(calendar, def, instance) {\n this._calendar = calendar;\n this._def = def;\n this._instance = instance || null;\n }\n /*\n TODO: make event struct more responsible for this\n */\n EventApi.prototype.setProp = function (name, val) {\n var _a, _b;\n if (name in DATE_PROPS) {\n // error. date-related props need other methods\n }\n else if (name in NON_DATE_PROPS) {\n if (typeof NON_DATE_PROPS[name] === 'function') {\n val = NON_DATE_PROPS[name](val);\n }\n this.mutate({\n standardProps: (_a = {}, _a[name] = val, _a)\n });\n }\n else if (name in UNSCOPED_EVENT_UI_PROPS) {\n var ui = void 0;\n if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') {\n val = UNSCOPED_EVENT_UI_PROPS[name](val);\n }\n if (name === 'color') {\n ui = { backgroundColor: val, borderColor: val };\n }\n else if (name === 'editable') {\n ui = { startEditable: val, durationEditable: val };\n }\n else {\n ui = (_b = {}, _b[name] = val, _b);\n }\n this.mutate({\n standardProps: { ui: ui }\n });\n }\n else {\n // error\n }\n };\n EventApi.prototype.setExtendedProp = function (name, val) {\n var _a;\n this.mutate({\n extendedProps: (_a = {}, _a[name] = val, _a)\n });\n };\n EventApi.prototype.setStart = function (startInput, options) {\n if (options === void 0) { options = {}; }\n var dateEnv = this._calendar.dateEnv;\n var start = dateEnv.createMarker(startInput);\n if (start && this._instance) { // TODO: warning if parsed bad\n var instanceRange = this._instance.range;\n var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?\n if (options.maintainDuration) {\n this.mutate({ datesDelta: startDelta });\n }\n else {\n this.mutate({ startDelta: startDelta });\n }\n }\n };\n EventApi.prototype.setEnd = function (endInput, options) {\n if (options === void 0) { options = {}; }\n var dateEnv = this._calendar.dateEnv;\n var end;\n if (endInput != null) {\n end = dateEnv.createMarker(endInput);\n if (!end) {\n return; // TODO: warning if parsed bad\n }\n }\n if (this._instance) {\n if (end) {\n var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);\n this.mutate({ endDelta: endDelta });\n }\n else {\n this.mutate({ standardProps: { hasEnd: false } });\n }\n }\n };\n EventApi.prototype.setDates = function (startInput, endInput, options) {\n if (options === void 0) { options = {}; }\n var dateEnv = this._calendar.dateEnv;\n var standardProps = { allDay: options.allDay };\n var start = dateEnv.createMarker(startInput);\n var end;\n if (!start) {\n return; // TODO: warning if parsed bad\n }\n if (endInput != null) {\n end = dateEnv.createMarker(endInput);\n if (!end) { // TODO: warning if parsed bad\n return;\n }\n }\n if (this._instance) {\n var instanceRange = this._instance.range;\n // when computing the diff for an event being converted to all-day,\n // compute diff off of the all-day values the way event-mutation does.\n if (options.allDay === true) {\n instanceRange = computeAlignedDayRange(instanceRange);\n }\n var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);\n if (end) {\n var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);\n if (durationsEqual(startDelta, endDelta)) {\n this.mutate({ datesDelta: startDelta, standardProps: standardProps });\n }\n else {\n this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });\n }\n }\n else { // means \"clear the end\"\n standardProps.hasEnd = false;\n this.mutate({ datesDelta: startDelta, standardProps: standardProps });\n }\n }\n };\n EventApi.prototype.moveStart = function (deltaInput) {\n var delta = createDuration(deltaInput);\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ startDelta: delta });\n }\n };\n EventApi.prototype.moveEnd = function (deltaInput) {\n var delta = createDuration(deltaInput);\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ endDelta: delta });\n }\n };\n EventApi.prototype.moveDates = function (deltaInput) {\n var delta = createDuration(deltaInput);\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ datesDelta: delta });\n }\n };\n EventApi.prototype.setAllDay = function (allDay, options) {\n if (options === void 0) { options = {}; }\n var standardProps = { allDay: allDay };\n var maintainDuration = options.maintainDuration;\n if (maintainDuration == null) {\n maintainDuration = this._calendar.opt('allDayMaintainDuration');\n }\n if (this._def.allDay !== allDay) {\n standardProps.hasEnd = maintainDuration;\n }\n this.mutate({ standardProps: standardProps });\n };\n EventApi.prototype.formatRange = function (formatInput) {\n var dateEnv = this._calendar.dateEnv;\n var instance = this._instance;\n var formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator'));\n if (this._def.hasEnd) {\n return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n forcedStartTzo: instance.forcedStartTzo,\n forcedEndTzo: instance.forcedEndTzo\n });\n }\n else {\n return dateEnv.format(instance.range.start, formatter, {\n forcedTzo: instance.forcedStartTzo\n });\n }\n };\n EventApi.prototype.mutate = function (mutation) {\n var def = this._def;\n var instance = this._instance;\n if (instance) {\n this._calendar.dispatch({\n type: 'MUTATE_EVENTS',\n instanceId: instance.instanceId,\n mutation: mutation,\n fromApi: true\n });\n var eventStore = this._calendar.state.eventStore;\n this._def = eventStore.defs[def.defId];\n this._instance = eventStore.instances[instance.instanceId];\n }\n };\n EventApi.prototype.remove = function () {\n this._calendar.dispatch({\n type: 'REMOVE_EVENT_DEF',\n defId: this._def.defId\n });\n };\n Object.defineProperty(EventApi.prototype, \"source\", {\n get: function () {\n var sourceId = this._def.sourceId;\n if (sourceId) {\n return new EventSourceApi(this._calendar, this._calendar.state.eventSources[sourceId]);\n }\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"start\", {\n get: function () {\n return this._instance ?\n this._calendar.dateEnv.toDate(this._instance.range.start) :\n null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"end\", {\n get: function () {\n return (this._instance && this._def.hasEnd) ?\n this._calendar.dateEnv.toDate(this._instance.range.end) :\n null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"id\", {\n // computable props that all access the def\n // TODO: find a TypeScript-compatible way to do this at scale\n get: function () { return this._def.publicId; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"groupId\", {\n get: function () { return this._def.groupId; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"allDay\", {\n get: function () { return this._def.allDay; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"title\", {\n get: function () { return this._def.title; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"url\", {\n get: function () { return this._def.url; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"rendering\", {\n get: function () { return this._def.rendering; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"startEditable\", {\n get: function () { return this._def.ui.startEditable; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"durationEditable\", {\n get: function () { return this._def.ui.durationEditable; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"constraint\", {\n get: function () { return this._def.ui.constraints[0] || null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"overlap\", {\n get: function () { return this._def.ui.overlap; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"allow\", {\n get: function () { return this._def.ui.allows[0] || null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"backgroundColor\", {\n get: function () { return this._def.ui.backgroundColor; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"borderColor\", {\n get: function () { return this._def.ui.borderColor; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"textColor\", {\n get: function () { return this._def.ui.textColor; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"classNames\", {\n // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n get: function () { return this._def.ui.classNames; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"extendedProps\", {\n get: function () { return this._def.extendedProps; },\n enumerable: true,\n configurable: true\n });\n return EventApi;\n}());\nexport default EventApi;\n","import { invertRanges, intersectRanges } from '../datelib/date-range';\nimport { computeVisibleDayRange } from '../util/misc';\nimport EventApi from '../api/EventApi';\nimport { combineEventUis } from './event-ui';\nimport { mapHash } from '../util/object';\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\nexport function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {\n var inverseBgByGroupId = {};\n var inverseBgByDefId = {};\n var defByGroupId = {};\n var bgRanges = [];\n var fgRanges = [];\n var eventUis = compileEventUis(eventStore.defs, eventUiBases);\n for (var defId in eventStore.defs) {\n var def = eventStore.defs[defId];\n if (def.rendering === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId] = [];\n if (!defByGroupId[def.groupId]) {\n defByGroupId[def.groupId] = def;\n }\n }\n else {\n inverseBgByDefId[defId] = [];\n }\n }\n }\n for (var instanceId in eventStore.instances) {\n var instance = eventStore.instances[instanceId];\n var def = eventStore.defs[instance.defId];\n var ui = eventUis[def.defId];\n var origRange = instance.range;\n var normalRange = (!def.allDay && nextDayThreshold) ?\n computeVisibleDayRange(origRange, nextDayThreshold) :\n origRange;\n var slicedRange = intersectRanges(normalRange, framingRange);\n if (slicedRange) {\n if (def.rendering === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId].push(slicedRange);\n }\n else {\n inverseBgByDefId[instance.defId].push(slicedRange);\n }\n }\n else {\n (def.rendering === 'background' ? bgRanges : fgRanges).push({\n def: def,\n ui: ui,\n instance: instance,\n range: slicedRange,\n isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()\n });\n }\n }\n }\n for (var groupId in inverseBgByGroupId) { // BY GROUP\n var ranges = inverseBgByGroupId[groupId];\n var invertedRanges = invertRanges(ranges, framingRange);\n for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) {\n var invertedRange = invertedRanges_1[_i];\n var def = defByGroupId[groupId];\n var ui = eventUis[def.defId];\n bgRanges.push({\n def: def,\n ui: ui,\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false\n });\n }\n }\n for (var defId in inverseBgByDefId) {\n var ranges = inverseBgByDefId[defId];\n var invertedRanges = invertRanges(ranges, framingRange);\n for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) {\n var invertedRange = invertedRanges_2[_a];\n bgRanges.push({\n def: eventStore.defs[defId],\n ui: eventUis[defId],\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false\n });\n }\n }\n return { bg: bgRanges, fg: fgRanges };\n}\nexport function hasBgRendering(def) {\n return def.rendering === 'background' || def.rendering === 'inverse-background';\n}\nexport function filterSegsViaEls(context, segs, isMirror) {\n var calendar = context.calendar, view = context.view;\n if (calendar.hasPublicHandlers('eventRender')) {\n segs = segs.filter(function (seg) {\n var custom = calendar.publiclyTrigger('eventRender', [\n {\n event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),\n isMirror: isMirror,\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n // TODO: include seg.range once all components consistently generate it\n el: seg.el,\n view: view\n }\n ]);\n if (custom === false) { // means don't render at all\n return false;\n }\n else if (custom && custom !== true) {\n seg.el = custom;\n }\n return true;\n });\n }\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n setElSeg(seg.el, seg);\n }\n return segs;\n}\nfunction setElSeg(el, seg) {\n el.fcSeg = seg;\n}\nexport function getElSeg(el) {\n return el.fcSeg || null;\n}\n// event ui computation\nexport function compileEventUis(eventDefs, eventUiBases) {\n return mapHash(eventDefs, function (eventDef) {\n return compileEventUi(eventDef, eventUiBases);\n });\n}\nexport function compileEventUi(eventDef, eventUiBases) {\n var uis = [];\n if (eventUiBases['']) {\n uis.push(eventUiBases['']);\n }\n if (eventUiBases[eventDef.defId]) {\n uis.push(eventUiBases[eventDef.defId]);\n }\n uis.push(eventDef.ui);\n return combineEventUis(uis);\n}\n// triggers\nexport function triggerRenderedSegs(context, segs, isMirrors) {\n var calendar = context.calendar, view = context.view;\n if (calendar.hasPublicHandlers('eventPositioned')) {\n for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {\n var seg = segs_2[_i];\n calendar.publiclyTriggerAfterSizing('eventPositioned', [\n {\n event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),\n isMirror: isMirrors,\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n el: seg.el,\n view: view\n }\n ]);\n }\n }\n if (!calendar.state.loadingLevel) { // avoid initial empty state while pending\n calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once\n }\n}\nexport function triggerWillRemoveSegs(context, segs, isMirrors) {\n var calendar = context.calendar, view = context.view;\n for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) {\n var seg = segs_3[_i];\n calendar.trigger('eventElRemove', seg.el);\n }\n if (calendar.hasPublicHandlers('eventDestroy')) {\n for (var _a = 0, segs_4 = segs; _a < segs_4.length; _a++) {\n var seg = segs_4[_a];\n calendar.publiclyTrigger('eventDestroy', [\n {\n event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),\n isMirror: isMirrors,\n el: seg.el,\n view: view\n }\n ]);\n }\n }\n}\n// is-interactable\nexport function computeEventDraggable(context, eventDef, eventUi) {\n var calendar = context.calendar, view = context.view;\n var transformers = calendar.pluginSystem.hooks.isDraggableTransformers;\n var val = eventUi.startEditable;\n for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {\n var transformer = transformers_1[_i];\n val = transformer(val, eventDef, eventUi, view);\n }\n return val;\n}\nexport function computeEventStartResizable(context, eventDef, eventUi) {\n return eventUi.durationEditable && context.options.eventResizableFromStart;\n}\nexport function computeEventEndResizable(context, eventDef, eventUi) {\n return eventUi.durationEditable;\n}\n","import * as tslib_1 from \"tslib\";\nimport { createEmptyEventStore } from './event-store';\nimport { computeAlignedDayRange } from '../util/misc';\nimport { startOfDay } from '../datelib/marker';\nimport { compileEventUis } from '../component/event-rendering';\n// applies the mutation to ALL defs/instances within the event store\nexport function applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) {\n var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);\n var dest = createEmptyEventStore();\n for (var defId in eventStore.defs) {\n var def = eventStore.defs[defId];\n dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar);\n }\n for (var instanceId in eventStore.instances) {\n var instance = eventStore.instances[instanceId];\n var def = dest.defs[instance.defId]; // important to grab the newly modified def\n dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar);\n }\n return dest;\n}\nfunction applyMutationToEventDef(eventDef, eventConfig, mutation, appliers, calendar) {\n var standardProps = mutation.standardProps || {};\n // if hasEnd has not been specified, guess a good value based on deltas.\n // if duration will change, there's no way the default duration will persist,\n // and thus, we need to mark the event as having a real end\n if (standardProps.hasEnd == null &&\n eventConfig.durationEditable &&\n (mutation.startDelta || mutation.endDelta)) {\n standardProps.hasEnd = true; // TODO: is this mutation okay?\n }\n var copy = tslib_1.__assign({}, eventDef, standardProps, { ui: tslib_1.__assign({}, eventDef.ui, standardProps.ui) });\n if (mutation.extendedProps) {\n copy.extendedProps = tslib_1.__assign({}, copy.extendedProps, mutation.extendedProps);\n }\n for (var _i = 0, appliers_1 = appliers; _i < appliers_1.length; _i++) {\n var applier = appliers_1[_i];\n applier(copy, mutation, calendar);\n }\n if (!copy.hasEnd && calendar.opt('forceEventDuration')) {\n copy.hasEnd = true;\n }\n return copy;\n}\nfunction applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef\neventConfig, mutation, calendar) {\n var dateEnv = calendar.dateEnv;\n var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;\n var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;\n var copy = tslib_1.__assign({}, eventInstance);\n if (forceAllDay) {\n copy.range = computeAlignedDayRange(copy.range);\n }\n if (mutation.datesDelta && eventConfig.startEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.datesDelta),\n end: dateEnv.add(copy.range.end, mutation.datesDelta)\n };\n }\n if (mutation.startDelta && eventConfig.durationEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.startDelta),\n end: copy.range.end\n };\n }\n if (mutation.endDelta && eventConfig.durationEditable) {\n copy.range = {\n start: copy.range.start,\n end: dateEnv.add(copy.range.end, mutation.endDelta)\n };\n }\n if (clearEnd) {\n copy.range = {\n start: copy.range.start,\n end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)\n };\n }\n // in case event was all-day but the supplied deltas were not\n // better util for this?\n if (eventDef.allDay) {\n copy.range = {\n start: startOfDay(copy.range.start),\n end: startOfDay(copy.range.end)\n };\n }\n // handle invalid durations\n if (copy.range.end < copy.range.start) {\n copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start);\n }\n return copy;\n}\n","import * as tslib_1 from \"tslib\";\nimport { filterHash, mapHash } from '../util/object';\nimport { applyMutationToEventStore } from '../structs/event-mutation';\nimport { mergeEventStores, getRelevantEvents, createEmptyEventStore, filterEventStoreDefs, parseEvents, expandRecurring, transformRawEvents } from '../structs/event-store';\nexport default function (eventStore, action, eventSources, dateProfile, calendar) {\n switch (action.type) {\n case 'RECEIVE_EVENTS': // raw\n return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, calendar);\n case 'ADD_EVENTS': // already parsed, but not expanded\n return addEvent(eventStore, action.eventStore, // new ones\n dateProfile ? dateProfile.activeRange : null, calendar);\n case 'MERGE_EVENTS': // already parsed and expanded\n return mergeEventStores(eventStore, action.eventStore);\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'SET_DATE':\n case 'SET_VIEW_TYPE':\n if (dateProfile) {\n return expandRecurring(eventStore, dateProfile.activeRange, calendar);\n }\n else {\n return eventStore;\n }\n case 'CHANGE_TIMEZONE':\n return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv);\n case 'MUTATE_EVENTS':\n return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar);\n case 'REMOVE_EVENT_INSTANCES':\n return excludeInstances(eventStore, action.instances);\n case 'REMOVE_EVENT_DEF':\n return filterEventStoreDefs(eventStore, function (eventDef) {\n return eventDef.defId !== action.defId;\n });\n case 'REMOVE_EVENT_SOURCE':\n return excludeEventsBySourceId(eventStore, action.sourceId);\n case 'REMOVE_ALL_EVENT_SOURCES':\n return filterEventStoreDefs(eventStore, function (eventDef) {\n return !eventDef.sourceId; // only keep events with no source id\n });\n case 'REMOVE_ALL_EVENTS':\n return createEmptyEventStore();\n case 'RESET_EVENTS':\n return {\n defs: eventStore.defs,\n instances: eventStore.instances\n };\n default:\n return eventStore;\n }\n}\nfunction receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, calendar) {\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n ) {\n var subset = parseEvents(transformRawEvents(rawEvents, eventSource, calendar), eventSource.sourceId, calendar);\n if (fetchRange) {\n subset = expandRecurring(subset, fetchRange, calendar);\n }\n return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);\n }\n return eventStore;\n}\nfunction addEvent(eventStore, subset, expandRange, calendar) {\n if (expandRange) {\n subset = expandRecurring(subset, expandRange, calendar);\n }\n return mergeEventStores(eventStore, subset);\n}\nfunction rezoneDates(eventStore, oldDateEnv, newDateEnv) {\n var defs = eventStore.defs;\n var instances = mapHash(eventStore.instances, function (instance) {\n var def = defs[instance.defId];\n if (def.allDay || def.recurringDef) {\n return instance; // isn't dependent on timezone\n }\n else {\n return tslib_1.__assign({}, instance, { range: {\n start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))\n }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });\n }\n });\n return { defs: defs, instances: instances };\n}\nfunction applyMutationToRelated(eventStore, instanceId, mutation, fromApi, calendar) {\n var relevant = getRelevantEvents(eventStore, instanceId);\n var eventConfigBase = fromApi ?\n { '': {\n startEditable: true,\n durationEditable: true,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: []\n } } :\n calendar.eventUiBases;\n relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar);\n return mergeEventStores(eventStore, relevant);\n}\nfunction excludeEventsBySourceId(eventStore, sourceId) {\n return filterEventStoreDefs(eventStore, function (eventDef) {\n return eventDef.sourceId !== sourceId;\n });\n}\n// QUESTION: why not just return instances? do a general object-property-exclusion util\nexport function excludeInstances(eventStore, removals) {\n return {\n defs: eventStore.defs,\n instances: filterHash(eventStore.instances, function (instance) {\n return !removals[instance.instanceId];\n })\n };\n}\n","import * as tslib_1 from \"tslib\";\nimport { expandRecurring, filterEventStoreDefs, parseEvents, createEmptyEventStore } from './structs/event-store';\nimport { rangeContainsRange, rangesIntersect } from './datelib/date-range';\nimport EventApi from './api/EventApi';\nimport { compileEventUis } from './component/event-rendering';\nimport { excludeInstances } from './reducers/eventStore';\nimport { mapHash } from './util/object';\n// high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\nexport function isInteractionValid(interaction, calendar) {\n return isNewPropsValid({ eventDrag: interaction }, calendar); // HACK: the eventDrag props is used for ALL interactions\n}\nexport function isDateSelectionValid(dateSelection, calendar) {\n return isNewPropsValid({ dateSelection: dateSelection }, calendar);\n}\nfunction isNewPropsValid(newProps, calendar) {\n var view = calendar.view;\n var props = tslib_1.__assign({ businessHours: view ? view.props.businessHours : createEmptyEventStore(), dateSelection: '', eventStore: calendar.state.eventStore, eventUiBases: calendar.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);\n return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar);\n}\nexport function isPropsValid(state, calendar, dateSpanMeta, filterConfig) {\n if (dateSpanMeta === void 0) { dateSpanMeta = {}; }\n if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {\n return false;\n }\n if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {\n return false;\n }\n return true;\n}\n// Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig) {\n var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions\n var subjectEventStore = interaction.mutatedEvents;\n var subjectDefs = subjectEventStore.defs;\n var subjectInstances = subjectEventStore.instances;\n var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?\n state.eventUiBases :\n { '': calendar.selectionConfig } // if not a real event, validate as a selection\n );\n if (filterConfig) {\n subjectConfigs = mapHash(subjectConfigs, filterConfig);\n }\n var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too?\n var otherDefs = otherEventStore.defs;\n var otherInstances = otherEventStore.instances;\n var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);\n for (var subjectInstanceId in subjectInstances) {\n var subjectInstance = subjectInstances[subjectInstanceId];\n var subjectRange = subjectInstance.range;\n var subjectConfig = subjectConfigs[subjectInstance.defId];\n var subjectDef = subjectDefs[subjectInstance.defId];\n // constraint\n if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) {\n return false;\n }\n // overlap\n var overlapFunc = calendar.opt('eventOverlap');\n if (typeof overlapFunc !== 'function') {\n overlapFunc = null;\n }\n for (var otherInstanceId in otherInstances) {\n var otherInstance = otherInstances[otherInstanceId];\n // intersect! evaluate\n if (rangesIntersect(subjectRange, otherInstance.range)) {\n var otherOverlap = otherConfigs[otherInstance.defId].overlap;\n // consider the other event's overlap. only do this if the subject event is a \"real\" event\n if (otherOverlap === false && interaction.isEvent) {\n return false;\n }\n if (subjectConfig.overlap === false) {\n return false;\n }\n if (overlapFunc && !overlapFunc(new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event\n new EventApi(calendar, subjectDef, subjectInstance) // moving event\n )) {\n return false;\n }\n }\n }\n // allow (a function)\n var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state\n for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {\n var subjectAllow = _a[_i];\n var subjectDateSpan = tslib_1.__assign({}, dateSpanMeta, { range: subjectInstance.range, allDay: subjectDef.allDay });\n var origDef = calendarEventStore.defs[subjectDef.defId];\n var origInstance = calendarEventStore.instances[subjectInstanceId];\n var eventApi = void 0;\n if (origDef) { // was previously in the calendar\n eventApi = new EventApi(calendar, origDef, origInstance);\n }\n else { // was an external event\n eventApi = new EventApi(calendar, subjectDef); // no instance, because had no dates\n }\n if (!subjectAllow(calendar.buildDateSpanApi(subjectDateSpan), eventApi)) {\n return false;\n }\n }\n }\n return true;\n}\n// Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig) {\n var relevantEventStore = state.eventStore;\n var relevantDefs = relevantEventStore.defs;\n var relevantInstances = relevantEventStore.instances;\n var selection = state.dateSelection;\n var selectionRange = selection.range;\n var selectionConfig = calendar.selectionConfig;\n if (filterConfig) {\n selectionConfig = filterConfig(selectionConfig);\n }\n // constraint\n if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) {\n return false;\n }\n // overlap\n var overlapFunc = calendar.opt('selectOverlap');\n if (typeof overlapFunc !== 'function') {\n overlapFunc = null;\n }\n for (var relevantInstanceId in relevantInstances) {\n var relevantInstance = relevantInstances[relevantInstanceId];\n // intersect! evaluate\n if (rangesIntersect(selectionRange, relevantInstance.range)) {\n if (selectionConfig.overlap === false) {\n return false;\n }\n if (overlapFunc && !overlapFunc(new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance))) {\n return false;\n }\n }\n }\n // allow (a function)\n for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {\n var selectionAllow = _a[_i];\n var fullDateSpan = tslib_1.__assign({}, dateSpanMeta, selection);\n if (!selectionAllow(calendar.buildDateSpanApi(fullDateSpan), null)) {\n return false;\n }\n }\n return true;\n}\n// Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\nfunction allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, calendar) {\n for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {\n var constraint = constraints_1[_i];\n if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar), subjectRange)) {\n return false;\n }\n }\n return true;\n}\nfunction constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours\notherEventStore, // for if constraint is an even group ID\nbusinessHoursUnexpanded, // for if constraint is 'businessHours'\ncalendar // for expanding businesshours\n) {\n if (constraint === 'businessHours') {\n return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, calendar));\n }\n else if (typeof constraint === 'string') { // an group ID\n return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) {\n return eventDef.groupId === constraint;\n }));\n }\n else if (typeof constraint === 'object' && constraint) { // non-null object\n return eventStoreToRanges(expandRecurring(constraint, subjectRange, calendar));\n }\n return []; // if it's false\n}\n// TODO: move to event-store file?\nfunction eventStoreToRanges(eventStore) {\n var instances = eventStore.instances;\n var ranges = [];\n for (var instanceId in instances) {\n ranges.push(instances[instanceId].range);\n }\n return ranges;\n}\n// TODO: move to geom file?\nfunction anyRangesContainRange(outerRanges, innerRange) {\n for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {\n var outerRange = outerRanges_1[_i];\n if (rangeContainsRange(outerRange, innerRange)) {\n return true;\n }\n }\n return false;\n}\n// Parsing\n// ------------------------------------------------------------------------------------------------------------------------\nexport function normalizeConstraint(input, calendar) {\n if (Array.isArray(input)) {\n return parseEvents(input, '', calendar, true); // allowOpenRange=true\n }\n else if (typeof input === 'object' && input) { // non-null object\n return parseEvents([input], '', calendar, true); // allowOpenRange=true\n }\n else if (input != null) {\n return String(input);\n }\n else {\n return null;\n }\n}\n","export function htmlEscape(s) {\n return (s + '').replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n .replace(/\\n/g, '
');\n}\n// Given a hash of CSS properties, returns a string of CSS.\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\nexport function cssToStr(cssProps) {\n var statements = [];\n for (var name_1 in cssProps) {\n var val = cssProps[name_1];\n if (val != null && val !== '') {\n statements.push(name_1 + ':' + val);\n }\n }\n return statements.join(';');\n}\n// Given an object hash of HTML attribute names to values,\n// generates a string that can be injected between < > in HTML\nexport function attrsToStr(attrs) {\n var parts = [];\n for (var name_2 in attrs) {\n var val = attrs[name_2];\n if (val != null) {\n parts.push(name_2 + '=\"' + htmlEscape(val) + '\"');\n }\n }\n return parts.join(' ');\n}\nexport function parseClassName(raw) {\n if (Array.isArray(raw)) {\n return raw;\n }\n else if (typeof raw === 'string') {\n return raw.split(/\\s+/);\n }\n else {\n return [];\n }\n}\n","import { normalizeConstraint } from '../validation';\nimport { parseClassName } from '../util/html';\nimport { refineProps, capitaliseFirstLetter } from '../util/misc';\nexport var UNSCOPED_EVENT_UI_PROPS = {\n editable: Boolean,\n startEditable: Boolean,\n durationEditable: Boolean,\n constraint: null,\n overlap: null,\n allow: null,\n className: parseClassName,\n classNames: parseClassName,\n color: String,\n backgroundColor: String,\n borderColor: String,\n textColor: String\n};\nexport function processUnscopedUiProps(rawProps, calendar, leftovers) {\n var props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers);\n var constraint = normalizeConstraint(props.constraint, calendar);\n return {\n startEditable: props.startEditable != null ? props.startEditable : props.editable,\n durationEditable: props.durationEditable != null ? props.durationEditable : props.editable,\n constraints: constraint != null ? [constraint] : [],\n overlap: props.overlap,\n allows: props.allow != null ? [props.allow] : [],\n backgroundColor: props.backgroundColor || props.color,\n borderColor: props.borderColor || props.color,\n textColor: props.textColor,\n classNames: props.classNames.concat(props.className)\n };\n}\nexport function processScopedUiProps(prefix, rawScoped, calendar, leftovers) {\n var rawUnscoped = {};\n var wasFound = {};\n for (var key in UNSCOPED_EVENT_UI_PROPS) {\n var scopedKey = prefix + capitaliseFirstLetter(key);\n rawUnscoped[key] = rawScoped[scopedKey];\n wasFound[scopedKey] = true;\n }\n if (prefix === 'event') {\n rawUnscoped.editable = rawScoped.editable; // special case. there is no 'eventEditable', just 'editable'\n }\n if (leftovers) {\n for (var key in rawScoped) {\n if (!wasFound[key]) {\n leftovers[key] = rawScoped[key];\n }\n }\n }\n return processUnscopedUiProps(rawUnscoped, calendar);\n}\nvar EMPTY_EVENT_UI = {\n startEditable: null,\n durationEditable: null,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: []\n};\n// prevent against problems with <2 args!\nexport function combineEventUis(uis) {\n return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);\n}\nfunction combineTwoEventUis(item0, item1) {\n return {\n startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n constraints: item0.constraints.concat(item1.constraints),\n overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n allows: item0.allows.concat(item1.allows),\n backgroundColor: item1.backgroundColor || item0.backgroundColor,\n borderColor: item1.borderColor || item0.borderColor,\n textColor: item1.textColor || item0.textColor,\n classNames: item0.classNames.concat(item1.classNames)\n };\n}\n","import { refineProps } from '../util/misc';\nimport { startOfDay } from '../datelib/marker';\nimport { parseRecurring } from './recurring-event';\nimport { processUnscopedUiProps } from '../component/event-ui';\nimport { __assign } from 'tslib';\nexport var NON_DATE_PROPS = {\n id: String,\n groupId: String,\n title: String,\n url: String,\n rendering: String,\n extendedProps: null\n};\nexport var DATE_PROPS = {\n start: null,\n date: null,\n end: null,\n allDay: null\n};\nvar uid = 0;\nexport function parseEvent(raw, sourceId, calendar, allowOpenRange) {\n var allDayDefault = computeIsAllDayDefault(sourceId, calendar);\n var leftovers0 = {};\n var recurringRes = parseRecurring(raw, // raw, but with single-event stuff stripped out\n allDayDefault, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes, leftovers0 // will populate with non-recurring props\n );\n if (recurringRes) {\n var def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar);\n def.recurringDef = {\n typeId: recurringRes.typeId,\n typeData: recurringRes.typeData,\n duration: recurringRes.duration\n };\n return { def: def, instance: null };\n }\n else {\n var leftovers1 = {};\n var singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange);\n if (singleRes) {\n var def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar);\n var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);\n return { def: def, instance: instance };\n }\n }\n return null;\n}\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\nThe EventNonDateInput has been normalized (id => publicId, etc).\n*/\nexport function parseEventDef(raw, sourceId, allDay, hasEnd, calendar) {\n var leftovers = {};\n var def = pluckNonDateProps(raw, calendar, leftovers);\n def.defId = String(uid++);\n def.sourceId = sourceId;\n def.allDay = allDay;\n def.hasEnd = hasEnd;\n for (var _i = 0, _a = calendar.pluginSystem.hooks.eventDefParsers; _i < _a.length; _i++) {\n var eventDefParser = _a[_i];\n var newLeftovers = {};\n eventDefParser(def, leftovers, newLeftovers);\n leftovers = newLeftovers;\n }\n def.extendedProps = __assign(leftovers, def.extendedProps || {});\n // help out EventApi from having user modify props\n Object.freeze(def.ui.classNames);\n Object.freeze(def.extendedProps);\n return def;\n}\nexport function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {\n return {\n instanceId: String(uid++),\n defId: defId,\n range: range,\n forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo\n };\n}\nfunction parseSingle(raw, allDayDefault, calendar, leftovers, allowOpenRange) {\n var props = pluckDateProps(raw, leftovers);\n var allDay = props.allDay;\n var startMeta;\n var startMarker = null;\n var hasEnd = false;\n var endMeta;\n var endMarker = null;\n startMeta = calendar.dateEnv.createMarkerMeta(props.start);\n if (startMeta) {\n startMarker = startMeta.marker;\n }\n else if (!allowOpenRange) {\n return null;\n }\n if (props.end != null) {\n endMeta = calendar.dateEnv.createMarkerMeta(props.end);\n }\n if (allDay == null) {\n if (allDayDefault != null) {\n allDay = allDayDefault;\n }\n else {\n // fall back to the date props LAST\n allDay = (!startMeta || startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified);\n }\n }\n if (allDay && startMarker) {\n startMarker = startOfDay(startMarker);\n }\n if (endMeta) {\n endMarker = endMeta.marker;\n if (allDay) {\n endMarker = startOfDay(endMarker);\n }\n if (startMarker && endMarker <= startMarker) {\n endMarker = null;\n }\n }\n if (endMarker) {\n hasEnd = true;\n }\n else if (!allowOpenRange) {\n hasEnd = calendar.opt('forceEventDuration') || false;\n endMarker = calendar.dateEnv.add(startMarker, allDay ?\n calendar.defaultAllDayEventDuration :\n calendar.defaultTimedEventDuration);\n }\n return {\n allDay: allDay,\n hasEnd: hasEnd,\n range: { start: startMarker, end: endMarker },\n forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n forcedEndTzo: endMeta ? endMeta.forcedTzo : null\n };\n}\nfunction pluckDateProps(raw, leftovers) {\n var props = refineProps(raw, DATE_PROPS, {}, leftovers);\n props.start = (props.start !== null) ? props.start : props.date;\n delete props.date;\n return props;\n}\nfunction pluckNonDateProps(raw, calendar, leftovers) {\n var preLeftovers = {};\n var props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers);\n var ui = processUnscopedUiProps(preLeftovers, calendar, leftovers);\n props.publicId = props.id;\n delete props.id;\n props.ui = ui;\n return props;\n}\nfunction computeIsAllDayDefault(sourceId, calendar) {\n var res = null;\n if (sourceId) {\n var source = calendar.state.eventSources[sourceId];\n res = source.allDayDefault;\n }\n if (res == null) {\n res = calendar.opt('allDayDefault');\n }\n return res;\n}\n","import * as tslib_1 from \"tslib\";\nimport { parseEvents } from './event-store';\nvar DEF_DEFAULTS = {\n startTime: '09:00',\n endTime: '17:00',\n daysOfWeek: [1, 2, 3, 4, 5],\n rendering: 'inverse-background',\n classNames: 'fc-nonbusiness',\n groupId: '_businessHours' // so multiple defs get grouped\n};\n/*\nTODO: pass around as EventDefHash!!!\n*/\nexport function parseBusinessHours(input, calendar) {\n return parseEvents(refineInputs(input), '', calendar);\n}\nfunction refineInputs(input) {\n var rawDefs;\n if (input === true) {\n rawDefs = [{}]; // will get DEF_DEFAULTS verbatim\n }\n else if (Array.isArray(input)) {\n // if specifying an array, every sub-definition NEEDS a day-of-week\n rawDefs = input.filter(function (rawDef) {\n return rawDef.daysOfWeek;\n });\n }\n else if (typeof input === 'object' && input) { // non-null object\n rawDefs = [input];\n }\n else { // is probably false\n rawDefs = [];\n }\n rawDefs = rawDefs.map(function (rawDef) {\n return tslib_1.__assign({}, DEF_DEFAULTS, rawDef);\n });\n return rawDefs;\n}\n","import { isArraysEqual } from '../util/array';\nexport function memoizeRendering(renderFunc, unrenderFunc, dependencies) {\n if (dependencies === void 0) { dependencies = []; }\n var dependents = [];\n var thisContext;\n var prevArgs;\n function unrender() {\n if (prevArgs) {\n for (var _i = 0, dependents_1 = dependents; _i < dependents_1.length; _i++) {\n var dependent = dependents_1[_i];\n dependent.unrender();\n }\n if (unrenderFunc) {\n unrenderFunc.apply(thisContext, prevArgs);\n }\n prevArgs = null;\n }\n }\n function res() {\n if (!prevArgs || !isArraysEqual(prevArgs, arguments)) {\n unrender();\n thisContext = this;\n prevArgs = arguments;\n renderFunc.apply(this, arguments);\n }\n }\n res.dependents = dependents;\n res.unrender = unrender;\n for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {\n var dependency = dependencies_1[_i];\n dependency.dependents.push(res);\n }\n return res;\n}\n","import { createEmptyEventStore } from '../structs/event-store';\nimport { mapHash } from '../util/object';\nimport { memoize } from '../util/memoize';\nimport { combineEventUis } from './event-ui';\nimport { __assign } from 'tslib';\nvar EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere\nvar Splitter = /** @class */ (function () {\n function Splitter() {\n this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);\n this.splitDateSelection = memoize(this._splitDateSpan);\n this.splitEventStore = memoize(this._splitEventStore);\n this.splitIndividualUi = memoize(this._splitIndividualUi);\n this.splitEventDrag = memoize(this._splitInteraction);\n this.splitEventResize = memoize(this._splitInteraction);\n this.eventUiBuilders = {}; // TODO: typescript protection\n }\n Splitter.prototype.splitProps = function (props) {\n var _this = this;\n var keyInfos = this.getKeyInfo(props);\n var defKeys = this.getKeysForEventDefs(props.eventStore);\n var dateSelections = this.splitDateSelection(props.dateSelection);\n var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*\n var eventStores = this.splitEventStore(props.eventStore, defKeys);\n var eventDrags = this.splitEventDrag(props.eventDrag);\n var eventResizes = this.splitEventResize(props.eventResize);\n var splitProps = {};\n this.eventUiBuilders = mapHash(keyInfos, function (info, key) {\n return _this.eventUiBuilders[key] || memoize(buildEventUiForKey);\n });\n for (var key in keyInfos) {\n var keyInfo = keyInfos[key];\n var eventStore = eventStores[key] || EMPTY_EVENT_STORE;\n var buildEventUi = this.eventUiBuilders[key];\n splitProps[key] = {\n businessHours: keyInfo.businessHours || props.businessHours,\n dateSelection: dateSelections[key] || null,\n eventStore: eventStore,\n eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n eventDrag: eventDrags[key] || null,\n eventResize: eventResizes[key] || null\n };\n }\n return splitProps;\n };\n Splitter.prototype._splitDateSpan = function (dateSpan) {\n var dateSpans = {};\n if (dateSpan) {\n var keys = this.getKeysForDateSpan(dateSpan);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n dateSpans[key] = dateSpan;\n }\n }\n return dateSpans;\n };\n Splitter.prototype._getKeysForEventDefs = function (eventStore) {\n var _this = this;\n return mapHash(eventStore.defs, function (eventDef) {\n return _this.getKeysForEventDef(eventDef);\n });\n };\n Splitter.prototype._splitEventStore = function (eventStore, defKeys) {\n var defs = eventStore.defs, instances = eventStore.instances;\n var splitStores = {};\n for (var defId in defs) {\n for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {\n var key = _a[_i];\n if (!splitStores[key]) {\n splitStores[key] = createEmptyEventStore();\n }\n splitStores[key].defs[defId] = defs[defId];\n }\n }\n for (var instanceId in instances) {\n var instance = instances[instanceId];\n for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) {\n var key = _c[_b];\n if (splitStores[key]) { // must have already been created\n splitStores[key].instances[instanceId] = instance;\n }\n }\n }\n return splitStores;\n };\n Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) {\n var splitHashes = {};\n for (var defId in eventUiBases) {\n if (defId) { // not the '' key\n for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {\n var key = _a[_i];\n if (!splitHashes[key]) {\n splitHashes[key] = {};\n }\n splitHashes[key][defId] = eventUiBases[defId];\n }\n }\n }\n return splitHashes;\n };\n Splitter.prototype._splitInteraction = function (interaction) {\n var splitStates = {};\n if (interaction) {\n var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar\n );\n // can't rely on defKeys because event data is mutated\n var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);\n var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);\n var populate = function (key) {\n if (!splitStates[key]) {\n splitStates[key] = {\n affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE,\n mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE,\n isEvent: interaction.isEvent,\n origSeg: interaction.origSeg\n };\n }\n };\n for (var key in affectedStores_1) {\n populate(key);\n }\n for (var key in mutatedStores_1) {\n populate(key);\n }\n }\n return splitStates;\n };\n return Splitter;\n}());\nexport default Splitter;\nfunction buildEventUiForKey(allUi, eventUiForKey, individualUi) {\n var baseParts = [];\n if (allUi) {\n baseParts.push(allUi);\n }\n if (eventUiForKey) {\n baseParts.push(eventUiForKey);\n }\n var stuff = {\n '': combineEventUis(baseParts)\n };\n if (individualUi) {\n __assign(stuff, individualUi);\n }\n return stuff;\n}\n","import { htmlEscape, attrsToStr } from '../util/html';\nimport { startOfDay, addDays, DAY_IDS } from '../datelib/marker';\nimport { rangeContainsMarker } from '../datelib/date-range';\n// Generates HTML for an anchor to another view into the calendar.\n// Will either generate an
tag or a non-clickable tag, depending on enabled settings.\n// `gotoOptions` can either be a DateMarker, or an object with the form:\n// { date, type, forceOff }\n// `type` is a view-type like \"day\" or \"week\". default value is \"day\".\n// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\nexport function buildGotoAnchorHtml(allOptions, dateEnv, gotoOptions, attrs, innerHtml) {\n var date;\n var type;\n var forceOff;\n var finalOptions;\n if (gotoOptions instanceof Date) {\n date = gotoOptions; // a single date-like input\n }\n else {\n date = gotoOptions.date;\n type = gotoOptions.type;\n forceOff = gotoOptions.forceOff;\n }\n finalOptions = {\n date: dateEnv.formatIso(date, { omitTime: true }),\n type: type || 'day'\n };\n if (typeof attrs === 'string') {\n innerHtml = attrs;\n attrs = null;\n }\n attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space\n innerHtml = innerHtml || '';\n if (!forceOff && allOptions.navLinks) {\n return '' +\n innerHtml +\n '';\n }\n else {\n return '' +\n innerHtml +\n '';\n }\n}\nexport function getAllDayHtml(allOptions) {\n return allOptions.allDayHtml || htmlEscape(allOptions.allDayText);\n}\n// Computes HTML classNames for a single-day element\nexport function getDayClasses(date, dateProfile, context, noThemeHighlight) {\n var calendar = context.calendar, options = context.options, theme = context.theme, dateEnv = context.dateEnv;\n var classes = [];\n var todayStart;\n var todayEnd;\n if (!rangeContainsMarker(dateProfile.activeRange, date)) {\n classes.push('fc-disabled-day');\n }\n else {\n classes.push('fc-' + DAY_IDS[date.getUTCDay()]);\n if (options.monthMode &&\n dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) {\n classes.push('fc-other-month');\n }\n todayStart = startOfDay(calendar.getNow());\n todayEnd = addDays(todayStart, 1);\n if (date < todayStart) {\n classes.push('fc-past');\n }\n else if (date >= todayEnd) {\n classes.push('fc-future');\n }\n else {\n classes.push('fc-today');\n if (noThemeHighlight !== true) {\n classes.push(theme.getClass('today'));\n }\n }\n }\n return classes;\n}\n","// given a function that resolves a result asynchronously.\n// the function can either call passed-in success and failure callbacks,\n// or it can return a promise.\n// if you need to pass additional params to func, bind them first.\nexport function unpromisify(func, success, failure) {\n // guard against success/failure callbacks being called more than once\n // and guard against a promise AND callback being used together.\n var isResolved = false;\n var wrappedSuccess = function () {\n if (!isResolved) {\n isResolved = true;\n success.apply(this, arguments);\n }\n };\n var wrappedFailure = function () {\n if (!isResolved) {\n isResolved = true;\n if (failure) {\n failure.apply(this, arguments);\n }\n }\n };\n var res = func(wrappedSuccess, wrappedFailure);\n if (res && typeof res.then === 'function') {\n res.then(wrappedSuccess, wrappedFailure);\n }\n}\n","var Mixin = /** @class */ (function () {\n function Mixin() {\n }\n // mix into a CLASS\n Mixin.mixInto = function (destClass) {\n this.mixIntoObj(destClass.prototype);\n };\n // mix into ANY object\n Mixin.mixIntoObj = function (destObj) {\n var _this = this;\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\n if (!destObj[name]) { // if destination doesn't already define it\n destObj[name] = _this.prototype[name];\n }\n });\n };\n /*\n will override existing methods\n TODO: remove! not used anymore\n */\n Mixin.mixOver = function (destClass) {\n var _this = this;\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\n destClass.prototype[name] = _this.prototype[name];\n });\n };\n return Mixin;\n}());\nexport default Mixin;\n","/*\nUSAGE:\n import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\nin class:\n on: EmitterInterface['on']\n one: EmitterInterface['one']\n off: EmitterInterface['off']\n trigger: EmitterInterface['trigger']\n triggerWith: EmitterInterface['triggerWith']\n hasHandlers: EmitterInterface['hasHandlers']\nafter class:\n EmitterMixin.mixInto(TheClass)\n*/\nimport * as tslib_1 from \"tslib\";\nimport { applyAll } from '../util/misc';\nimport Mixin from './Mixin';\nvar EmitterMixin = /** @class */ (function (_super) {\n tslib_1.__extends(EmitterMixin, _super);\n function EmitterMixin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n EmitterMixin.prototype.on = function (type, handler) {\n addToHash(this._handlers || (this._handlers = {}), type, handler);\n return this; // for chaining\n };\n // todo: add comments\n EmitterMixin.prototype.one = function (type, handler) {\n addToHash(this._oneHandlers || (this._oneHandlers = {}), type, handler);\n return this; // for chaining\n };\n EmitterMixin.prototype.off = function (type, handler) {\n if (this._handlers) {\n removeFromHash(this._handlers, type, handler);\n }\n if (this._oneHandlers) {\n removeFromHash(this._oneHandlers, type, handler);\n }\n return this; // for chaining\n };\n EmitterMixin.prototype.trigger = function (type) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n this.triggerWith(type, this, args);\n return this; // for chaining\n };\n EmitterMixin.prototype.triggerWith = function (type, context, args) {\n if (this._handlers) {\n applyAll(this._handlers[type], context, args);\n }\n if (this._oneHandlers) {\n applyAll(this._oneHandlers[type], context, args);\n delete this._oneHandlers[type]; // will never fire again\n }\n return this; // for chaining\n };\n EmitterMixin.prototype.hasHandlers = function (type) {\n return (this._handlers && this._handlers[type] && this._handlers[type].length) ||\n (this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length);\n };\n return EmitterMixin;\n}(Mixin));\nexport default EmitterMixin;\nfunction addToHash(hash, type, handler) {\n (hash[type] || (hash[type] = []))\n .push(handler);\n}\nfunction removeFromHash(hash, type, handler) {\n if (handler) {\n if (hash[type]) {\n hash[type] = hash[type].filter(function (func) {\n return func !== handler;\n });\n }\n }\n else {\n delete hash[type]; // remove all handler funcs for this type\n }\n}\n","/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\nvar PositionCache = /** @class */ (function () {\n function PositionCache(originEl, els, isHorizontal, isVertical) {\n this.originEl = originEl;\n this.els = els;\n this.isHorizontal = isHorizontal;\n this.isVertical = isVertical;\n }\n // Queries the els for coordinates and stores them.\n // Call this method before using and of the get* methods below.\n PositionCache.prototype.build = function () {\n var originEl = this.originEl;\n var originClientRect = this.originClientRect =\n originEl.getBoundingClientRect(); // relative to viewport top-left\n if (this.isHorizontal) {\n this.buildElHorizontals(originClientRect.left);\n }\n if (this.isVertical) {\n this.buildElVerticals(originClientRect.top);\n }\n };\n // Populates the left/right internal coordinate arrays\n PositionCache.prototype.buildElHorizontals = function (originClientLeft) {\n var lefts = [];\n var rights = [];\n for (var _i = 0, _a = this.els; _i < _a.length; _i++) {\n var el = _a[_i];\n var rect = el.getBoundingClientRect();\n lefts.push(rect.left - originClientLeft);\n rights.push(rect.right - originClientLeft);\n }\n this.lefts = lefts;\n this.rights = rights;\n };\n // Populates the top/bottom internal coordinate arrays\n PositionCache.prototype.buildElVerticals = function (originClientTop) {\n var tops = [];\n var bottoms = [];\n for (var _i = 0, _a = this.els; _i < _a.length; _i++) {\n var el = _a[_i];\n var rect = el.getBoundingClientRect();\n tops.push(rect.top - originClientTop);\n bottoms.push(rect.bottom - originClientTop);\n }\n this.tops = tops;\n this.bottoms = bottoms;\n };\n // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n // If no intersection is made, returns undefined.\n PositionCache.prototype.leftToIndex = function (leftPosition) {\n var lefts = this.lefts;\n var rights = this.rights;\n var len = lefts.length;\n var i;\n for (i = 0; i < len; i++) {\n if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n return i;\n }\n }\n };\n // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n // If no intersection is made, returns undefined.\n PositionCache.prototype.topToIndex = function (topPosition) {\n var tops = this.tops;\n var bottoms = this.bottoms;\n var len = tops.length;\n var i;\n for (i = 0; i < len; i++) {\n if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n return i;\n }\n }\n };\n // Gets the width of the element at the given index\n PositionCache.prototype.getWidth = function (leftIndex) {\n return this.rights[leftIndex] - this.lefts[leftIndex];\n };\n // Gets the height of the element at the given index\n PositionCache.prototype.getHeight = function (topIndex) {\n return this.bottoms[topIndex] - this.tops[topIndex];\n };\n return PositionCache;\n}());\nexport default PositionCache;\n","import * as tslib_1 from \"tslib\";\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\nvar ScrollController = /** @class */ (function () {\n function ScrollController() {\n }\n ScrollController.prototype.getMaxScrollTop = function () {\n return this.getScrollHeight() - this.getClientHeight();\n };\n ScrollController.prototype.getMaxScrollLeft = function () {\n return this.getScrollWidth() - this.getClientWidth();\n };\n ScrollController.prototype.canScrollVertically = function () {\n return this.getMaxScrollTop() > 0;\n };\n ScrollController.prototype.canScrollHorizontally = function () {\n return this.getMaxScrollLeft() > 0;\n };\n ScrollController.prototype.canScrollUp = function () {\n return this.getScrollTop() > 0;\n };\n ScrollController.prototype.canScrollDown = function () {\n return this.getScrollTop() < this.getMaxScrollTop();\n };\n ScrollController.prototype.canScrollLeft = function () {\n return this.getScrollLeft() > 0;\n };\n ScrollController.prototype.canScrollRight = function () {\n return this.getScrollLeft() < this.getMaxScrollLeft();\n };\n return ScrollController;\n}());\nexport { ScrollController };\nvar ElementScrollController = /** @class */ (function (_super) {\n tslib_1.__extends(ElementScrollController, _super);\n function ElementScrollController(el) {\n var _this = _super.call(this) || this;\n _this.el = el;\n return _this;\n }\n ElementScrollController.prototype.getScrollTop = function () {\n return this.el.scrollTop;\n };\n ElementScrollController.prototype.getScrollLeft = function () {\n return this.el.scrollLeft;\n };\n ElementScrollController.prototype.setScrollTop = function (top) {\n this.el.scrollTop = top;\n };\n ElementScrollController.prototype.setScrollLeft = function (left) {\n this.el.scrollLeft = left;\n };\n ElementScrollController.prototype.getScrollWidth = function () {\n return this.el.scrollWidth;\n };\n ElementScrollController.prototype.getScrollHeight = function () {\n return this.el.scrollHeight;\n };\n ElementScrollController.prototype.getClientHeight = function () {\n return this.el.clientHeight;\n };\n ElementScrollController.prototype.getClientWidth = function () {\n return this.el.clientWidth;\n };\n return ElementScrollController;\n}(ScrollController));\nexport { ElementScrollController };\nvar WindowScrollController = /** @class */ (function (_super) {\n tslib_1.__extends(WindowScrollController, _super);\n function WindowScrollController() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WindowScrollController.prototype.getScrollTop = function () {\n return window.pageYOffset;\n };\n WindowScrollController.prototype.getScrollLeft = function () {\n return window.pageXOffset;\n };\n WindowScrollController.prototype.setScrollTop = function (n) {\n window.scroll(window.pageXOffset, n);\n };\n WindowScrollController.prototype.setScrollLeft = function (n) {\n window.scroll(n, window.pageYOffset);\n };\n WindowScrollController.prototype.getScrollWidth = function () {\n return document.documentElement.scrollWidth;\n };\n WindowScrollController.prototype.getScrollHeight = function () {\n return document.documentElement.scrollHeight;\n };\n WindowScrollController.prototype.getClientHeight = function () {\n return document.documentElement.clientHeight;\n };\n WindowScrollController.prototype.getClientWidth = function () {\n return document.documentElement.clientWidth;\n };\n return WindowScrollController;\n}(ScrollController));\nexport { WindowScrollController };\n","import * as tslib_1 from \"tslib\";\nimport { computeEdges } from '../util/dom-geom';\nimport { removeElement, createElement, applyStyle, applyStyleProp } from '../util/dom-manip';\nimport { ElementScrollController } from './scroll-controller';\n/*\nEmbodies a div that has potential scrollbars\n*/\nvar ScrollComponent = /** @class */ (function (_super) {\n tslib_1.__extends(ScrollComponent, _super);\n function ScrollComponent(overflowX, overflowY) {\n var _this = _super.call(this, createElement('div', {\n className: 'fc-scroller'\n })) || this;\n _this.overflowX = overflowX;\n _this.overflowY = overflowY;\n _this.applyOverflow();\n return _this;\n }\n // sets to natural height, unlocks overflow\n ScrollComponent.prototype.clear = function () {\n this.setHeight('auto');\n this.applyOverflow();\n };\n ScrollComponent.prototype.destroy = function () {\n removeElement(this.el);\n };\n // Overflow\n // -----------------------------------------------------------------------------------------------------------------\n ScrollComponent.prototype.applyOverflow = function () {\n applyStyle(this.el, {\n overflowX: this.overflowX,\n overflowY: this.overflowY\n });\n };\n // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\n // Useful for preserving scrollbar widths regardless of future resizes.\n // Can pass in scrollbarWidths for optimization.\n ScrollComponent.prototype.lockOverflow = function (scrollbarWidths) {\n var overflowX = this.overflowX;\n var overflowY = this.overflowY;\n scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\n if (overflowX === 'auto') {\n overflowX = (scrollbarWidths.bottom || // horizontal scrollbars?\n this.canScrollHorizontally() // OR scrolling pane with massless scrollbars?\n ) ? 'scroll' : 'hidden';\n }\n if (overflowY === 'auto') {\n overflowY = (scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars?\n this.canScrollVertically() // OR scrolling pane with massless scrollbars?\n ) ? 'scroll' : 'hidden';\n }\n applyStyle(this.el, { overflowX: overflowX, overflowY: overflowY });\n };\n ScrollComponent.prototype.setHeight = function (height) {\n applyStyleProp(this.el, 'height', height);\n };\n ScrollComponent.prototype.getScrollbarWidths = function () {\n var edges = computeEdges(this.el);\n return {\n left: edges.scrollbarLeft,\n right: edges.scrollbarRight,\n bottom: edges.scrollbarBottom\n };\n };\n return ScrollComponent;\n}(ElementScrollController));\nexport default ScrollComponent;\n","import * as tslib_1 from \"tslib\";\nvar Theme = /** @class */ (function () {\n function Theme(calendarOptions) {\n this.calendarOptions = calendarOptions;\n this.processIconOverride();\n }\n Theme.prototype.processIconOverride = function () {\n if (this.iconOverrideOption) {\n this.setIconOverride(this.calendarOptions[this.iconOverrideOption]);\n }\n };\n Theme.prototype.setIconOverride = function (iconOverrideHash) {\n var iconClassesCopy;\n var buttonName;\n if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object\n iconClassesCopy = tslib_1.__assign({}, this.iconClasses);\n for (buttonName in iconOverrideHash) {\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\n }\n this.iconClasses = iconClassesCopy;\n }\n else if (iconOverrideHash === false) {\n this.iconClasses = {};\n }\n };\n Theme.prototype.applyIconOverridePrefix = function (className) {\n var prefix = this.iconOverridePrefix;\n if (prefix && className.indexOf(prefix) !== 0) { // if not already present\n className = prefix + className;\n }\n return className;\n };\n Theme.prototype.getClass = function (key) {\n return this.classes[key] || '';\n };\n Theme.prototype.getIconClass = function (buttonName) {\n var className = this.iconClasses[buttonName];\n if (className) {\n return this.baseIconClass + ' ' + className;\n }\n return '';\n };\n Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\n var className;\n if (this.iconOverrideCustomButtonOption) {\n className = customButtonProps[this.iconOverrideCustomButtonOption];\n if (className) {\n return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\n }\n }\n return '';\n };\n return Theme;\n}());\nexport default Theme;\nTheme.prototype.classes = {};\nTheme.prototype.iconClasses = {};\nTheme.prototype.baseIconClass = '';\nTheme.prototype.iconOverridePrefix = '';\n","import * as tslib_1 from \"tslib\";\nimport { parseFieldSpecs } from '../util/misc';\nimport { createDuration } from '../datelib/duration';\nvar guid = 0;\nvar ComponentContext = /** @class */ (function () {\n function ComponentContext(calendar, theme, dateEnv, options, view) {\n this.calendar = calendar;\n this.theme = theme;\n this.dateEnv = dateEnv;\n this.options = options;\n this.view = view;\n this.isRtl = options.dir === 'rtl';\n this.eventOrderSpecs = parseFieldSpecs(options.eventOrder);\n this.nextDayThreshold = createDuration(options.nextDayThreshold);\n }\n ComponentContext.prototype.extend = function (options, view) {\n return new ComponentContext(this.calendar, this.theme, this.dateEnv, options || this.options, view || this.view);\n };\n return ComponentContext;\n}());\nexport { ComponentContext };\nvar Component = /** @class */ (function () {\n function Component() {\n this.uid = String(guid++);\n }\n Component.addEqualityFuncs = function (newFuncs) {\n this.prototype.equalityFuncs = tslib_1.__assign({}, this.prototype.equalityFuncs, newFuncs);\n };\n Component.prototype.receiveProps = function (props, context) {\n var oldContext = this.context;\n this.context = context;\n if (!oldContext) {\n this.firstContext(context);\n }\n var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps;\n this.props = comboProps;\n if (anyChanges) {\n if (oldContext) {\n this.beforeUpdate();\n }\n this.render(comboProps, context);\n if (oldContext) {\n this.afterUpdate();\n }\n }\n };\n Component.prototype.render = function (props, context) {\n };\n Component.prototype.firstContext = function (context) {\n };\n Component.prototype.beforeUpdate = function () {\n };\n Component.prototype.afterUpdate = function () {\n };\n // after destroy is called, this component won't ever be used again\n Component.prototype.destroy = function () {\n };\n return Component;\n}());\nexport default Component;\nComponent.prototype.equalityFuncs = {};\n/*\nReuses old values when equal. If anything is unequal, returns newProps as-is.\nGreat for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing.\n*/\nfunction recycleProps(oldProps, newProps, equalityFuncs) {\n var comboProps = {}; // some old, some new\n var anyChanges = false;\n for (var key in newProps) {\n if (key in oldProps && (oldProps[key] === newProps[key] ||\n (equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key])))) {\n // equal to old? use old prop\n comboProps[key] = oldProps[key];\n }\n else {\n comboProps[key] = newProps[key];\n anyChanges = true;\n }\n }\n for (var key in oldProps) {\n if (!(key in newProps)) {\n anyChanges = true;\n break;\n }\n }\n return { anyChanges: anyChanges, comboProps: comboProps };\n}\n","import * as tslib_1 from \"tslib\";\nimport Component from './Component';\nimport { rangeContainsRange } from '../datelib/date-range';\nimport { elementClosest, removeElement } from '../util/dom-manip';\nimport { isDateSelectionValid, isInteractionValid } from '../validation';\n/*\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\nvar DateComponent = /** @class */ (function (_super) {\n tslib_1.__extends(DateComponent, _super);\n function DateComponent(el) {\n var _this = _super.call(this) || this;\n _this.el = el;\n return _this;\n }\n DateComponent.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeElement(this.el);\n };\n // Hit System\n // -----------------------------------------------------------------------------------------------------------------\n DateComponent.prototype.buildPositionCaches = function () {\n };\n DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {\n return null; // this should be abstract\n };\n // Validation\n // -----------------------------------------------------------------------------------------------------------------\n DateComponent.prototype.isInteractionValid = function (interaction) {\n var calendar = this.context.calendar;\n var dateProfile = this.props.dateProfile; // HACK\n var instances = interaction.mutatedEvents.instances;\n if (dateProfile) { // HACK for DayTile\n for (var instanceId in instances) {\n if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n return false;\n }\n }\n }\n return isInteractionValid(interaction, calendar);\n };\n DateComponent.prototype.isDateSelectionValid = function (selection) {\n var calendar = this.context.calendar;\n var dateProfile = this.props.dateProfile; // HACK\n if (dateProfile && // HACK for DayTile\n !rangeContainsRange(dateProfile.validRange, selection.range)) {\n return false;\n }\n return isDateSelectionValid(selection, calendar);\n };\n // Pointer Interaction Utils\n // -----------------------------------------------------------------------------------------------------------------\n DateComponent.prototype.isValidSegDownEl = function (el) {\n return !this.props.eventDrag && // HACK\n !this.props.eventResize && // HACK\n !elementClosest(el, '.fc-mirror') &&\n (this.isPopover() || !this.isInPopover(el));\n // ^above line ensures we don't detect a seg interaction within a nested component.\n // it's a HACK because it only supports a popover as the nested component.\n };\n DateComponent.prototype.isValidDateDownEl = function (el) {\n var segEl = elementClosest(el, this.fgSegSelector);\n return (!segEl || segEl.classList.contains('fc-mirror')) &&\n !elementClosest(el, '.fc-more') && // a \"more..\" link\n !elementClosest(el, 'a[data-goto]') && // a clickable nav link\n !this.isInPopover(el);\n };\n DateComponent.prototype.isPopover = function () {\n return this.el.classList.contains('fc-popover');\n };\n DateComponent.prototype.isInPopover = function (el) {\n return Boolean(elementClosest(el, '.fc-popover'));\n };\n return DateComponent;\n}(Component));\nexport default DateComponent;\nDateComponent.prototype.fgSegSelector = '.fc-event-container > *';\nDateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)';\n","import * as tslib_1 from \"tslib\";\nvar uid = 0;\nexport function createPlugin(input) {\n return {\n id: String(uid++),\n deps: input.deps || [],\n reducers: input.reducers || [],\n eventDefParsers: input.eventDefParsers || [],\n isDraggableTransformers: input.isDraggableTransformers || [],\n eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n dateSelectionTransformers: input.dateSelectionTransformers || [],\n datePointTransforms: input.datePointTransforms || [],\n dateSpanTransforms: input.dateSpanTransforms || [],\n views: input.views || {},\n viewPropsTransformers: input.viewPropsTransformers || [],\n isPropsValid: input.isPropsValid || null,\n externalDefTransforms: input.externalDefTransforms || [],\n eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],\n viewContainerModifiers: input.viewContainerModifiers || [],\n eventDropTransformers: input.eventDropTransformers || [],\n componentInteractions: input.componentInteractions || [],\n calendarInteractions: input.calendarInteractions || [],\n themeClasses: input.themeClasses || {},\n eventSourceDefs: input.eventSourceDefs || [],\n cmdFormatter: input.cmdFormatter,\n recurringTypes: input.recurringTypes || [],\n namedTimeZonedImpl: input.namedTimeZonedImpl,\n defaultView: input.defaultView || '',\n elementDraggingImpl: input.elementDraggingImpl,\n optionChangeHandlers: input.optionChangeHandlers || {}\n };\n}\nvar PluginSystem = /** @class */ (function () {\n function PluginSystem() {\n this.hooks = {\n reducers: [],\n eventDefParsers: [],\n isDraggableTransformers: [],\n eventDragMutationMassagers: [],\n eventDefMutationAppliers: [],\n dateSelectionTransformers: [],\n datePointTransforms: [],\n dateSpanTransforms: [],\n views: {},\n viewPropsTransformers: [],\n isPropsValid: null,\n externalDefTransforms: [],\n eventResizeJoinTransforms: [],\n viewContainerModifiers: [],\n eventDropTransformers: [],\n componentInteractions: [],\n calendarInteractions: [],\n themeClasses: {},\n eventSourceDefs: [],\n cmdFormatter: null,\n recurringTypes: [],\n namedTimeZonedImpl: null,\n defaultView: '',\n elementDraggingImpl: null,\n optionChangeHandlers: {}\n };\n this.addedHash = {};\n }\n PluginSystem.prototype.add = function (plugin) {\n if (!this.addedHash[plugin.id]) {\n this.addedHash[plugin.id] = true;\n for (var _i = 0, _a = plugin.deps; _i < _a.length; _i++) {\n var dep = _a[_i];\n this.add(dep);\n }\n this.hooks = combineHooks(this.hooks, plugin);\n }\n };\n return PluginSystem;\n}());\nexport { PluginSystem };\nfunction combineHooks(hooks0, hooks1) {\n return {\n reducers: hooks0.reducers.concat(hooks1.reducers),\n eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers),\n isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),\n eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n views: tslib_1.__assign({}, hooks0.views, hooks1.views),\n viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),\n viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers),\n eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n themeClasses: tslib_1.__assign({}, hooks0.themeClasses, hooks1.themeClasses),\n eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n defaultView: hooks0.defaultView || hooks1.defaultView,\n elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,\n optionChangeHandlers: tslib_1.__assign({}, hooks0.optionChangeHandlers, hooks1.optionChangeHandlers)\n };\n}\n","import { createPlugin } from '../plugin-system';\nvar eventSourceDef = {\n ignoreRange: true,\n parseMeta: function (raw) {\n if (Array.isArray(raw)) { // short form\n return raw;\n }\n else if (Array.isArray(raw.events)) {\n return raw.events;\n }\n return null;\n },\n fetch: function (arg, success) {\n success({\n rawEvents: arg.eventSource.meta\n });\n }\n};\nexport default createPlugin({\n eventSourceDefs: [eventSourceDef]\n});\n","import { unpromisify } from '../util/promise';\nimport { createPlugin } from '../plugin-system';\nvar eventSourceDef = {\n parseMeta: function (raw) {\n if (typeof raw === 'function') { // short form\n return raw;\n }\n else if (typeof raw.events === 'function') {\n return raw.events;\n }\n return null;\n },\n fetch: function (arg, success, failure) {\n var dateEnv = arg.calendar.dateEnv;\n var func = arg.eventSource.meta;\n unpromisify(func.bind(null, {\n start: dateEnv.toDate(arg.range.start),\n end: dateEnv.toDate(arg.range.end),\n startStr: dateEnv.formatIso(arg.range.start),\n endStr: dateEnv.formatIso(arg.range.end),\n timeZone: dateEnv.timeZone\n }), function (rawEvents) {\n success({ rawEvents: rawEvents }); // needs an object response\n }, failure // send errorObj directly to failure callback\n );\n }\n};\nexport default createPlugin({\n eventSourceDefs: [eventSourceDef]\n});\n","export default function requestJson(method, url, params, successCallback, failureCallback) {\n method = method.toUpperCase();\n var body = null;\n if (method === 'GET') {\n url = injectQueryStringParams(url, params);\n }\n else {\n body = encodeParams(params);\n }\n var xhr = new XMLHttpRequest();\n xhr.open(method, url, true);\n if (method !== 'GET') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 400) {\n try {\n var res = JSON.parse(xhr.responseText);\n successCallback(res, xhr);\n }\n catch (err) {\n failureCallback('Failure parsing JSON', xhr);\n }\n }\n else {\n failureCallback('Request failed', xhr);\n }\n };\n xhr.onerror = function () {\n failureCallback('Request failed', xhr);\n };\n xhr.send(body);\n}\nfunction injectQueryStringParams(url, params) {\n return url +\n (url.indexOf('?') === -1 ? '?' : '&') +\n encodeParams(params);\n}\nfunction encodeParams(params) {\n var parts = [];\n for (var key in params) {\n parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));\n }\n return parts.join('&');\n}\n","import requestJson from '../util/requestJson';\nimport { __assign } from 'tslib';\nimport { createPlugin } from '../plugin-system';\nvar eventSourceDef = {\n parseMeta: function (raw) {\n if (typeof raw === 'string') { // short form\n raw = { url: raw };\n }\n else if (!raw || typeof raw !== 'object' || !raw.url) {\n return null;\n }\n return {\n url: raw.url,\n method: (raw.method || 'GET').toUpperCase(),\n extraParams: raw.extraParams,\n startParam: raw.startParam,\n endParam: raw.endParam,\n timeZoneParam: raw.timeZoneParam\n };\n },\n fetch: function (arg, success, failure) {\n var meta = arg.eventSource.meta;\n var requestParams = buildRequestParams(meta, arg.range, arg.calendar);\n requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) {\n success({ rawEvents: rawEvents, xhr: xhr });\n }, function (errorMessage, xhr) {\n failure({ message: errorMessage, xhr: xhr });\n });\n }\n};\nexport default createPlugin({\n eventSourceDefs: [eventSourceDef]\n});\nfunction buildRequestParams(meta, range, calendar) {\n var dateEnv = calendar.dateEnv;\n var startParam;\n var endParam;\n var timeZoneParam;\n var customRequestParams;\n var params = {};\n startParam = meta.startParam;\n if (startParam == null) {\n startParam = calendar.opt('startParam');\n }\n endParam = meta.endParam;\n if (endParam == null) {\n endParam = calendar.opt('endParam');\n }\n timeZoneParam = meta.timeZoneParam;\n if (timeZoneParam == null) {\n timeZoneParam = calendar.opt('timeZoneParam');\n }\n // retrieve any outbound GET/POST data from the options\n if (typeof meta.extraParams === 'function') {\n // supplied as a function that returns a key/value object\n customRequestParams = meta.extraParams();\n }\n else {\n // probably supplied as a straight key/value object\n customRequestParams = meta.extraParams || {};\n }\n __assign(params, customRequestParams);\n params[startParam] = dateEnv.formatIso(range.start);\n params[endParam] = dateEnv.formatIso(range.end);\n if (dateEnv.timeZone !== 'local') {\n params[timeZoneParam] = dateEnv.timeZone;\n }\n return params;\n}\n","import { startOfDay, addDays } from '../datelib/marker';\nimport { createDuration, subtractDurations } from '../datelib/duration';\nimport { arrayToHash } from '../util/object';\nimport { refineProps } from '../util/misc';\nimport { intersectRanges } from '../datelib/date-range';\nimport { createPlugin } from '../plugin-system';\nvar recurring = {\n parse: function (rawEvent, leftoverProps, dateEnv) {\n var createMarker = dateEnv.createMarker.bind(dateEnv);\n var processors = {\n daysOfWeek: null,\n startTime: createDuration,\n endTime: createDuration,\n startRecur: createMarker,\n endRecur: createMarker\n };\n var props = refineProps(rawEvent, processors, {}, leftoverProps);\n var anyValid = false;\n for (var propName in props) {\n if (props[propName] != null) {\n anyValid = true;\n break;\n }\n }\n if (anyValid) {\n var duration = null;\n if ('duration' in leftoverProps) {\n duration = createDuration(leftoverProps.duration);\n delete leftoverProps.duration;\n }\n if (!duration && props.startTime && props.endTime) {\n duration = subtractDurations(props.endTime, props.startTime);\n }\n return {\n allDayGuess: Boolean(!props.startTime && !props.endTime),\n duration: duration,\n typeData: props // doesn't need endTime anymore but oh well\n };\n }\n return null;\n },\n expand: function (typeData, framingRange, dateEnv) {\n var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });\n if (clippedFramingRange) {\n return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);\n }\n else {\n return [];\n }\n }\n};\nexport default createPlugin({\n recurringTypes: [recurring]\n});\nfunction expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {\n var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;\n var dayMarker = startOfDay(framingRange.start);\n var endMarker = framingRange.end;\n var instanceStarts = [];\n while (dayMarker < endMarker) {\n var instanceStart \n // if everyday, or this particular day-of-week\n = void 0;\n // if everyday, or this particular day-of-week\n if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n if (startTime) {\n instanceStart = dateEnv.add(dayMarker, startTime);\n }\n else {\n instanceStart = dayMarker;\n }\n instanceStarts.push(instanceStart);\n }\n dayMarker = addDays(dayMarker, 1);\n }\n return instanceStarts;\n}\n","import { createPlugin } from './plugin-system';\nimport { hashValuesToArray } from './util/object';\nexport default createPlugin({\n optionChangeHandlers: {\n events: function (events, calendar, deepEqual) {\n handleEventSources([events], calendar, deepEqual);\n },\n eventSources: handleEventSources,\n plugins: handlePlugins\n }\n});\nfunction handleEventSources(inputs, calendar, deepEqual) {\n var unfoundSources = hashValuesToArray(calendar.state.eventSources);\n var newInputs = [];\n for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {\n var input = inputs_1[_i];\n var inputFound = false;\n for (var i = 0; i < unfoundSources.length; i++) {\n if (deepEqual(unfoundSources[i]._raw, input)) {\n unfoundSources.splice(i, 1); // delete\n inputFound = true;\n break;\n }\n }\n if (!inputFound) {\n newInputs.push(input);\n }\n }\n for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) {\n var unfoundSource = unfoundSources_1[_a];\n calendar.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: unfoundSource.sourceId\n });\n }\n for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) {\n var newInput = newInputs_1[_b];\n calendar.addEventSource(newInput);\n }\n}\n// shortcoming: won't remove plugins\nfunction handlePlugins(inputs, calendar) {\n calendar.addPluginInputs(inputs); // will gracefully handle duplicates\n}\n","import { mergeProps } from './util/object';\nimport ArrayEventSourcePlugin from './event-sources/array-event-source';\nimport FuncEventSourcePlugin from './event-sources/func-event-source';\nimport JsonFeedEventSourcePlugin from './event-sources/json-feed-event-source';\nimport SimpleRecurrencePlugin from './structs/recurring-event-simple';\nimport { capitaliseFirstLetter } from './util/misc';\nimport DefaultOptionChangeHandlers from './option-change-handlers';\nexport var config = {}; // TODO: make these options\nexport var globalDefaults = {\n defaultRangeSeparator: ' - ',\n titleRangeSeparator: ' \\u2013 ',\n defaultTimedEventDuration: '01:00:00',\n defaultAllDayEventDuration: { day: 1 },\n forceEventDuration: false,\n nextDayThreshold: '00:00:00',\n // display\n columnHeader: true,\n defaultView: '',\n aspectRatio: 1.35,\n header: {\n left: 'title',\n center: '',\n right: 'today prev,next'\n },\n weekends: true,\n weekNumbers: false,\n weekNumberCalculation: 'local',\n editable: false,\n // nowIndicator: false,\n scrollTime: '06:00:00',\n minTime: '00:00:00',\n maxTime: '24:00:00',\n showNonCurrentDates: true,\n // event ajax\n lazyFetching: true,\n startParam: 'start',\n endParam: 'end',\n timeZoneParam: 'timeZone',\n timeZone: 'local',\n // allDayDefault: undefined,\n // locale\n locales: [],\n locale: '',\n // dir: will get this from the default locale\n // buttonIcons: null,\n // allows setting a min-height to the event segment to prevent short events overlapping each other\n timeGridEventMinHeight: 0,\n themeSystem: 'standard',\n // eventResizableFromStart: false,\n dragRevertDuration: 500,\n dragScroll: true,\n allDayMaintainDuration: false,\n // selectable: false,\n unselectAuto: true,\n // selectMinDistance: 0,\n dropAccept: '*',\n eventOrder: 'start,-duration,allDay,title',\n // ^ if start tie, longer events go before shorter. final tie-breaker is title text\n // rerenderDelay: null,\n eventLimit: false,\n eventLimitClick: 'popover',\n dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n handleWindowResize: true,\n windowResizeDelay: 100,\n longPressDelay: 1000,\n eventDragMinDistance: 5 // only applies to mouse\n};\nexport var rtlDefaults = {\n header: {\n left: 'next,prev today',\n center: '',\n right: 'title'\n },\n buttonIcons: {\n // TODO: make RTL support the responibility of the theme\n prev: 'fc-icon-chevron-right',\n next: 'fc-icon-chevron-left',\n prevYear: 'fc-icon-chevrons-right',\n nextYear: 'fc-icon-chevrons-left'\n }\n};\nvar complexOptions = [\n 'header',\n 'footer',\n 'buttonText',\n 'buttonIcons'\n];\n// Merges an array of option objects into a single object\nexport function mergeOptions(optionObjs) {\n return mergeProps(optionObjs, complexOptions);\n}\n// TODO: move this stuff to a \"plugin\"-related file...\nvar INTERNAL_PLUGINS = [\n ArrayEventSourcePlugin,\n FuncEventSourcePlugin,\n JsonFeedEventSourcePlugin,\n SimpleRecurrencePlugin,\n DefaultOptionChangeHandlers\n];\nexport function refinePluginDefs(pluginInputs) {\n var plugins = [];\n for (var _i = 0, pluginInputs_1 = pluginInputs; _i < pluginInputs_1.length; _i++) {\n var pluginInput = pluginInputs_1[_i];\n if (typeof pluginInput === 'string') {\n var globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput);\n if (!window[globalName]) {\n console.warn('Plugin file not loaded for ' + pluginInput);\n }\n else {\n plugins.push(window[globalName].default); // is an ES6 module\n }\n }\n else {\n plugins.push(pluginInput);\n }\n }\n return INTERNAL_PLUGINS.concat(plugins);\n}\n","import { mergeProps, hashValuesToArray } from '../util/object';\nvar RAW_EN_LOCALE = {\n code: 'en',\n week: {\n dow: 0,\n doy: 4 // 4 days need to be within the year to be considered the first week\n },\n dir: 'ltr',\n buttonText: {\n prev: 'prev',\n next: 'next',\n prevYear: 'prev year',\n nextYear: 'next year',\n year: 'year',\n today: 'today',\n month: 'month',\n week: 'week',\n day: 'day',\n list: 'list'\n },\n weekLabel: 'W',\n allDayText: 'all-day',\n eventLimitText: 'more',\n noEventsMessage: 'No events to display'\n};\nexport function parseRawLocales(explicitRawLocales) {\n var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';\n var globalArray = window['FullCalendarLocalesAll'] || []; // from locales-all.js\n var globalObject = window['FullCalendarLocales'] || {}; // from locales/*.js. keys are meaningless\n var allRawLocales = globalArray.concat(// globalArray is low prio\n hashValuesToArray(globalObject), // medium prio\n explicitRawLocales // highest prio\n );\n var rawLocaleMap = {\n en: RAW_EN_LOCALE // necessary?\n };\n for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) {\n var rawLocale = allRawLocales_1[_i];\n rawLocaleMap[rawLocale.code] = rawLocale;\n }\n return {\n map: rawLocaleMap,\n defaultCode: defaultCode\n };\n}\nexport function buildLocale(inputSingular, available) {\n if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {\n return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);\n }\n else {\n return queryLocale(inputSingular, available);\n }\n}\nfunction queryLocale(codeArg, available) {\n var codes = [].concat(codeArg || []); // will convert to array\n var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;\n return parseLocale(codeArg, codes, raw);\n}\nfunction queryRawLocale(codes, available) {\n for (var i = 0; i < codes.length; i++) {\n var parts = codes[i].toLocaleLowerCase().split('-');\n for (var j = parts.length; j > 0; j--) {\n var simpleId = parts.slice(0, j).join('-');\n if (available[simpleId]) {\n return available[simpleId];\n }\n }\n }\n return null;\n}\nfunction parseLocale(codeArg, codes, raw) {\n var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);\n delete merged.code; // don't want this part of the options\n var week = merged.week;\n delete merged.week;\n return {\n codeArg: codeArg,\n codes: codes,\n week: week,\n simpleNumberFormat: new Intl.NumberFormat(codeArg),\n options: merged\n };\n}\n","import * as tslib_1 from \"tslib\";\nimport { firstDefined } from './util/misc';\nimport { globalDefaults, rtlDefaults, mergeOptions } from './options';\nimport { parseRawLocales, buildLocale } from './datelib/locale';\nimport { __assign } from 'tslib';\nvar OptionsManager = /** @class */ (function () {\n function OptionsManager(overrides) {\n this.overrides = tslib_1.__assign({}, overrides); // make a copy\n this.dynamicOverrides = {};\n this.compute();\n }\n OptionsManager.prototype.mutate = function (updates, removals, isDynamic) {\n if (!Object.keys(updates).length && !removals.length) {\n return;\n }\n var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides;\n __assign(overrideHash, updates);\n for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) {\n var propName = removals_1[_i];\n delete overrideHash[propName];\n }\n this.compute();\n };\n // Computes the flattened options hash for the calendar and assigns to `this.options`.\n // Assumes this.overrides and this.dynamicOverrides have already been initialized.\n OptionsManager.prototype.compute = function () {\n // TODO: not a very efficient system\n var locales = firstDefined(// explicit locale option given?\n this.dynamicOverrides.locales, this.overrides.locales, globalDefaults.locales);\n var locale = firstDefined(// explicit locales option given?\n this.dynamicOverrides.locale, this.overrides.locale, globalDefaults.locale);\n var available = parseRawLocales(locales);\n var localeDefaults = buildLocale(locale || available.defaultCode, available.map).options;\n var dir = firstDefined(// based on options computed so far, is direction RTL?\n this.dynamicOverrides.dir, this.overrides.dir, localeDefaults.dir);\n var dirDefaults = dir === 'rtl' ? rtlDefaults : {};\n this.dirDefaults = dirDefaults;\n this.localeDefaults = localeDefaults;\n this.computed = mergeOptions([\n globalDefaults,\n dirDefaults,\n localeDefaults,\n this.overrides,\n this.dynamicOverrides\n ]);\n };\n return OptionsManager;\n}());\nexport default OptionsManager;\n","import { arrayToUtcDate, dateToUtcArray } from './marker';\nvar calendarSystemClassMap = {};\nexport function registerCalendarSystem(name, theClass) {\n calendarSystemClassMap[name] = theClass;\n}\nexport function createCalendarSystem(name) {\n return new calendarSystemClassMap[name]();\n}\nvar GregorianCalendarSystem = /** @class */ (function () {\n function GregorianCalendarSystem() {\n }\n GregorianCalendarSystem.prototype.getMarkerYear = function (d) {\n return d.getUTCFullYear();\n };\n GregorianCalendarSystem.prototype.getMarkerMonth = function (d) {\n return d.getUTCMonth();\n };\n GregorianCalendarSystem.prototype.getMarkerDay = function (d) {\n return d.getUTCDate();\n };\n GregorianCalendarSystem.prototype.arrayToMarker = function (arr) {\n return arrayToUtcDate(arr);\n };\n GregorianCalendarSystem.prototype.markerToArray = function (marker) {\n return dateToUtcArray(marker);\n };\n return GregorianCalendarSystem;\n}());\nregisterCalendarSystem('gregory', GregorianCalendarSystem);\n","import { isValidDate } from './marker';\nvar ISO_RE = /^\\s*(\\d{4})(-(\\d{2})(-(\\d{2})([T ](\\d{2}):(\\d{2})(:(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/;\nexport function parse(str) {\n var m = ISO_RE.exec(str);\n if (m) {\n var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0));\n if (isValidDate(marker)) {\n var timeZoneOffset = null;\n if (m[13]) {\n timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +\n Number(m[18] || 0));\n }\n return {\n marker: marker,\n isTimeUnspecified: !m[6],\n timeZoneOffset: timeZoneOffset\n };\n }\n }\n return null;\n}\n","import { addMs, diffHours, diffMinutes, diffSeconds, diffWholeWeeks, diffWholeDays, startOfDay, startOfHour, startOfMinute, startOfSecond, weekOfYear, arrayToUtcDate, dateToUtcArray, dateToLocalArray, arrayToLocalDate, timeAsMs, isValidDate } from './marker';\nimport { createCalendarSystem } from './calendar-system';\nimport { asRoughYears, asRoughMonths, asRoughDays, asRoughMs } from './duration';\nimport { buildIsoString } from './formatting';\nimport { parse } from './parsing';\nimport { isInt } from '../util/misc';\nvar DateEnv = /** @class */ (function () {\n function DateEnv(settings) {\n var timeZone = this.timeZone = settings.timeZone;\n var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';\n if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);\n }\n this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);\n this.calendarSystem = createCalendarSystem(settings.calendarSystem);\n this.locale = settings.locale;\n this.weekDow = settings.locale.week.dow;\n this.weekDoy = settings.locale.week.doy;\n if (settings.weekNumberCalculation === 'ISO') {\n this.weekDow = 1;\n this.weekDoy = 4;\n }\n if (typeof settings.firstDay === 'number') {\n this.weekDow = settings.firstDay;\n }\n if (typeof settings.weekNumberCalculation === 'function') {\n this.weekNumberFunc = settings.weekNumberCalculation;\n }\n this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel;\n this.cmdFormatter = settings.cmdFormatter;\n }\n // Creating / Parsing\n DateEnv.prototype.createMarker = function (input) {\n var meta = this.createMarkerMeta(input);\n if (meta === null) {\n return null;\n }\n return meta.marker;\n };\n DateEnv.prototype.createNowMarker = function () {\n if (this.canComputeOffset) {\n return this.timestampToMarker(new Date().valueOf());\n }\n else {\n // if we can't compute the current date val for a timezone,\n // better to give the current local date vals than UTC\n return arrayToUtcDate(dateToLocalArray(new Date()));\n }\n };\n DateEnv.prototype.createMarkerMeta = function (input) {\n if (typeof input === 'string') {\n return this.parse(input);\n }\n var marker = null;\n if (typeof input === 'number') {\n marker = this.timestampToMarker(input);\n }\n else if (input instanceof Date) {\n input = input.valueOf();\n if (!isNaN(input)) {\n marker = this.timestampToMarker(input);\n }\n }\n else if (Array.isArray(input)) {\n marker = arrayToUtcDate(input);\n }\n if (marker === null || !isValidDate(marker)) {\n return null;\n }\n return { marker: marker, isTimeUnspecified: false, forcedTzo: null };\n };\n DateEnv.prototype.parse = function (s) {\n var parts = parse(s);\n if (parts === null) {\n return null;\n }\n var marker = parts.marker;\n var forcedTzo = null;\n if (parts.timeZoneOffset !== null) {\n if (this.canComputeOffset) {\n marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);\n }\n else {\n forcedTzo = parts.timeZoneOffset;\n }\n }\n return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo };\n };\n // Accessors\n DateEnv.prototype.getYear = function (marker) {\n return this.calendarSystem.getMarkerYear(marker);\n };\n DateEnv.prototype.getMonth = function (marker) {\n return this.calendarSystem.getMarkerMonth(marker);\n };\n // Adding / Subtracting\n DateEnv.prototype.add = function (marker, dur) {\n var a = this.calendarSystem.markerToArray(marker);\n a[0] += dur.years;\n a[1] += dur.months;\n a[2] += dur.days;\n a[6] += dur.milliseconds;\n return this.calendarSystem.arrayToMarker(a);\n };\n DateEnv.prototype.subtract = function (marker, dur) {\n var a = this.calendarSystem.markerToArray(marker);\n a[0] -= dur.years;\n a[1] -= dur.months;\n a[2] -= dur.days;\n a[6] -= dur.milliseconds;\n return this.calendarSystem.arrayToMarker(a);\n };\n DateEnv.prototype.addYears = function (marker, n) {\n var a = this.calendarSystem.markerToArray(marker);\n a[0] += n;\n return this.calendarSystem.arrayToMarker(a);\n };\n DateEnv.prototype.addMonths = function (marker, n) {\n var a = this.calendarSystem.markerToArray(marker);\n a[1] += n;\n return this.calendarSystem.arrayToMarker(a);\n };\n // Diffing Whole Units\n DateEnv.prototype.diffWholeYears = function (m0, m1) {\n var calendarSystem = this.calendarSystem;\n if (timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&\n calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {\n return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);\n }\n return null;\n };\n DateEnv.prototype.diffWholeMonths = function (m0, m1) {\n var calendarSystem = this.calendarSystem;\n if (timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {\n return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +\n (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;\n }\n return null;\n };\n // Range / Duration\n DateEnv.prototype.greatestWholeUnit = function (m0, m1) {\n var n = this.diffWholeYears(m0, m1);\n if (n !== null) {\n return { unit: 'year', value: n };\n }\n n = this.diffWholeMonths(m0, m1);\n if (n !== null) {\n return { unit: 'month', value: n };\n }\n n = diffWholeWeeks(m0, m1);\n if (n !== null) {\n return { unit: 'week', value: n };\n }\n n = diffWholeDays(m0, m1);\n if (n !== null) {\n return { unit: 'day', value: n };\n }\n n = diffHours(m0, m1);\n if (isInt(n)) {\n return { unit: 'hour', value: n };\n }\n n = diffMinutes(m0, m1);\n if (isInt(n)) {\n return { unit: 'minute', value: n };\n }\n n = diffSeconds(m0, m1);\n if (isInt(n)) {\n return { unit: 'second', value: n };\n }\n return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };\n };\n DateEnv.prototype.countDurationsBetween = function (m0, m1, d) {\n // TODO: can use greatestWholeUnit\n var diff;\n if (d.years) {\n diff = this.diffWholeYears(m0, m1);\n if (diff !== null) {\n return diff / asRoughYears(d);\n }\n }\n if (d.months) {\n diff = this.diffWholeMonths(m0, m1);\n if (diff !== null) {\n return diff / asRoughMonths(d);\n }\n }\n if (d.days) {\n diff = diffWholeDays(m0, m1);\n if (diff !== null) {\n return diff / asRoughDays(d);\n }\n }\n return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);\n };\n // Start-Of\n DateEnv.prototype.startOf = function (m, unit) {\n if (unit === 'year') {\n return this.startOfYear(m);\n }\n else if (unit === 'month') {\n return this.startOfMonth(m);\n }\n else if (unit === 'week') {\n return this.startOfWeek(m);\n }\n else if (unit === 'day') {\n return startOfDay(m);\n }\n else if (unit === 'hour') {\n return startOfHour(m);\n }\n else if (unit === 'minute') {\n return startOfMinute(m);\n }\n else if (unit === 'second') {\n return startOfSecond(m);\n }\n };\n DateEnv.prototype.startOfYear = function (m) {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m)\n ]);\n };\n DateEnv.prototype.startOfMonth = function (m) {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m)\n ]);\n };\n DateEnv.prototype.startOfWeek = function (m) {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7)\n ]);\n };\n // Week Number\n DateEnv.prototype.computeWeekNumber = function (marker) {\n if (this.weekNumberFunc) {\n return this.weekNumberFunc(this.toDate(marker));\n }\n else {\n return weekOfYear(marker, this.weekDow, this.weekDoy);\n }\n };\n // TODO: choke on timeZoneName: long\n DateEnv.prototype.format = function (marker, formatter, dateOptions) {\n if (dateOptions === void 0) { dateOptions = {}; }\n return formatter.format({\n marker: marker,\n timeZoneOffset: dateOptions.forcedTzo != null ?\n dateOptions.forcedTzo :\n this.offsetForMarker(marker)\n }, this);\n };\n DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) {\n if (dateOptions === void 0) { dateOptions = {}; }\n if (dateOptions.isEndExclusive) {\n end = addMs(end, -1);\n }\n return formatter.formatRange({\n marker: start,\n timeZoneOffset: dateOptions.forcedStartTzo != null ?\n dateOptions.forcedStartTzo :\n this.offsetForMarker(start)\n }, {\n marker: end,\n timeZoneOffset: dateOptions.forcedEndTzo != null ?\n dateOptions.forcedEndTzo :\n this.offsetForMarker(end)\n }, this);\n };\n DateEnv.prototype.formatIso = function (marker, extraOptions) {\n if (extraOptions === void 0) { extraOptions = {}; }\n var timeZoneOffset = null;\n if (!extraOptions.omitTimeZoneOffset) {\n if (extraOptions.forcedTzo != null) {\n timeZoneOffset = extraOptions.forcedTzo;\n }\n else {\n timeZoneOffset = this.offsetForMarker(marker);\n }\n }\n return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);\n };\n // TimeZone\n DateEnv.prototype.timestampToMarker = function (ms) {\n if (this.timeZone === 'local') {\n return arrayToUtcDate(dateToLocalArray(new Date(ms)));\n }\n else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n return new Date(ms);\n }\n else {\n return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));\n }\n };\n DateEnv.prototype.offsetForMarker = function (m) {\n if (this.timeZone === 'local') {\n return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert \"inverse\" offset to \"normal\" offset\n }\n else if (this.timeZone === 'UTC') {\n return 0;\n }\n else if (this.namedTimeZoneImpl) {\n return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));\n }\n return null;\n };\n // Conversion\n DateEnv.prototype.toDate = function (m, forcedTzo) {\n if (this.timeZone === 'local') {\n return arrayToLocalDate(dateToUtcArray(m));\n }\n else if (this.timeZone === 'UTC') {\n return new Date(m.valueOf()); // make sure it's a copy\n }\n else if (!this.namedTimeZoneImpl) {\n return new Date(m.valueOf() - (forcedTzo || 0));\n }\n else {\n return new Date(m.valueOf() -\n this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms\n );\n }\n };\n return DateEnv;\n}());\nexport { DateEnv };\n","import { refineProps } from '../util/misc';\nimport { processUnscopedUiProps } from '../component/event-ui';\nvar SIMPLE_SOURCE_PROPS = {\n id: String,\n allDayDefault: Boolean,\n eventDataTransform: Function,\n success: Function,\n failure: Function\n};\nvar uid = 0;\nexport function doesSourceNeedRange(eventSource, calendar) {\n var defs = calendar.pluginSystem.hooks.eventSourceDefs;\n return !defs[eventSource.sourceDefId].ignoreRange;\n}\nexport function parseEventSource(raw, calendar) {\n var defs = calendar.pluginSystem.hooks.eventSourceDefs;\n for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence\n var def = defs[i];\n var meta = def.parseMeta(raw);\n if (meta) {\n var res = parseEventSourceProps(typeof raw === 'object' ? raw : {}, meta, i, calendar);\n res._raw = raw;\n return res;\n }\n }\n return null;\n}\nfunction parseEventSourceProps(raw, meta, sourceDefId, calendar) {\n var leftovers0 = {};\n var props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0);\n var leftovers1 = {};\n var ui = processUnscopedUiProps(leftovers0, calendar, leftovers1);\n props.isFetching = false;\n props.latestFetchId = '';\n props.fetchRange = null;\n props.publicId = String(raw.id || '');\n props.sourceId = String(uid++);\n props.sourceDefId = sourceDefId;\n props.meta = meta;\n props.ui = ui;\n props.extendedProps = leftovers1;\n return props;\n}\n","import * as tslib_1 from \"tslib\";\nimport { doesSourceNeedRange } from '../structs/event-source';\nimport { arrayToHash, filterHash } from '../util/object';\nexport default function (eventSources, action, dateProfile, calendar) {\n switch (action.type) {\n case 'ADD_EVENT_SOURCES': // already parsed\n return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar);\n case 'REMOVE_EVENT_SOURCE':\n return removeSource(eventSources, action.sourceId);\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'SET_DATE':\n case 'SET_VIEW_TYPE':\n if (dateProfile) {\n return fetchDirtySources(eventSources, dateProfile.activeRange, calendar);\n }\n else {\n return eventSources;\n }\n case 'FETCH_EVENT_SOURCES':\n case 'CHANGE_TIMEZONE':\n return fetchSourcesByIds(eventSources, action.sourceIds ?\n arrayToHash(action.sourceIds) :\n excludeStaticSources(eventSources, calendar), dateProfile ? dateProfile.activeRange : null, calendar);\n case 'RECEIVE_EVENTS':\n case 'RECEIVE_EVENT_ERROR':\n return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);\n case 'REMOVE_ALL_EVENT_SOURCES':\n return {};\n default:\n return eventSources;\n }\n}\nvar uid = 0;\nfunction addSources(eventSourceHash, sources, fetchRange, calendar) {\n var hash = {};\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\n var source = sources_1[_i];\n hash[source.sourceId] = source;\n }\n if (fetchRange) {\n hash = fetchDirtySources(hash, fetchRange, calendar);\n }\n return tslib_1.__assign({}, eventSourceHash, hash);\n}\nfunction removeSource(eventSourceHash, sourceId) {\n return filterHash(eventSourceHash, function (eventSource) {\n return eventSource.sourceId !== sourceId;\n });\n}\nfunction fetchDirtySources(sourceHash, fetchRange, calendar) {\n return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) {\n return isSourceDirty(eventSource, fetchRange, calendar);\n }), fetchRange, calendar);\n}\nfunction isSourceDirty(eventSource, fetchRange, calendar) {\n if (!doesSourceNeedRange(eventSource, calendar)) {\n return !eventSource.latestFetchId;\n }\n else {\n return !calendar.opt('lazyFetching') ||\n !eventSource.fetchRange ||\n eventSource.isFetching || // always cancel outdated in-progress fetches\n fetchRange.start < eventSource.fetchRange.start ||\n fetchRange.end > eventSource.fetchRange.end;\n }\n}\nfunction fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, calendar) {\n var nextSources = {};\n for (var sourceId in prevSources) {\n var source = prevSources[sourceId];\n if (sourceIdHash[sourceId]) {\n nextSources[sourceId] = fetchSource(source, fetchRange, calendar);\n }\n else {\n nextSources[sourceId] = source;\n }\n }\n return nextSources;\n}\nfunction fetchSource(eventSource, fetchRange, calendar) {\n var sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId];\n var fetchId = String(uid++);\n sourceDef.fetch({\n eventSource: eventSource,\n calendar: calendar,\n range: fetchRange\n }, function (res) {\n var rawEvents = res.rawEvents;\n var calSuccess = calendar.opt('eventSourceSuccess');\n var calSuccessRes;\n var sourceSuccessRes;\n if (eventSource.success) {\n sourceSuccessRes = eventSource.success(rawEvents, res.xhr);\n }\n if (calSuccess) {\n calSuccessRes = calSuccess(rawEvents, res.xhr);\n }\n rawEvents = sourceSuccessRes || calSuccessRes || rawEvents;\n calendar.dispatch({\n type: 'RECEIVE_EVENTS',\n sourceId: eventSource.sourceId,\n fetchId: fetchId,\n fetchRange: fetchRange,\n rawEvents: rawEvents\n });\n }, function (error) {\n var callFailure = calendar.opt('eventSourceFailure');\n console.warn(error.message, error);\n if (eventSource.failure) {\n eventSource.failure(error);\n }\n if (callFailure) {\n callFailure(error);\n }\n calendar.dispatch({\n type: 'RECEIVE_EVENT_ERROR',\n sourceId: eventSource.sourceId,\n fetchId: fetchId,\n fetchRange: fetchRange,\n error: error\n });\n });\n return tslib_1.__assign({}, eventSource, { isFetching: true, latestFetchId: fetchId });\n}\nfunction receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {\n var _a;\n var eventSource = sourceHash[sourceId];\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId) {\n return tslib_1.__assign({}, sourceHash, (_a = {}, _a[sourceId] = tslib_1.__assign({}, eventSource, { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed\n }), _a));\n }\n return sourceHash;\n}\nfunction excludeStaticSources(eventSources, calendar) {\n return filterHash(eventSources, function (eventSource) {\n return doesSourceNeedRange(eventSource, calendar);\n });\n}\n","import { startOfDay, addDays } from './datelib/marker';\nimport { createDuration, getWeeksFromInput, asRoughDays, asRoughMs, greatestDurationDenominator, durationsEqual } from './datelib/duration';\nimport { constrainMarkerToRange, intersectRanges, rangesIntersect, parseRange, rangesEqual } from './datelib/date-range';\nimport { computeVisibleDayRange } from './util/misc';\nvar DateProfileGenerator = /** @class */ (function () {\n function DateProfileGenerator(viewSpec, calendar) {\n this.viewSpec = viewSpec;\n this.options = viewSpec.options;\n this.dateEnv = calendar.dateEnv;\n this.calendar = calendar;\n this.initHiddenDays();\n }\n /* Date Range Computation\n ------------------------------------------------------------------------------------------------------------------*/\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate) {\n var dateEnv = this.dateEnv;\n var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement);\n return this.build(prevDate, -1);\n };\n // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate) {\n var dateEnv = this.dateEnv;\n var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement);\n return this.build(nextDate, 1);\n };\n // Builds a structure holding dates/ranges for rendering around the given date.\n // Optional direction param indicates whether the date is being incremented/decremented\n // from its previous value. decremented = -1, incremented = 1 (default).\n DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) {\n if (forceToValid === void 0) { forceToValid = false; }\n var validRange;\n var minTime = null;\n var maxTime = null;\n var currentInfo;\n var isRangeAllDay;\n var renderRange;\n var activeRange;\n var isValid;\n validRange = this.buildValidRange();\n validRange = this.trimHiddenDays(validRange);\n if (forceToValid) {\n currentDate = constrainMarkerToRange(currentDate, validRange);\n }\n currentInfo = this.buildCurrentRangeInfo(currentDate, direction);\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\n renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);\n renderRange = this.trimHiddenDays(renderRange);\n activeRange = renderRange;\n if (!this.options.showNonCurrentDates) {\n activeRange = intersectRanges(activeRange, currentInfo.range);\n }\n minTime = createDuration(this.options.minTime);\n maxTime = createDuration(this.options.maxTime);\n activeRange = this.adjustActiveRange(activeRange, minTime, maxTime);\n activeRange = intersectRanges(activeRange, validRange); // might return null\n // it's invalid if the originally requested date is not contained,\n // or if the range is completely outside of the valid range.\n isValid = rangesIntersect(currentInfo.range, validRange);\n return {\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\n // an object with optional start and end properties.\n validRange: validRange,\n // range the view is formally responsible for.\n // for example, a month view might have 1st-31st, excluding padded dates\n currentRange: currentInfo.range,\n // name of largest unit being displayed, like \"month\" or \"week\"\n currentRangeUnit: currentInfo.unit,\n isRangeAllDay: isRangeAllDay,\n // dates that display events and accept drag-n-drop\n // will be `null` if no dates accept events\n activeRange: activeRange,\n // date range with a rendered skeleton\n // includes not-active days that need some sort of DOM\n renderRange: renderRange,\n // Duration object that denotes the first visible time of any given day\n minTime: minTime,\n // Duration object that denotes the exclusive visible end time of any given day\n maxTime: maxTime,\n isValid: isValid,\n // how far the current date will move for a prev/next operation\n dateIncrement: this.buildDateIncrement(currentInfo.duration)\n // pass a fallback (might be null) ^\n };\n };\n // Builds an object with optional start/end properties.\n // Indicates the minimum/maximum dates to display.\n // not responsible for trimming hidden days.\n DateProfileGenerator.prototype.buildValidRange = function () {\n return this.getRangeOption('validRange', this.calendar.getNow()) ||\n { start: null, end: null }; // completely open-ended\n };\n // Builds a structure with info about the \"current\" range, the range that is\n // highlighted as being the current month for example.\n // See build() for a description of `direction`.\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\n var _a = this, viewSpec = _a.viewSpec, dateEnv = _a.dateEnv;\n var duration = null;\n var unit = null;\n var range = null;\n var dayCount;\n if (viewSpec.duration) {\n duration = viewSpec.duration;\n unit = viewSpec.durationUnit;\n range = this.buildRangeFromDuration(date, direction, duration, unit);\n }\n else if ((dayCount = this.options.dayCount)) {\n unit = 'day';\n range = this.buildRangeFromDayCount(date, direction, dayCount);\n }\n else if ((range = this.buildCustomVisibleRange(date))) {\n unit = dateEnv.greatestWholeUnit(range.start, range.end).unit;\n }\n else {\n duration = this.getFallbackDuration();\n unit = greatestDurationDenominator(duration).unit;\n range = this.buildRangeFromDuration(date, direction, duration, unit);\n }\n return { duration: duration, unit: unit, range: range };\n };\n DateProfileGenerator.prototype.getFallbackDuration = function () {\n return createDuration({ day: 1 });\n };\n // Returns a new activeRange to have time values (un-ambiguate)\n // minTime or maxTime causes the range to expand.\n DateProfileGenerator.prototype.adjustActiveRange = function (range, minTime, maxTime) {\n var dateEnv = this.dateEnv;\n var start = range.start;\n var end = range.end;\n if (this.viewSpec.class.prototype.usesMinMaxTime) {\n // expand active range if minTime is negative (why not when positive?)\n if (asRoughDays(minTime) < 0) {\n start = startOfDay(start); // necessary?\n start = dateEnv.add(start, minTime);\n }\n // expand active range if maxTime is beyond one day (why not when positive?)\n if (asRoughDays(maxTime) > 1) {\n end = startOfDay(end); // necessary?\n end = addDays(end, -1);\n end = dateEnv.add(end, maxTime);\n }\n }\n return { start: start, end: end };\n };\n // Builds the \"current\" range when it is specified as an explicit duration.\n // `unit` is the already-computed greatestDurationDenominator unit of duration.\n DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\n var dateEnv = this.dateEnv;\n var alignment = this.options.dateAlignment;\n var dateIncrementInput;\n var dateIncrementDuration;\n var start;\n var end;\n var res;\n // compute what the alignment should be\n if (!alignment) {\n dateIncrementInput = this.options.dateIncrement;\n if (dateIncrementInput) {\n dateIncrementDuration = createDuration(dateIncrementInput);\n // use the smaller of the two units\n if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) {\n alignment = greatestDurationDenominator(dateIncrementDuration, !getWeeksFromInput(dateIncrementInput)).unit;\n }\n else {\n alignment = unit;\n }\n }\n else {\n alignment = unit;\n }\n }\n // if the view displays a single day or smaller\n if (asRoughDays(duration) <= 1) {\n if (this.isHiddenDay(start)) {\n start = this.skipHiddenDays(start, direction);\n start = startOfDay(start);\n }\n }\n function computeRes() {\n start = dateEnv.startOf(date, alignment);\n end = dateEnv.add(start, duration);\n res = { start: start, end: end };\n }\n computeRes();\n // if range is completely enveloped by hidden days, go past the hidden days\n if (!this.trimHiddenDays(res)) {\n date = this.skipHiddenDays(date, direction);\n computeRes();\n }\n return res;\n };\n // Builds the \"current\" range when a dayCount is specified.\n DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\n var dateEnv = this.dateEnv;\n var customAlignment = this.options.dateAlignment;\n var runningCount = 0;\n var start = date;\n var end;\n if (customAlignment) {\n start = dateEnv.startOf(start, customAlignment);\n }\n start = startOfDay(start);\n start = this.skipHiddenDays(start, direction);\n end = start;\n do {\n end = addDays(end, 1);\n if (!this.isHiddenDay(end)) {\n runningCount++;\n }\n } while (runningCount < dayCount);\n return { start: start, end: end };\n };\n // Builds a normalized range object for the \"visible\" range,\n // which is a way to define the currentRange and activeRange at the same time.\n DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\n var dateEnv = this.dateEnv;\n var visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date));\n if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) {\n return null;\n }\n return visibleRange;\n };\n // Computes the range that will represent the element/cells for *rendering*,\n // but which may have voided days/times.\n // not responsible for trimming hidden days.\n DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {\n return currentRange;\n };\n // Compute the duration value that should be added/substracted to the current date\n // when a prev/next operation happens.\n DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\n var dateIncrementInput = this.options.dateIncrement;\n var customAlignment;\n if (dateIncrementInput) {\n return createDuration(dateIncrementInput);\n }\n else if ((customAlignment = this.options.dateAlignment)) {\n return createDuration(1, customAlignment);\n }\n else if (fallback) {\n return fallback;\n }\n else {\n return createDuration({ days: 1 });\n }\n };\n // Arguments after name will be forwarded to a hypothetical function value\n // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\n // Always clone your objects if you fear mutation.\n DateProfileGenerator.prototype.getRangeOption = function (name) {\n var otherArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n otherArgs[_i - 1] = arguments[_i];\n }\n var val = this.options[name];\n if (typeof val === 'function') {\n val = val.apply(null, otherArgs);\n }\n if (val) {\n val = parseRange(val, this.dateEnv);\n }\n if (val) {\n val = computeVisibleDayRange(val);\n }\n return val;\n };\n /* Hidden Days\n ------------------------------------------------------------------------------------------------------------------*/\n // Initializes internal variables related to calculating hidden days-of-week\n DateProfileGenerator.prototype.initHiddenDays = function () {\n var hiddenDays = this.options.hiddenDays || []; // array of day-of-week indices that are hidden\n var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n var dayCnt = 0;\n var i;\n if (this.options.weekends === false) {\n hiddenDays.push(0, 6); // 0=sunday, 6=saturday\n }\n for (i = 0; i < 7; i++) {\n if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {\n dayCnt++;\n }\n }\n if (!dayCnt) {\n throw new Error('invalid hiddenDays'); // all days were hidden? bad.\n }\n this.isHiddenDayHash = isHiddenDayHash;\n };\n // Remove days from the beginning and end of the range that are computed as hidden.\n // If the whole range is trimmed off, returns null\n DateProfileGenerator.prototype.trimHiddenDays = function (range) {\n var start = range.start;\n var end = range.end;\n if (start) {\n start = this.skipHiddenDays(start);\n }\n if (end) {\n end = this.skipHiddenDays(end, -1, true);\n }\n if (start == null || end == null || start < end) {\n return { start: start, end: end };\n }\n return null;\n };\n // Is the current day hidden?\n // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n DateProfileGenerator.prototype.isHiddenDay = function (day) {\n if (day instanceof Date) {\n day = day.getUTCDay();\n }\n return this.isHiddenDayHash[day];\n };\n // Incrementing the current day until it is no longer a hidden day, returning a copy.\n // DOES NOT CONSIDER validRange!\n // If the initial value of `date` is not a hidden day, don't do anything.\n // Pass `isExclusive` as `true` if you are dealing with an end date.\n // `inc` defaults to `1` (increment one day forward each time)\n DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) {\n if (inc === void 0) { inc = 1; }\n if (isExclusive === void 0) { isExclusive = false; }\n while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {\n date = addDays(date, inc);\n }\n return date;\n };\n return DateProfileGenerator;\n}());\nexport default DateProfileGenerator;\n// TODO: find a way to avoid comparing DateProfiles. it's tedious\nexport function isDateProfilesEqual(p0, p1) {\n return rangesEqual(p0.validRange, p1.validRange) &&\n rangesEqual(p0.activeRange, p1.activeRange) &&\n rangesEqual(p0.renderRange, p1.renderRange) &&\n durationsEqual(p0.minTime, p1.minTime) &&\n durationsEqual(p0.maxTime, p1.maxTime);\n /*\n TODO: compare more?\n currentRange: DateRange\n currentRangeUnit: string\n isRangeAllDay: boolean\n isValid: boolean\n dateIncrement: Duration\n */\n}\n","import * as tslib_1 from \"tslib\";\nimport reduceEventSources from './eventSources';\nimport reduceEventStore from './eventStore';\nimport { isDateProfilesEqual } from '../DateProfileGenerator';\nimport { rangeContainsMarker } from '../datelib/date-range';\nexport default function (state, action, calendar) {\n var viewType = reduceViewType(state.viewType, action);\n var dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar);\n var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar);\n var nextState = tslib_1.__assign({}, state, { viewType: viewType,\n dateProfile: dateProfile, currentDate: reduceCurrentDate(state.currentDate, action, dateProfile), eventSources: eventSources, eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar), dateSelection: reduceDateSelection(state.dateSelection, action, calendar), eventSelection: reduceSelectedEvent(state.eventSelection, action), eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar), eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar), eventSourceLoadingLevel: computeLoadingLevel(eventSources), loadingLevel: computeLoadingLevel(eventSources) });\n for (var _i = 0, _a = calendar.pluginSystem.hooks.reducers; _i < _a.length; _i++) {\n var reducerFunc = _a[_i];\n nextState = reducerFunc(nextState, action, calendar);\n }\n // console.log(action.type, nextState)\n return nextState;\n}\nfunction reduceViewType(currentViewType, action) {\n switch (action.type) {\n case 'SET_VIEW_TYPE':\n return action.viewType;\n default:\n return currentViewType;\n }\n}\nfunction reduceDateProfile(currentDateProfile, action, currentDate, viewType, calendar) {\n var newDateProfile;\n switch (action.type) {\n case 'PREV':\n newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate);\n break;\n case 'NEXT':\n newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate);\n break;\n case 'SET_DATE':\n if (!currentDateProfile.activeRange ||\n !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)) {\n newDateProfile = calendar.dateProfileGenerators[viewType].build(action.dateMarker, undefined, true // forceToValid\n );\n }\n break;\n case 'SET_VIEW_TYPE':\n var generator = calendar.dateProfileGenerators[viewType];\n if (!generator) {\n throw new Error(viewType ?\n 'The FullCalendar view \"' + viewType + '\" does not exist. Make sure your plugins are loaded correctly.' :\n 'No available FullCalendar view plugins.');\n }\n newDateProfile = generator.build(action.dateMarker || currentDate, undefined, true // forceToValid\n );\n break;\n }\n if (newDateProfile &&\n newDateProfile.isValid &&\n !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))) {\n return newDateProfile;\n }\n else {\n return currentDateProfile;\n }\n}\nfunction reduceCurrentDate(currentDate, action, dateProfile) {\n switch (action.type) {\n case 'PREV':\n case 'NEXT':\n if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n return dateProfile.currentRange.start;\n }\n else {\n return currentDate;\n }\n case 'SET_DATE':\n case 'SET_VIEW_TYPE':\n var newDate = action.dateMarker || currentDate;\n if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) {\n return dateProfile.currentRange.start;\n }\n else {\n return newDate;\n }\n default:\n return currentDate;\n }\n}\nfunction reduceDateSelection(currentSelection, action, calendar) {\n switch (action.type) {\n case 'SELECT_DATES':\n return action.selection;\n case 'UNSELECT_DATES':\n return null;\n default:\n return currentSelection;\n }\n}\nfunction reduceSelectedEvent(currentInstanceId, action) {\n switch (action.type) {\n case 'SELECT_EVENT':\n return action.eventInstanceId;\n case 'UNSELECT_EVENT':\n return '';\n default:\n return currentInstanceId;\n }\n}\nfunction reduceEventDrag(currentDrag, action, sources, calendar) {\n switch (action.type) {\n case 'SET_EVENT_DRAG':\n var newDrag = action.state;\n return {\n affectedEvents: newDrag.affectedEvents,\n mutatedEvents: newDrag.mutatedEvents,\n isEvent: newDrag.isEvent,\n origSeg: newDrag.origSeg\n };\n case 'UNSET_EVENT_DRAG':\n return null;\n default:\n return currentDrag;\n }\n}\nfunction reduceEventResize(currentResize, action, sources, calendar) {\n switch (action.type) {\n case 'SET_EVENT_RESIZE':\n var newResize = action.state;\n return {\n affectedEvents: newResize.affectedEvents,\n mutatedEvents: newResize.mutatedEvents,\n isEvent: newResize.isEvent,\n origSeg: newResize.origSeg\n };\n case 'UNSET_EVENT_RESIZE':\n return null;\n default:\n return currentResize;\n }\n}\nfunction computeLoadingLevel(eventSources) {\n var cnt = 0;\n for (var sourceId in eventSources) {\n if (eventSources[sourceId].isFetching) {\n cnt++;\n }\n }\n return cnt;\n}\n","import { rangesEqual } from '../datelib/date-range';\nimport { refineProps } from '../util/misc';\nimport { parseEventDef, createEventInstance } from './event';\nimport { compileEventUi } from '../component/event-rendering';\nvar STANDARD_PROPS = {\n start: null,\n end: null,\n allDay: Boolean\n};\nexport function parseDateSpan(raw, dateEnv, defaultDuration) {\n var span = parseOpenDateSpan(raw, dateEnv);\n var range = span.range;\n if (!range.start) {\n return null;\n }\n if (!range.end) {\n if (defaultDuration == null) {\n return null;\n }\n else {\n range.end = dateEnv.add(range.start, defaultDuration);\n }\n }\n return span;\n}\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\nexport function parseOpenDateSpan(raw, dateEnv) {\n var leftovers = {};\n var standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers);\n var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;\n var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;\n var allDay = standardProps.allDay;\n if (allDay == null) {\n allDay = (startMeta && startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified);\n }\n // use this leftover object as the selection object\n leftovers.range = {\n start: startMeta ? startMeta.marker : null,\n end: endMeta ? endMeta.marker : null\n };\n leftovers.allDay = allDay;\n return leftovers;\n}\nexport function isDateSpansEqual(span0, span1) {\n return rangesEqual(span0.range, span1.range) &&\n span0.allDay === span1.allDay &&\n isSpanPropsEqual(span0, span1);\n}\n// the NON-DATE-RELATED props\nfunction isSpanPropsEqual(span0, span1) {\n for (var propName in span1) {\n if (propName !== 'range' && propName !== 'allDay') {\n if (span0[propName] !== span1[propName]) {\n return false;\n }\n }\n }\n // are there any props that span0 has that span1 DOESN'T have?\n // both have range/allDay, so no need to special-case.\n for (var propName in span0) {\n if (!(propName in span1)) {\n return false;\n }\n }\n return true;\n}\nexport function buildDateSpanApi(span, dateEnv) {\n return {\n start: dateEnv.toDate(span.range.start),\n end: dateEnv.toDate(span.range.end),\n startStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),\n endStr: dateEnv.formatIso(span.range.end, { omitTime: span.allDay }),\n allDay: span.allDay\n };\n}\nexport function buildDatePointApi(span, dateEnv) {\n return {\n date: dateEnv.toDate(span.range.start),\n dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),\n allDay: span.allDay\n };\n}\nexport function fabricateEventRange(dateSpan, eventUiBases, calendar) {\n var def = parseEventDef({ editable: false }, '', // sourceId\n dateSpan.allDay, true, // hasEnd\n calendar);\n return {\n def: def,\n ui: compileEventUi(def, eventUiBases),\n instance: createEventInstance(def.defId, dateSpan.range),\n range: dateSpan.range,\n isStart: true,\n isEnd: true\n };\n}\n","import * as tslib_1 from \"tslib\";\nexport function compileViewDefs(defaultConfigs, overrideConfigs) {\n var hash = {};\n var viewType;\n for (viewType in defaultConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n for (viewType in overrideConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n return hash;\n}\nfunction ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n if (hash[viewType]) {\n return hash[viewType];\n }\n var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n if (viewDef) {\n hash[viewType] = viewDef;\n }\n return viewDef;\n}\nfunction buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n var defaultConfig = defaultConfigs[viewType];\n var overrideConfig = overrideConfigs[viewType];\n var queryProp = function (name) {\n return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :\n ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null);\n };\n var theClass = queryProp('class');\n var superType = queryProp('superType');\n if (!superType && theClass) {\n superType =\n findViewNameBySubclass(theClass, overrideConfigs) ||\n findViewNameBySubclass(theClass, defaultConfigs);\n }\n var superDef = null;\n if (superType) {\n if (superType === viewType) {\n throw new Error('Can\\'t have a custom view type that references itself');\n }\n superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);\n }\n if (!theClass && superDef) {\n theClass = superDef.class;\n }\n if (!theClass) {\n return null; // don't throw a warning, might be settings for a single-unit view\n }\n return {\n type: viewType,\n class: theClass,\n defaults: tslib_1.__assign({}, (superDef ? superDef.defaults : {}), (defaultConfig ? defaultConfig.options : {})),\n overrides: tslib_1.__assign({}, (superDef ? superDef.overrides : {}), (overrideConfig ? overrideConfig.options : {}))\n };\n}\nfunction findViewNameBySubclass(viewSubclass, configs) {\n var superProto = Object.getPrototypeOf(viewSubclass.prototype);\n for (var viewType in configs) {\n var parsed = configs[viewType];\n // need DIRECT subclass, so instanceof won't do it\n if (parsed.class && parsed.class.prototype === superProto) {\n return viewType;\n }\n }\n return '';\n}\n","import { refineProps } from '../util/misc';\nimport { mapHash } from '../util/object';\nexport function parseViewConfigs(inputs) {\n return mapHash(inputs, parseViewConfig);\n}\nvar VIEW_DEF_PROPS = {\n type: String,\n class: null\n};\nfunction parseViewConfig(input) {\n if (typeof input === 'function') {\n input = { class: input };\n }\n var options = {};\n var props = refineProps(input, VIEW_DEF_PROPS, {}, options);\n return {\n superType: props.type,\n class: props.class,\n options: options\n };\n}\n","import * as tslib_1 from \"tslib\";\nimport { compileViewDefs } from './view-def';\nimport { createDuration, greatestDurationDenominator, getWeeksFromInput } from '../datelib/duration';\nimport { mapHash } from '../util/object';\nimport { globalDefaults } from '../options';\nimport { parseViewConfigs } from './view-config';\nexport function buildViewSpecs(defaultInputs, optionsManager) {\n var defaultConfigs = parseViewConfigs(defaultInputs);\n var overrideConfigs = parseViewConfigs(optionsManager.overrides.views);\n var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);\n return mapHash(viewDefs, function (viewDef) {\n return buildViewSpec(viewDef, overrideConfigs, optionsManager);\n });\n}\nfunction buildViewSpec(viewDef, overrideConfigs, optionsManager) {\n var durationInput = viewDef.overrides.duration ||\n viewDef.defaults.duration ||\n optionsManager.dynamicOverrides.duration ||\n optionsManager.overrides.duration;\n var duration = null;\n var durationUnit = '';\n var singleUnit = '';\n var singleUnitOverrides = {};\n if (durationInput) {\n duration = createDuration(durationInput);\n if (duration) { // valid?\n var denom = greatestDurationDenominator(duration, !getWeeksFromInput(durationInput));\n durationUnit = denom.unit;\n if (denom.value === 1) {\n singleUnit = durationUnit;\n singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {};\n }\n }\n }\n var queryButtonText = function (options) {\n var buttonTextMap = options.buttonText || {};\n var buttonTextKey = viewDef.defaults.buttonTextKey;\n if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n return buttonTextMap[buttonTextKey];\n }\n if (buttonTextMap[viewDef.type] != null) {\n return buttonTextMap[viewDef.type];\n }\n if (buttonTextMap[singleUnit] != null) {\n return buttonTextMap[singleUnit];\n }\n };\n return {\n type: viewDef.type,\n class: viewDef.class,\n duration: duration,\n durationUnit: durationUnit,\n singleUnit: singleUnit,\n options: tslib_1.__assign({}, globalDefaults, viewDef.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, singleUnitOverrides, viewDef.overrides, optionsManager.dynamicOverrides),\n buttonTextOverride: queryButtonText(optionsManager.dynamicOverrides) ||\n queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\n viewDef.overrides.buttonText,\n buttonTextDefault: queryButtonText(optionsManager.localeDefaults) ||\n queryButtonText(optionsManager.dirDefaults) ||\n viewDef.defaults.buttonText ||\n queryButtonText(globalDefaults) ||\n viewDef.type // fall back to given view name\n };\n}\n","import * as tslib_1 from \"tslib\";\nimport { htmlEscape } from './util/html';\nimport { htmlToElement, appendToElement, findElements, createElement, removeElement } from './util/dom-manip';\nimport Component from './component/Component';\nimport { memoizeRendering } from './component/memoized-rendering';\nvar Toolbar = /** @class */ (function (_super) {\n tslib_1.__extends(Toolbar, _super);\n function Toolbar(extraClassName) {\n var _this = _super.call(this) || this;\n _this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout);\n _this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]);\n _this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]);\n _this._updateToday = memoizeRendering(_this.updateToday, null, [_this._renderLayout]);\n _this._updatePrev = memoizeRendering(_this.updatePrev, null, [_this._renderLayout]);\n _this._updateNext = memoizeRendering(_this.updateNext, null, [_this._renderLayout]);\n _this.el = createElement('div', { className: 'fc-toolbar ' + extraClassName });\n return _this;\n }\n Toolbar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this._renderLayout.unrender(); // should unrender everything else\n removeElement(this.el);\n };\n Toolbar.prototype.render = function (props) {\n this._renderLayout(props.layout);\n this._updateTitle(props.title);\n this._updateActiveButton(props.activeButton);\n this._updateToday(props.isTodayEnabled);\n this._updatePrev(props.isPrevEnabled);\n this._updateNext(props.isNextEnabled);\n };\n Toolbar.prototype.renderLayout = function (layout) {\n var el = this.el;\n this.viewsWithButtons = [];\n appendToElement(el, this.renderSection('left', layout.left));\n appendToElement(el, this.renderSection('center', layout.center));\n appendToElement(el, this.renderSection('right', layout.right));\n };\n Toolbar.prototype.unrenderLayout = function () {\n this.el.innerHTML = '';\n };\n Toolbar.prototype.renderSection = function (position, buttonStr) {\n var _this = this;\n var _a = this.context, theme = _a.theme, calendar = _a.calendar;\n var optionsManager = calendar.optionsManager;\n var viewSpecs = calendar.viewSpecs;\n var sectionEl = createElement('div', { className: 'fc-' + position });\n var calendarCustomButtons = optionsManager.computed.customButtons || {};\n var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\n var calendarButtonText = optionsManager.computed.buttonText || {};\n if (buttonStr) {\n buttonStr.split(' ').forEach(function (buttonGroupStr, i) {\n var groupChildren = [];\n var isOnlyButtons = true;\n var groupEl;\n buttonGroupStr.split(',').forEach(function (buttonName, j) {\n var customButtonProps;\n var viewSpec;\n var buttonClick;\n var buttonIcon; // only one of these will be set\n var buttonText; // \"\n var buttonInnerHtml;\n var buttonClasses;\n var buttonEl;\n var buttonAriaAttr;\n if (buttonName === 'title') {\n groupChildren.push(htmlToElement('

 

')); // we always want it to take up height\n isOnlyButtons = false;\n }\n else {\n if ((customButtonProps = calendarCustomButtons[buttonName])) {\n buttonClick = function (ev) {\n if (customButtonProps.click) {\n customButtonProps.click.call(buttonEl, ev);\n }\n };\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n (buttonIcon = theme.getIconClass(buttonName)) ||\n (buttonText = customButtonProps.text);\n }\n else if ((viewSpec = viewSpecs[buttonName])) {\n _this.viewsWithButtons.push(buttonName);\n buttonClick = function () {\n calendar.changeView(buttonName);\n };\n (buttonText = viewSpec.buttonTextOverride) ||\n (buttonIcon = theme.getIconClass(buttonName)) ||\n (buttonText = viewSpec.buttonTextDefault);\n }\n else if (calendar[buttonName]) { // a calendar method\n buttonClick = function () {\n calendar[buttonName]();\n };\n (buttonText = calendarButtonTextOverrides[buttonName]) ||\n (buttonIcon = theme.getIconClass(buttonName)) ||\n (buttonText = calendarButtonText[buttonName]);\n // ^ everything else is considered default\n }\n if (buttonClick) {\n buttonClasses = [\n 'fc-' + buttonName + '-button',\n theme.getClass('button')\n ];\n if (buttonText) {\n buttonInnerHtml = htmlEscape(buttonText);\n buttonAriaAttr = '';\n }\n else if (buttonIcon) {\n buttonInnerHtml = \"\";\n buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\n }\n buttonEl = htmlToElement(// type=\"button\" so that it doesn't submit a form\n '');\n buttonEl.addEventListener('click', buttonClick);\n groupChildren.push(buttonEl);\n }\n }\n });\n if (groupChildren.length > 1) {\n groupEl = document.createElement('div');\n var buttonGroupClassName = theme.getClass('buttonGroup');\n if (isOnlyButtons && buttonGroupClassName) {\n groupEl.classList.add(buttonGroupClassName);\n }\n appendToElement(groupEl, groupChildren);\n sectionEl.appendChild(groupEl);\n }\n else {\n appendToElement(sectionEl, groupChildren); // 1 or 0 children\n }\n });\n }\n return sectionEl;\n };\n Toolbar.prototype.updateToday = function (isTodayEnabled) {\n this.toggleButtonEnabled('today', isTodayEnabled);\n };\n Toolbar.prototype.updatePrev = function (isPrevEnabled) {\n this.toggleButtonEnabled('prev', isPrevEnabled);\n };\n Toolbar.prototype.updateNext = function (isNextEnabled) {\n this.toggleButtonEnabled('next', isNextEnabled);\n };\n Toolbar.prototype.updateTitle = function (text) {\n findElements(this.el, 'h2').forEach(function (titleEl) {\n titleEl.innerText = text;\n });\n };\n Toolbar.prototype.updateActiveButton = function (buttonName) {\n var theme = this.context.theme;\n var className = theme.getClass('buttonActive');\n findElements(this.el, 'button').forEach(function (buttonEl) {\n if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) {\n buttonEl.classList.add(className);\n }\n else {\n buttonEl.classList.remove(className);\n }\n });\n };\n Toolbar.prototype.toggleButtonEnabled = function (buttonName, bool) {\n findElements(this.el, '.fc-' + buttonName + '-button').forEach(function (buttonEl) {\n buttonEl.disabled = !bool;\n });\n };\n return Toolbar;\n}(Component));\nexport default Toolbar;\n","import * as tslib_1 from \"tslib\";\nimport Component from './component/Component';\nimport Toolbar from './Toolbar';\nimport { prependToElement, createElement, removeElement, appendToElement, applyStyle } from './util/dom-manip';\nimport { rangeContainsMarker } from './datelib/date-range';\nimport { parseBusinessHours } from './structs/business-hours';\nimport { memoize } from './util/memoize';\nimport { computeHeightAndMargins } from './util/dom-geom';\nimport { createFormatter } from './datelib/formatting';\nimport { diffWholeDays } from './datelib/marker';\nimport { memoizeRendering } from './component/memoized-rendering';\nimport { __assign } from 'tslib';\nvar CalendarComponent = /** @class */ (function (_super) {\n tslib_1.__extends(CalendarComponent, _super);\n function CalendarComponent(el) {\n var _this = _super.call(this) || this;\n _this.elClassNames = [];\n _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);\n _this.renderToolbars = memoizeRendering(_this._renderToolbars, _this._unrenderToolbars, [_this.renderSkeleton]);\n _this.buildComponentContext = memoize(buildComponentContext);\n _this.buildViewPropTransformers = memoize(buildViewPropTransformers);\n _this.el = el;\n _this.computeTitle = memoize(computeTitle);\n _this.parseBusinessHours = memoize(function (input) {\n return parseBusinessHours(input, _this.context.calendar);\n });\n return _this;\n }\n CalendarComponent.prototype.render = function (props, context) {\n this.freezeHeight();\n var title = this.computeTitle(props.dateProfile, props.viewSpec.options);\n this.renderSkeleton(context);\n this.renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, title);\n this.renderView(props, title);\n this.updateSize();\n this.thawHeight();\n };\n CalendarComponent.prototype.destroy = function () {\n if (this.header) {\n this.header.destroy();\n }\n if (this.footer) {\n this.footer.destroy();\n }\n this.renderSkeleton.unrender(); // will call destroyView\n _super.prototype.destroy.call(this);\n };\n CalendarComponent.prototype._renderSkeleton = function (context) {\n this.updateElClassNames(context);\n prependToElement(this.el, this.contentEl = createElement('div', { className: 'fc-view-container' }));\n var calendar = context.calendar;\n for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {\n var modifyViewContainer = _a[_i];\n modifyViewContainer(this.contentEl, calendar);\n }\n };\n CalendarComponent.prototype._unrenderSkeleton = function () {\n // weird to have this here\n if (this.view) {\n this.savedScroll = this.view.queryScroll();\n this.view.destroy();\n this.view = null;\n }\n removeElement(this.contentEl);\n this.removeElClassNames();\n };\n CalendarComponent.prototype.removeElClassNames = function () {\n var classList = this.el.classList;\n for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {\n var className = _a[_i];\n classList.remove(className);\n }\n this.elClassNames = [];\n };\n CalendarComponent.prototype.updateElClassNames = function (context) {\n this.removeElClassNames();\n var theme = context.theme, options = context.options;\n this.elClassNames = [\n 'fc',\n 'fc-' + options.dir,\n theme.getClass('widget')\n ];\n var classList = this.el.classList;\n for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {\n var className = _a[_i];\n classList.add(className);\n }\n };\n CalendarComponent.prototype._renderToolbars = function (viewSpec, dateProfile, currentDate, title) {\n var _a = this, context = _a.context, header = _a.header, footer = _a.footer;\n var options = context.options, calendar = context.calendar;\n var headerLayout = options.header;\n var footerLayout = options.footer;\n var dateProfileGenerator = this.props.dateProfileGenerator;\n var now = calendar.getNow();\n var todayInfo = dateProfileGenerator.build(now);\n var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate);\n var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate);\n var toolbarProps = {\n title: title,\n activeButton: viewSpec.type,\n isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),\n isPrevEnabled: prevInfo.isValid,\n isNextEnabled: nextInfo.isValid\n };\n if (headerLayout) {\n if (!header) {\n header = this.header = new Toolbar('fc-header-toolbar');\n prependToElement(this.el, header.el);\n }\n header.receiveProps(tslib_1.__assign({ layout: headerLayout }, toolbarProps), context);\n }\n else if (header) {\n header.destroy();\n header = this.header = null;\n }\n if (footerLayout) {\n if (!footer) {\n footer = this.footer = new Toolbar('fc-footer-toolbar');\n appendToElement(this.el, footer.el);\n }\n footer.receiveProps(tslib_1.__assign({ layout: footerLayout }, toolbarProps), context);\n }\n else if (footer) {\n footer.destroy();\n footer = this.footer = null;\n }\n };\n CalendarComponent.prototype._unrenderToolbars = function () {\n if (this.header) {\n this.header.destroy();\n this.header = null;\n }\n if (this.footer) {\n this.footer.destroy();\n this.footer = null;\n }\n };\n CalendarComponent.prototype.renderView = function (props, title) {\n var view = this.view;\n var _a = this.context, calendar = _a.calendar, options = _a.options;\n var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator;\n if (!view || view.viewSpec !== viewSpec) {\n if (view) {\n view.destroy();\n }\n view = this.view = new viewSpec['class'](viewSpec, this.contentEl);\n if (this.savedScroll) {\n view.addScroll(this.savedScroll, true);\n this.savedScroll = null;\n }\n }\n view.title = title; // for the API\n var viewProps = {\n dateProfileGenerator: dateProfileGenerator,\n dateProfile: props.dateProfile,\n businessHours: this.parseBusinessHours(viewSpec.options.businessHours),\n eventStore: props.eventStore,\n eventUiBases: props.eventUiBases,\n dateSelection: props.dateSelection,\n eventSelection: props.eventSelection,\n eventDrag: props.eventDrag,\n eventResize: props.eventResize\n };\n var transformers = this.buildViewPropTransformers(calendar.pluginSystem.hooks.viewPropsTransformers);\n for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {\n var transformer = transformers_1[_i];\n __assign(viewProps, transformer.transform(viewProps, viewSpec, props, options));\n }\n view.receiveProps(viewProps, this.buildComponentContext(this.context, viewSpec, view));\n };\n // Sizing\n // -----------------------------------------------------------------------------------------------------------------\n CalendarComponent.prototype.updateSize = function (isResize) {\n if (isResize === void 0) { isResize = false; }\n var view = this.view;\n if (!view) {\n return; // why?\n }\n if (isResize || this.isHeightAuto == null) {\n this.computeHeightVars();\n }\n view.updateSize(isResize, this.viewHeight, this.isHeightAuto);\n view.updateNowIndicator(); // we need to guarantee this will run after updateSize\n view.popScroll(isResize);\n };\n CalendarComponent.prototype.computeHeightVars = function () {\n var calendar = this.context.calendar; // yuck. need to handle dynamic options\n var heightInput = calendar.opt('height');\n var contentHeightInput = calendar.opt('contentHeight');\n this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto';\n if (typeof contentHeightInput === 'number') { // exists and not 'auto'\n this.viewHeight = contentHeightInput;\n }\n else if (typeof contentHeightInput === 'function') { // exists and is a function\n this.viewHeight = contentHeightInput();\n }\n else if (typeof heightInput === 'number') { // exists and not 'auto'\n this.viewHeight = heightInput - this.queryToolbarsHeight();\n }\n else if (typeof heightInput === 'function') { // exists and is a function\n this.viewHeight = heightInput() - this.queryToolbarsHeight();\n }\n else if (heightInput === 'parent') { // set to height of parent element\n var parentEl = this.el.parentNode;\n this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight();\n }\n else {\n this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width /\n Math.max(calendar.opt('aspectRatio'), .5));\n }\n };\n CalendarComponent.prototype.queryToolbarsHeight = function () {\n var height = 0;\n if (this.header) {\n height += computeHeightAndMargins(this.header.el);\n }\n if (this.footer) {\n height += computeHeightAndMargins(this.footer.el);\n }\n return height;\n };\n // Height \"Freezing\"\n // -----------------------------------------------------------------------------------------------------------------\n CalendarComponent.prototype.freezeHeight = function () {\n applyStyle(this.el, {\n height: this.el.getBoundingClientRect().height,\n overflow: 'hidden'\n });\n };\n CalendarComponent.prototype.thawHeight = function () {\n applyStyle(this.el, {\n height: '',\n overflow: ''\n });\n };\n return CalendarComponent;\n}(Component));\nexport default CalendarComponent;\n// Title and Date Formatting\n// -----------------------------------------------------------------------------------------------------------------\n// Computes what the title at the top of the calendar should be for this view\nfunction computeTitle(dateProfile, viewOptions) {\n var range;\n // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n range = dateProfile.currentRange;\n }\n else { // for day units or smaller, use the actual day range\n range = dateProfile.activeRange;\n }\n return this.context.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay });\n}\n// Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\nfunction computeTitleFormat(dateProfile) {\n var currentRangeUnit = dateProfile.currentRangeUnit;\n if (currentRangeUnit === 'year') {\n return { year: 'numeric' };\n }\n else if (currentRangeUnit === 'month') {\n return { year: 'numeric', month: 'long' }; // like \"September 2014\"\n }\n else {\n var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);\n if (days !== null && days > 1) {\n // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n return { year: 'numeric', month: 'short', day: 'numeric' };\n }\n else {\n // one day. longer, like \"September 9 2014\"\n return { year: 'numeric', month: 'long', day: 'numeric' };\n }\n }\n}\n// build a context scoped to the view\nfunction buildComponentContext(context, viewSpec, view) {\n return context.extend(viewSpec.options, view);\n}\n// Plugin\n// -----------------------------------------------------------------------------------------------------------------\nfunction buildViewPropTransformers(theClasses) {\n return theClasses.map(function (theClass) {\n return new theClass();\n });\n}\n","var Interaction = /** @class */ (function () {\n function Interaction(settings) {\n this.component = settings.component;\n }\n Interaction.prototype.destroy = function () {\n };\n return Interaction;\n}());\nexport { Interaction };\nexport function parseInteractionSettings(component, input) {\n return {\n component: component,\n el: input.el,\n useEventCenter: input.useEventCenter != null ? input.useEventCenter : true\n };\n}\nexport function interactionSettingsToStore(settings) {\n var _a;\n return _a = {},\n _a[settings.component.uid] = settings,\n _a;\n}\n// global state\nexport var interactionSettingsStore = {};\n","import * as tslib_1 from \"tslib\";\nimport { listenBySelector } from '../util/dom-event';\nimport EventApi from '../api/EventApi';\nimport { elementClosest } from '../util/dom-manip';\nimport { getElSeg } from '../component/event-rendering';\nimport { Interaction } from './interaction';\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\nvar EventClicking = /** @class */ (function (_super) {\n tslib_1.__extends(EventClicking, _super);\n function EventClicking(settings) {\n var _this = _super.call(this, settings) || this;\n _this.handleSegClick = function (ev, segEl) {\n var component = _this.component;\n var _a = component.context, calendar = _a.calendar, view = _a.view;\n var seg = getElSeg(segEl);\n if (seg && // might be the
surrounding the more link\n component.isValidSegDownEl(ev.target)) {\n // our way to simulate a link click for elements that can't be tags\n // grab before trigger fired in case trigger trashes DOM thru rerendering\n var hasUrlContainer = elementClosest(ev.target, '.fc-has-url');\n var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';\n calendar.publiclyTrigger('eventClick', [\n {\n el: segEl,\n event: new EventApi(component.context.calendar, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: view\n }\n ]);\n if (url && !ev.defaultPrevented) {\n window.location.href = url;\n }\n }\n };\n var component = settings.component;\n _this.destroy = listenBySelector(component.el, 'click', component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegClick);\n return _this;\n }\n return EventClicking;\n}(Interaction));\nexport default EventClicking;\n","import * as tslib_1 from \"tslib\";\nimport { listenToHoverBySelector } from '../util/dom-event';\nimport EventApi from '../api/EventApi';\nimport { getElSeg } from '../component/event-rendering';\nimport { Interaction } from './interaction';\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\nvar EventHovering = /** @class */ (function (_super) {\n tslib_1.__extends(EventHovering, _super);\n function EventHovering(settings) {\n var _this = _super.call(this, settings) || this;\n // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n _this.handleEventElRemove = function (el) {\n if (el === _this.currentSegEl) {\n _this.handleSegLeave(null, _this.currentSegEl);\n }\n };\n _this.handleSegEnter = function (ev, segEl) {\n if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper\n segEl.classList.add('fc-allow-mouse-resize');\n _this.currentSegEl = segEl;\n _this.triggerEvent('eventMouseEnter', ev, segEl);\n }\n };\n _this.handleSegLeave = function (ev, segEl) {\n if (_this.currentSegEl) {\n segEl.classList.remove('fc-allow-mouse-resize');\n _this.currentSegEl = null;\n _this.triggerEvent('eventMouseLeave', ev, segEl);\n }\n };\n var component = settings.component;\n _this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave);\n // how to make sure component already has context?\n component.context.calendar.on('eventElRemove', _this.handleEventElRemove);\n return _this;\n }\n EventHovering.prototype.destroy = function () {\n this.removeHoverListeners();\n this.component.context.calendar.off('eventElRemove', this.handleEventElRemove);\n };\n EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {\n var component = this.component;\n var _a = component.context, calendar = _a.calendar, view = _a.view;\n var seg = getElSeg(segEl);\n if (!ev || component.isValidSegDownEl(ev.target)) {\n calendar.publiclyTrigger(publicEvName, [\n {\n el: segEl,\n event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: view\n }\n ]);\n }\n };\n return EventHovering;\n}(Interaction));\nexport default EventHovering;\n","import * as tslib_1 from \"tslib\";\nimport Theme from './Theme';\nvar StandardTheme = /** @class */ (function (_super) {\n tslib_1.__extends(StandardTheme, _super);\n function StandardTheme() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return StandardTheme;\n}(Theme));\nexport default StandardTheme;\nStandardTheme.prototype.classes = {\n widget: 'fc-unthemed',\n widgetHeader: 'fc-widget-header',\n widgetContent: 'fc-widget-content',\n buttonGroup: 'fc-button-group',\n button: 'fc-button fc-button-primary',\n buttonActive: 'fc-button-active',\n popoverHeader: 'fc-widget-header',\n popoverContent: 'fc-widget-content',\n // day grid\n headerRow: 'fc-widget-header',\n dayRow: 'fc-widget-content',\n // list view\n listView: 'fc-widget-content'\n};\nStandardTheme.prototype.baseIconClass = 'fc-icon';\nStandardTheme.prototype.iconClasses = {\n close: 'fc-icon-x',\n prev: 'fc-icon-chevron-left',\n next: 'fc-icon-chevron-right',\n prevYear: 'fc-icon-chevrons-left',\n nextYear: 'fc-icon-chevrons-right'\n};\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n","import * as tslib_1 from \"tslib\";\nimport { listenBySelector } from './util/dom-event';\nimport { capitaliseFirstLetter, debounce } from './util/misc';\nimport { default as EmitterMixin } from './common/EmitterMixin';\nimport OptionsManager from './OptionsManager';\nimport { buildLocale, parseRawLocales } from './datelib/locale';\nimport { DateEnv } from './datelib/env';\nimport { startOfDay } from './datelib/marker';\nimport { createFormatter } from './datelib/formatting';\nimport { createDuration } from './datelib/duration';\nimport reduce from './reducers/main';\nimport { parseDateSpan, buildDateSpanApi, buildDatePointApi } from './structs/date-span';\nimport { memoize, memoizeOutput } from './util/memoize';\nimport { mapHash, isPropsEqual } from './util/object';\nimport { parseEventSource } from './structs/event-source';\nimport { parseEvent } from './structs/event';\nimport EventSourceApi from './api/EventSourceApi';\nimport EventApi from './api/EventApi';\nimport { createEmptyEventStore, eventTupleToStore } from './structs/event-store';\nimport { processScopedUiProps } from './component/event-ui';\nimport { buildViewSpecs } from './structs/view-spec';\nimport { PluginSystem } from './plugin-system';\nimport CalendarComponent from './CalendarComponent';\nimport { __assign } from 'tslib';\nimport { refinePluginDefs } from './options';\nimport { parseInteractionSettings, interactionSettingsStore } from './interactions/interaction';\nimport EventClicking from './interactions/EventClicking';\nimport EventHovering from './interactions/EventHovering';\nimport StandardTheme from './theme/StandardTheme';\nimport { ComponentContext } from './component/Component';\nvar Calendar = /** @class */ (function () {\n function Calendar(el, overrides) {\n var _this = this;\n this.buildComponentContext = memoize(buildComponentContext);\n this.parseRawLocales = memoize(parseRawLocales);\n this.buildLocale = memoize(buildLocale);\n this.buildDateEnv = memoize(buildDateEnv);\n this.buildTheme = memoize(buildTheme);\n this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase);\n this.buildSelectionConfig = memoize(this._buildSelectionConfig);\n this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual);\n this.buildEventUiBases = memoize(buildEventUiBases);\n this.interactionsStore = {};\n this.actionQueue = [];\n this.isReducing = false;\n // isDisplaying: boolean = false // installed in DOM? accepting renders?\n this.needsRerender = false; // needs a render?\n this.isRendering = false; // currently in the executeRender function?\n this.renderingPauseDepth = 0;\n this.buildDelayedRerender = memoize(buildDelayedRerender);\n this.afterSizingTriggers = {};\n this.isViewUpdated = false;\n this.isDatesUpdated = false;\n this.isEventsUpdated = false;\n this.el = el;\n this.optionsManager = new OptionsManager(overrides || {});\n this.pluginSystem = new PluginSystem();\n // only do once. don't do in handleOptions. because can't remove plugins\n this.addPluginInputs(this.optionsManager.computed.plugins || []);\n this.handleOptions(this.optionsManager.computed);\n this.publiclyTrigger('_init'); // for tests\n this.hydrate();\n this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions\n .map(function (calendarInteractionClass) {\n return new calendarInteractionClass(_this);\n });\n }\n Calendar.prototype.addPluginInputs = function (pluginInputs) {\n var pluginDefs = refinePluginDefs(pluginInputs);\n for (var _i = 0, pluginDefs_1 = pluginDefs; _i < pluginDefs_1.length; _i++) {\n var pluginDef = pluginDefs_1[_i];\n this.pluginSystem.add(pluginDef);\n }\n };\n Object.defineProperty(Calendar.prototype, \"view\", {\n // public API\n get: function () {\n return this.component ? this.component.view : null;\n },\n enumerable: true,\n configurable: true\n });\n // Public API for rendering\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.render = function () {\n if (!this.component) {\n this.component = new CalendarComponent(this.el);\n this.renderableEventStore = createEmptyEventStore();\n this.bindHandlers();\n this.executeRender();\n }\n else {\n this.requestRerender();\n }\n };\n Calendar.prototype.destroy = function () {\n if (this.component) {\n this.unbindHandlers();\n this.component.destroy(); // don't null-out. in case API needs access\n this.component = null; // umm ???\n for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) {\n var interaction = _a[_i];\n interaction.destroy();\n }\n this.publiclyTrigger('_destroyed');\n }\n };\n // Handlers\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.bindHandlers = function () {\n var _this = this;\n // event delegation for nav links\n this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', function (ev, anchorEl) {\n var gotoOptions = anchorEl.getAttribute('data-goto');\n gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {};\n var dateEnv = _this.dateEnv;\n var dateMarker = dateEnv.createMarker(gotoOptions.date);\n var viewType = gotoOptions.type;\n // property like \"navLinkDayClick\". might be a string or a function\n var customAction = _this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click');\n if (typeof customAction === 'function') {\n customAction(dateEnv.toDate(dateMarker), ev);\n }\n else {\n if (typeof customAction === 'string') {\n viewType = customAction;\n }\n _this.zoomTo(dateMarker, viewType);\n }\n });\n if (this.opt('handleWindowResize')) {\n window.addEventListener('resize', this.windowResizeProxy = debounce(// prevents rapid calls\n this.windowResize.bind(this), this.opt('windowResizeDelay')));\n }\n };\n Calendar.prototype.unbindHandlers = function () {\n this.removeNavLinkListener();\n if (this.windowResizeProxy) {\n window.removeEventListener('resize', this.windowResizeProxy);\n this.windowResizeProxy = null;\n }\n };\n // Dispatcher\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.hydrate = function () {\n var _this = this;\n this.state = this.buildInitialState();\n var rawSources = this.opt('eventSources') || [];\n var singleRawSource = this.opt('events');\n var sources = []; // parsed\n if (singleRawSource) {\n rawSources.unshift(singleRawSource);\n }\n for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {\n var rawSource = rawSources_1[_i];\n var source = parseEventSource(rawSource, this);\n if (source) {\n sources.push(source);\n }\n }\n this.batchRendering(function () {\n _this.dispatch({ type: 'INIT' }); // pass in sources here?\n _this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: sources });\n _this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: _this.opt('defaultView') || _this.pluginSystem.hooks.defaultView\n });\n });\n };\n Calendar.prototype.buildInitialState = function () {\n return {\n viewType: null,\n loadingLevel: 0,\n eventSourceLoadingLevel: 0,\n currentDate: this.getInitialDate(),\n dateProfile: null,\n eventSources: {},\n eventStore: createEmptyEventStore(),\n dateSelection: null,\n eventSelection: '',\n eventDrag: null,\n eventResize: null\n };\n };\n Calendar.prototype.dispatch = function (action) {\n this.actionQueue.push(action);\n if (!this.isReducing) {\n this.isReducing = true;\n var oldState = this.state;\n while (this.actionQueue.length) {\n this.state = this.reduce(this.state, this.actionQueue.shift(), this);\n }\n var newState = this.state;\n this.isReducing = false;\n if (!oldState.loadingLevel && newState.loadingLevel) {\n this.publiclyTrigger('loading', [true]);\n }\n else if (oldState.loadingLevel && !newState.loadingLevel) {\n this.publiclyTrigger('loading', [false]);\n }\n var view = this.component && this.component.view;\n if (oldState.eventStore !== newState.eventStore) {\n if (oldState.eventStore) {\n this.isEventsUpdated = true;\n }\n }\n if (oldState.dateProfile !== newState.dateProfile) {\n if (oldState.dateProfile && view) { // why would view be null!?\n this.publiclyTrigger('datesDestroy', [\n {\n view: view,\n el: view.el\n }\n ]);\n }\n this.isDatesUpdated = true;\n }\n if (oldState.viewType !== newState.viewType) {\n if (oldState.viewType && view) { // why would view be null!?\n this.publiclyTrigger('viewSkeletonDestroy', [\n {\n view: view,\n el: view.el\n }\n ]);\n }\n this.isViewUpdated = true;\n }\n this.requestRerender();\n }\n };\n Calendar.prototype.reduce = function (state, action, calendar) {\n return reduce(state, action, calendar);\n };\n // Render Queue\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.requestRerender = function () {\n this.needsRerender = true;\n this.delayedRerender(); // will call a debounced-version of tryRerender\n };\n Calendar.prototype.tryRerender = function () {\n if (this.component && // must be accepting renders\n this.needsRerender && // indicates that a rerender was requested\n !this.renderingPauseDepth && // not paused\n !this.isRendering // not currently in the render loop\n ) {\n this.executeRender();\n }\n };\n Calendar.prototype.batchRendering = function (func) {\n this.renderingPauseDepth++;\n func();\n this.renderingPauseDepth--;\n if (this.needsRerender) {\n this.requestRerender();\n }\n };\n // Rendering\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.executeRender = function () {\n // clear these BEFORE the render so that new values will accumulate during render\n this.needsRerender = false;\n this.isRendering = true;\n this.renderComponent();\n this.isRendering = false;\n // received a rerender request while rendering\n if (this.needsRerender) {\n this.delayedRerender();\n }\n };\n /*\n don't call this directly. use executeRender instead\n */\n Calendar.prototype.renderComponent = function () {\n var _a = this, state = _a.state, component = _a.component;\n var viewType = state.viewType;\n var viewSpec = this.viewSpecs[viewType];\n if (!viewSpec) {\n throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\n }\n // if event sources are still loading and progressive rendering hasn't been enabled,\n // keep rendering the last fully loaded set of events\n var renderableEventStore = this.renderableEventStore =\n (state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering')) ?\n this.renderableEventStore :\n state.eventStore;\n var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options);\n var eventUiBySource = this.buildEventUiBySource(state.eventSources);\n var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);\n component.receiveProps(tslib_1.__assign({}, state, { viewSpec: viewSpec, dateProfileGenerator: this.dateProfileGenerators[viewType], dateProfile: state.dateProfile, eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }), this.buildComponentContext(this.theme, this.dateEnv, this.optionsManager.computed));\n if (this.isViewUpdated) {\n this.isViewUpdated = false;\n this.publiclyTrigger('viewSkeletonRender', [\n {\n view: component.view,\n el: component.view.el\n }\n ]);\n }\n if (this.isDatesUpdated) {\n this.isDatesUpdated = false;\n this.publiclyTrigger('datesRender', [\n {\n view: component.view,\n el: component.view.el\n }\n ]);\n }\n if (this.isEventsUpdated) {\n this.isEventsUpdated = false;\n }\n this.releaseAfterSizingTriggers();\n };\n // Options\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.setOption = function (name, val) {\n var _a;\n this.mutateOptions((_a = {}, _a[name] = val, _a), [], true);\n };\n Calendar.prototype.getOption = function (name) {\n return this.optionsManager.computed[name];\n };\n Calendar.prototype.opt = function (name) {\n return this.optionsManager.computed[name];\n };\n Calendar.prototype.viewOpt = function (name) {\n return this.viewOpts()[name];\n };\n Calendar.prototype.viewOpts = function () {\n return this.viewSpecs[this.state.viewType].options;\n };\n /*\n handles option changes (like a diff)\n */\n Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) {\n var _this = this;\n var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;\n var normalUpdates = {};\n var specialUpdates = {};\n var oldDateEnv = this.dateEnv; // do this before handleOptions\n var isTimeZoneDirty = false;\n var isSizeDirty = false;\n var anyDifficultOptions = Boolean(removals.length);\n for (var name_1 in updates) {\n if (changeHandlers[name_1]) {\n specialUpdates[name_1] = updates[name_1];\n }\n else {\n normalUpdates[name_1] = updates[name_1];\n }\n }\n for (var name_2 in normalUpdates) {\n if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) {\n isSizeDirty = true;\n }\n else if (/^(defaultDate|defaultView)$/.test(name_2)) {\n // can't change date this way. use gotoDate instead\n }\n else {\n anyDifficultOptions = true;\n if (name_2 === 'timeZone') {\n isTimeZoneDirty = true;\n }\n }\n }\n this.optionsManager.mutate(normalUpdates, removals, isDynamic);\n if (anyDifficultOptions) {\n this.handleOptions(this.optionsManager.computed);\n }\n this.batchRendering(function () {\n if (anyDifficultOptions) {\n if (isTimeZoneDirty) {\n _this.dispatch({\n type: 'CHANGE_TIMEZONE',\n oldDateEnv: oldDateEnv\n });\n }\n /* HACK\n has the same effect as calling this.requestRerender()\n but recomputes the state's dateProfile\n */\n _this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: _this.state.viewType\n });\n }\n else if (isSizeDirty) {\n _this.updateSize();\n }\n // special updates\n if (deepEqual) {\n for (var name_3 in specialUpdates) {\n changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual);\n }\n }\n });\n };\n /*\n rebuilds things based off of a complete set of refined options\n */\n Calendar.prototype.handleOptions = function (options) {\n var _this = this;\n var pluginHooks = this.pluginSystem.hooks;\n this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration);\n this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration);\n this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay);\n this.theme = this.buildTheme(options);\n var available = this.parseRawLocales(options.locales);\n this.availableRawLocales = available.map;\n var locale = this.buildLocale(options.locale || available.defaultCode, available.map);\n this.dateEnv = this.buildDateEnv(locale, options.timeZone, pluginHooks.namedTimeZonedImpl, options.firstDay, options.weekNumberCalculation, options.weekLabel, pluginHooks.cmdFormatter);\n this.selectionConfig = this.buildSelectionConfig(options); // needs dateEnv. do after :(\n // ineffecient to do every time?\n this.viewSpecs = buildViewSpecs(pluginHooks.views, this.optionsManager);\n // ineffecient to do every time?\n this.dateProfileGenerators = mapHash(this.viewSpecs, function (viewSpec) {\n return new viewSpec.class.prototype.dateProfileGeneratorClass(viewSpec, _this);\n });\n };\n Calendar.prototype.getAvailableLocaleCodes = function () {\n return Object.keys(this.availableRawLocales);\n };\n Calendar.prototype._buildSelectionConfig = function (rawOpts) {\n return processScopedUiProps('select', rawOpts, this);\n };\n Calendar.prototype._buildEventUiSingleBase = function (rawOpts) {\n if (rawOpts.editable) { // so 'editable' affected events\n rawOpts = tslib_1.__assign({}, rawOpts, { eventEditable: true });\n }\n return processScopedUiProps('event', rawOpts, this);\n };\n // Trigger\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.hasPublicHandlers = function (name) {\n return this.hasHandlers(name) ||\n this.opt(name); // handler specified in options\n };\n Calendar.prototype.publiclyTrigger = function (name, args) {\n var optHandler = this.opt(name);\n this.triggerWith(name, this, args);\n if (optHandler) {\n return optHandler.apply(this, args);\n }\n };\n Calendar.prototype.publiclyTriggerAfterSizing = function (name, args) {\n var afterSizingTriggers = this.afterSizingTriggers;\n (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args);\n };\n Calendar.prototype.releaseAfterSizingTriggers = function () {\n var afterSizingTriggers = this.afterSizingTriggers;\n for (var name_4 in afterSizingTriggers) {\n for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) {\n var args = _a[_i];\n this.publiclyTrigger(name_4, args);\n }\n }\n this.afterSizingTriggers = {};\n };\n // View\n // -----------------------------------------------------------------------------------------------------------------\n // Returns a boolean about whether the view is okay to instantiate at some point\n Calendar.prototype.isValidViewType = function (viewType) {\n return Boolean(this.viewSpecs[viewType]);\n };\n Calendar.prototype.changeView = function (viewType, dateOrRange) {\n var dateMarker = null;\n if (dateOrRange) {\n if (dateOrRange.start && dateOrRange.end) { // a range\n this.optionsManager.mutate({ visibleRange: dateOrRange }, []); // will not rerender\n this.handleOptions(this.optionsManager.computed); // ...but yuck\n }\n else { // a date\n dateMarker = this.dateEnv.createMarker(dateOrRange); // just like gotoDate\n }\n }\n this.unselect();\n this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: viewType,\n dateMarker: dateMarker\n });\n };\n // Forces navigation to a view for the given date.\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n // needs to change\n Calendar.prototype.zoomTo = function (dateMarker, viewType) {\n var spec;\n viewType = viewType || 'day'; // day is default zoom\n spec = this.viewSpecs[viewType] ||\n this.getUnitViewSpec(viewType);\n this.unselect();\n if (spec) {\n this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: spec.type,\n dateMarker: dateMarker\n });\n }\n else {\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: dateMarker\n });\n }\n };\n // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n // Preference is given to views that have corresponding buttons.\n Calendar.prototype.getUnitViewSpec = function (unit) {\n var component = this.component;\n var viewTypes = [];\n var i;\n var spec;\n // put views that have buttons first. there will be duplicates, but oh\n if (component.header) {\n viewTypes.push.apply(viewTypes, component.header.viewsWithButtons);\n }\n if (component.footer) {\n viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons);\n }\n for (var viewType in this.viewSpecs) {\n viewTypes.push(viewType);\n }\n for (i = 0; i < viewTypes.length; i++) {\n spec = this.viewSpecs[viewTypes[i]];\n if (spec) {\n if (spec.singleUnit === unit) {\n return spec;\n }\n }\n }\n };\n // Current Date\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.getInitialDate = function () {\n var defaultDateInput = this.opt('defaultDate');\n // compute the initial ambig-timezone date\n if (defaultDateInput != null) {\n return this.dateEnv.createMarker(defaultDateInput);\n }\n else {\n return this.getNow(); // getNow already returns unzoned\n }\n };\n Calendar.prototype.prev = function () {\n this.unselect();\n this.dispatch({ type: 'PREV' });\n };\n Calendar.prototype.next = function () {\n this.unselect();\n this.dispatch({ type: 'NEXT' });\n };\n Calendar.prototype.prevYear = function () {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.addYears(this.state.currentDate, -1)\n });\n };\n Calendar.prototype.nextYear = function () {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.addYears(this.state.currentDate, 1)\n });\n };\n Calendar.prototype.today = function () {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.getNow()\n });\n };\n Calendar.prototype.gotoDate = function (zonedDateInput) {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.createMarker(zonedDateInput)\n });\n };\n Calendar.prototype.incrementDate = function (deltaInput) {\n var delta = createDuration(deltaInput);\n if (delta) { // else, warn about invalid input?\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.add(this.state.currentDate, delta)\n });\n }\n };\n // for external API\n Calendar.prototype.getDate = function () {\n return this.dateEnv.toDate(this.state.currentDate);\n };\n // Date Formatting Utils\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.formatDate = function (d, formatter) {\n var dateEnv = this.dateEnv;\n return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));\n };\n // `settings` is for formatter AND isEndExclusive\n Calendar.prototype.formatRange = function (d0, d1, settings) {\n var dateEnv = this.dateEnv;\n return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings, this.opt('defaultRangeSeparator')), settings);\n };\n Calendar.prototype.formatIso = function (d, omitTime) {\n var dateEnv = this.dateEnv;\n return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime });\n };\n // Sizing\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.windowResize = function (ev) {\n if (!this.isHandlingWindowResize &&\n this.component && // why?\n ev.target === window // not a jqui resize event\n ) {\n this.isHandlingWindowResize = true;\n this.updateSize();\n this.publiclyTrigger('windowResize', [this.view]);\n this.isHandlingWindowResize = false;\n }\n };\n Calendar.prototype.updateSize = function () {\n if (this.component) { // when?\n this.component.updateSize(true);\n }\n };\n // Component Registration\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.registerInteractiveComponent = function (component, settingsInput) {\n var settings = parseInteractionSettings(component, settingsInput);\n var DEFAULT_INTERACTIONS = [\n EventClicking,\n EventHovering\n ];\n var interactionClasses = DEFAULT_INTERACTIONS.concat(this.pluginSystem.hooks.componentInteractions);\n var interactions = interactionClasses.map(function (interactionClass) {\n return new interactionClass(settings);\n });\n this.interactionsStore[component.uid] = interactions;\n interactionSettingsStore[component.uid] = settings;\n };\n Calendar.prototype.unregisterInteractiveComponent = function (component) {\n for (var _i = 0, _a = this.interactionsStore[component.uid]; _i < _a.length; _i++) {\n var listener = _a[_i];\n listener.destroy();\n }\n delete this.interactionsStore[component.uid];\n delete interactionSettingsStore[component.uid];\n };\n // Date Selection / Event Selection / DayClick\n // -----------------------------------------------------------------------------------------------------------------\n // this public method receives start/end dates in any format, with any timezone\n // NOTE: args were changed from v3\n Calendar.prototype.select = function (dateOrObj, endDate) {\n var selectionInput;\n if (endDate == null) {\n if (dateOrObj.start != null) {\n selectionInput = dateOrObj;\n }\n else {\n selectionInput = {\n start: dateOrObj,\n end: null\n };\n }\n }\n else {\n selectionInput = {\n start: dateOrObj,\n end: endDate\n };\n }\n var selection = parseDateSpan(selectionInput, this.dateEnv, createDuration({ days: 1 }) // TODO: cache this?\n );\n if (selection) { // throw parse error otherwise?\n this.dispatch({ type: 'SELECT_DATES', selection: selection });\n this.triggerDateSelect(selection);\n }\n };\n // public method\n Calendar.prototype.unselect = function (pev) {\n if (this.state.dateSelection) {\n this.dispatch({ type: 'UNSELECT_DATES' });\n this.triggerDateUnselect(pev);\n }\n };\n Calendar.prototype.triggerDateSelect = function (selection, pev) {\n var arg = tslib_1.__assign({}, this.buildDateSpanApi(selection), { jsEvent: pev ? pev.origEvent : null, view: this.view });\n this.publiclyTrigger('select', [arg]);\n };\n Calendar.prototype.triggerDateUnselect = function (pev) {\n this.publiclyTrigger('unselect', [\n {\n jsEvent: pev ? pev.origEvent : null,\n view: this.view\n }\n ]);\n };\n // TODO: receive pev?\n Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) {\n var arg = tslib_1.__assign({}, this.buildDatePointApi(dateSpan), { dayEl: dayEl, jsEvent: ev, // Is this always a mouse event? See #4655\n view: view });\n this.publiclyTrigger('dateClick', [arg]);\n };\n Calendar.prototype.buildDatePointApi = function (dateSpan) {\n var props = {};\n for (var _i = 0, _a = this.pluginSystem.hooks.datePointTransforms; _i < _a.length; _i++) {\n var transform = _a[_i];\n __assign(props, transform(dateSpan, this));\n }\n __assign(props, buildDatePointApi(dateSpan, this.dateEnv));\n return props;\n };\n Calendar.prototype.buildDateSpanApi = function (dateSpan) {\n var props = {};\n for (var _i = 0, _a = this.pluginSystem.hooks.dateSpanTransforms; _i < _a.length; _i++) {\n var transform = _a[_i];\n __assign(props, transform(dateSpan, this));\n }\n __assign(props, buildDateSpanApi(dateSpan, this.dateEnv));\n return props;\n };\n // Date Utils\n // -----------------------------------------------------------------------------------------------------------------\n // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option\n Calendar.prototype.getNow = function () {\n var now = this.opt('now');\n if (typeof now === 'function') {\n now = now();\n }\n if (now == null) {\n return this.dateEnv.createNowMarker();\n }\n return this.dateEnv.createMarker(now);\n };\n // Event-Date Utilities\n // -----------------------------------------------------------------------------------------------------------------\n // Given an event's allDay status and start date, return what its fallback end date should be.\n // TODO: rename to computeDefaultEventEnd\n Calendar.prototype.getDefaultEventEnd = function (allDay, marker) {\n var end = marker;\n if (allDay) {\n end = startOfDay(end);\n end = this.dateEnv.add(end, this.defaultAllDayEventDuration);\n }\n else {\n end = this.dateEnv.add(end, this.defaultTimedEventDuration);\n }\n return end;\n };\n // Public Events API\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.addEvent = function (eventInput, sourceInput) {\n if (eventInput instanceof EventApi) {\n var def = eventInput._def;\n var instance = eventInput._instance;\n // not already present? don't want to add an old snapshot\n if (!this.state.eventStore.defs[def.defId]) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore({ def: def, instance: instance }) // TODO: better util for two args?\n });\n }\n return eventInput;\n }\n var sourceId;\n if (sourceInput instanceof EventSourceApi) {\n sourceId = sourceInput.internalEventSource.sourceId;\n }\n else if (sourceInput != null) {\n var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function\n if (!sourceApi) {\n console.warn('Could not find an event source with ID \"' + sourceInput + '\"'); // TODO: test\n return null;\n }\n else {\n sourceId = sourceApi.internalEventSource.sourceId;\n }\n }\n var tuple = parseEvent(eventInput, sourceId, this);\n if (tuple) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore(tuple)\n });\n return new EventApi(this, tuple.def, tuple.def.recurringDef ? null : tuple.instance);\n }\n return null;\n };\n // TODO: optimize\n Calendar.prototype.getEventById = function (id) {\n var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances;\n id = String(id);\n for (var defId in defs) {\n var def = defs[defId];\n if (def.publicId === id) {\n if (def.recurringDef) {\n return new EventApi(this, def, null);\n }\n else {\n for (var instanceId in instances) {\n var instance = instances[instanceId];\n if (instance.defId === def.defId) {\n return new EventApi(this, def, instance);\n }\n }\n }\n }\n }\n return null;\n };\n Calendar.prototype.getEvents = function () {\n var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances;\n var eventApis = [];\n for (var id in instances) {\n var instance = instances[id];\n var def = defs[instance.defId];\n eventApis.push(new EventApi(this, def, instance));\n }\n return eventApis;\n };\n Calendar.prototype.removeAllEvents = function () {\n this.dispatch({ type: 'REMOVE_ALL_EVENTS' });\n };\n Calendar.prototype.rerenderEvents = function () {\n this.dispatch({ type: 'RESET_EVENTS' });\n };\n // Public Event Sources API\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.getEventSources = function () {\n var sourceHash = this.state.eventSources;\n var sourceApis = [];\n for (var internalId in sourceHash) {\n sourceApis.push(new EventSourceApi(this, sourceHash[internalId]));\n }\n return sourceApis;\n };\n Calendar.prototype.getEventSourceById = function (id) {\n var sourceHash = this.state.eventSources;\n id = String(id);\n for (var sourceId in sourceHash) {\n if (sourceHash[sourceId].publicId === id) {\n return new EventSourceApi(this, sourceHash[sourceId]);\n }\n }\n return null;\n };\n Calendar.prototype.addEventSource = function (sourceInput) {\n if (sourceInput instanceof EventSourceApi) {\n // not already present? don't want to add an old snapshot\n if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) {\n this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: [sourceInput.internalEventSource]\n });\n }\n return sourceInput;\n }\n var eventSource = parseEventSource(sourceInput, this);\n if (eventSource) { // TODO: error otherwise?\n this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });\n return new EventSourceApi(this, eventSource);\n }\n return null;\n };\n Calendar.prototype.removeAllEventSources = function () {\n this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });\n };\n Calendar.prototype.refetchEvents = function () {\n this.dispatch({ type: 'FETCH_EVENT_SOURCES' });\n };\n // Scroll\n // -----------------------------------------------------------------------------------------------------------------\n Calendar.prototype.scrollToTime = function (timeInput) {\n var duration = createDuration(timeInput);\n if (duration) {\n this.component.view.scrollToDuration(duration);\n }\n };\n return Calendar;\n}());\nexport default Calendar;\nEmitterMixin.mixInto(Calendar);\n// for memoizers\n// -----------------------------------------------------------------------------------------------------------------\nfunction buildComponentContext(theme, dateEnv, options) {\n return new ComponentContext(this, theme, dateEnv, options, null);\n}\nfunction buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) {\n return new DateEnv({\n calendarSystem: 'gregory',\n timeZone: timeZone,\n namedTimeZoneImpl: namedTimeZoneImpl,\n locale: locale,\n weekNumberCalculation: weekNumberCalculation,\n firstDay: firstDay,\n weekLabel: weekLabel,\n cmdFormatter: cmdFormatter\n });\n}\nfunction buildTheme(calendarOptions) {\n var themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme;\n return new themeClass(calendarOptions);\n}\nfunction buildDelayedRerender(wait) {\n var func = this.tryRerender.bind(this);\n if (wait != null) {\n func = debounce(func, wait);\n }\n return func;\n}\nfunction buildEventUiBySource(eventSources) {\n return mapHash(eventSources, function (eventSource) {\n return eventSource.ui;\n });\n}\nfunction buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {\n var eventUiBases = { '': eventUiSingleBase };\n for (var defId in eventDefs) {\n var def = eventDefs[defId];\n if (def.sourceId && eventUiBySource[def.sourceId]) {\n eventUiBases[defId] = eventUiBySource[def.sourceId];\n }\n }\n return eventUiBases;\n}\n","import * as tslib_1 from \"tslib\";\nimport DateProfileGenerator from './DateProfileGenerator';\nimport { addMs } from './datelib/marker';\nimport { createDuration } from './datelib/duration';\nimport { default as EmitterMixin } from './common/EmitterMixin';\nimport { createElement } from './util/dom-manip';\nimport DateComponent from './component/DateComponent';\nimport { sliceEventStore } from './component/event-rendering';\nimport { memoizeRendering } from './component/memoized-rendering';\nimport { __assign } from 'tslib';\nvar View = /** @class */ (function (_super) {\n tslib_1.__extends(View, _super);\n function View(viewSpec, parentEl) {\n var _this = _super.call(this, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })) || this;\n _this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap);\n _this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]);\n _this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]);\n _this.renderEventsMem = memoizeRendering(_this.renderEvents, _this.unrenderEvents, [_this.renderDatesMem]);\n _this.renderEventSelectionMem = memoizeRendering(_this.renderEventSelectionWrap, _this.unrenderEventSelectionWrap, [_this.renderEventsMem]);\n _this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]);\n _this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]);\n _this.viewSpec = viewSpec;\n _this.type = viewSpec.type;\n parentEl.appendChild(_this.el);\n _this.initialize();\n return _this;\n }\n View.prototype.initialize = function () {\n };\n Object.defineProperty(View.prototype, \"activeStart\", {\n // Date Setting/Unsetting\n // -----------------------------------------------------------------------------------------------------------------\n get: function () {\n return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(View.prototype, \"activeEnd\", {\n get: function () {\n return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(View.prototype, \"currentStart\", {\n get: function () {\n return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(View.prototype, \"currentEnd\", {\n get: function () {\n return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end);\n },\n enumerable: true,\n configurable: true\n });\n // General Rendering\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.render = function (props, context) {\n this.renderDatesMem(props.dateProfile);\n this.renderBusinessHoursMem(props.businessHours);\n this.renderDateSelectionMem(props.dateSelection);\n this.renderEventsMem(props.eventStore);\n this.renderEventSelectionMem(props.eventSelection);\n this.renderEventDragMem(props.eventDrag);\n this.renderEventResizeMem(props.eventResize);\n };\n View.prototype.beforeUpdate = function () {\n this.addScroll(this.queryScroll());\n };\n View.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderDatesMem.unrender(); // should unrender everything else\n };\n // Sizing\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.updateSize = function (isResize, viewHeight, isAuto) {\n var calendar = this.context.calendar;\n if (isResize) {\n this.addScroll(this.queryScroll()); // NOTE: same code as in beforeUpdate\n }\n if (isResize || // HACKS...\n calendar.isViewUpdated ||\n calendar.isDatesUpdated ||\n calendar.isEventsUpdated) {\n // sort of the catch-all sizing\n // anything that might cause dimension changes\n this.updateBaseSize(isResize, viewHeight, isAuto);\n }\n // NOTE: popScroll is called by CalendarComponent\n };\n View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {\n };\n // Date Rendering\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderDatesWrap = function (dateProfile) {\n this.renderDates(dateProfile);\n this.addScroll({\n duration: createDuration(this.context.options.scrollTime)\n });\n };\n View.prototype.unrenderDatesWrap = function () {\n this.stopNowIndicator();\n this.unrenderDates();\n };\n View.prototype.renderDates = function (dateProfile) { };\n View.prototype.unrenderDates = function () { };\n // Business Hours\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderBusinessHours = function (businessHours) { };\n View.prototype.unrenderBusinessHours = function () { };\n // Date Selection\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderDateSelectionWrap = function (selection) {\n if (selection) {\n this.renderDateSelection(selection);\n }\n };\n View.prototype.unrenderDateSelectionWrap = function (selection) {\n if (selection) {\n this.unrenderDateSelection(selection);\n }\n };\n View.prototype.renderDateSelection = function (selection) { };\n View.prototype.unrenderDateSelection = function (selection) { };\n // Event Rendering\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderEvents = function (eventStore) { };\n View.prototype.unrenderEvents = function () { };\n // util for subclasses\n View.prototype.sliceEvents = function (eventStore, allDay) {\n var props = this.props;\n return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.context.nextDayThreshold : null).fg;\n };\n // Event Selection\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderEventSelectionWrap = function (instanceId) {\n if (instanceId) {\n this.renderEventSelection(instanceId);\n }\n };\n View.prototype.unrenderEventSelectionWrap = function (instanceId) {\n if (instanceId) {\n this.unrenderEventSelection(instanceId);\n }\n };\n View.prototype.renderEventSelection = function (instanceId) { };\n View.prototype.unrenderEventSelection = function (instanceId) { };\n // Event Drag\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderEventDragWrap = function (state) {\n if (state) {\n this.renderEventDrag(state);\n }\n };\n View.prototype.unrenderEventDragWrap = function (state) {\n if (state) {\n this.unrenderEventDrag(state);\n }\n };\n View.prototype.renderEventDrag = function (state) { };\n View.prototype.unrenderEventDrag = function (state) { };\n // Event Resize\n // -----------------------------------------------------------------------------------------------------------------\n View.prototype.renderEventResizeWrap = function (state) {\n if (state) {\n this.renderEventResize(state);\n }\n };\n View.prototype.unrenderEventResizeWrap = function (state) {\n if (state) {\n this.unrenderEventResize(state);\n }\n };\n View.prototype.renderEventResize = function (state) { };\n View.prototype.unrenderEventResize = function (state) { };\n /* Now Indicator\n ------------------------------------------------------------------------------------------------------------------*/\n // Immediately render the current time indicator and begins re-rendering it at an interval,\n // which is defined by this.getNowIndicatorUnit().\n // TODO: somehow do this for the current whole day's background too\n // USAGE: must be called manually from subclasses' render methods! don't need to call stopNowIndicator tho\n View.prototype.startNowIndicator = function (dateProfile, dateProfileGenerator) {\n var _this = this;\n var _a = this.context, calendar = _a.calendar, dateEnv = _a.dateEnv, options = _a.options;\n var unit;\n var update;\n var delay; // ms wait value\n if (options.nowIndicator && !this.initialNowDate) {\n unit = this.getNowIndicatorUnit(dateProfile, dateProfileGenerator);\n if (unit) {\n update = this.updateNowIndicator.bind(this);\n this.initialNowDate = calendar.getNow();\n this.initialNowQueriedMs = new Date().valueOf();\n // wait until the beginning of the next interval\n delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf();\n // TODO: maybe always use setTimeout, waiting until start of next unit\n this.nowIndicatorTimeoutID = setTimeout(function () {\n _this.nowIndicatorTimeoutID = null;\n update();\n if (unit === 'second') {\n delay = 1000; // every second\n }\n else {\n delay = 1000 * 60; // otherwise, every minute\n }\n _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\n }, delay);\n }\n // rendering will be initiated in updateSize\n }\n };\n // rerenders the now indicator, computing the new current time from the amount of time that has passed\n // since the initial getNow call.\n View.prototype.updateNowIndicator = function () {\n if (this.props.dateProfile && // a way to determine if dates were rendered yet\n this.initialNowDate // activated before?\n ) {\n this.unrenderNowIndicator(); // won't unrender if unnecessary\n this.renderNowIndicator(addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs));\n this.isNowIndicatorRendered = true;\n }\n };\n // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\n // Won't cause side effects if indicator isn't rendered.\n View.prototype.stopNowIndicator = function () {\n if (this.nowIndicatorTimeoutID) {\n clearTimeout(this.nowIndicatorTimeoutID);\n this.nowIndicatorTimeoutID = null;\n }\n if (this.nowIndicatorIntervalID) {\n clearInterval(this.nowIndicatorIntervalID);\n this.nowIndicatorIntervalID = null;\n }\n if (this.isNowIndicatorRendered) {\n this.unrenderNowIndicator();\n this.isNowIndicatorRendered = false;\n }\n };\n View.prototype.getNowIndicatorUnit = function (dateProfile, dateProfileGenerator) {\n // subclasses should implement\n };\n // Renders a current time indicator at the given datetime\n View.prototype.renderNowIndicator = function (date) {\n // SUBCLASSES MUST PASS TO CHILDREN!\n };\n // Undoes the rendering actions from renderNowIndicator\n View.prototype.unrenderNowIndicator = function () {\n // SUBCLASSES MUST PASS TO CHILDREN!\n };\n /* Scroller\n ------------------------------------------------------------------------------------------------------------------*/\n View.prototype.addScroll = function (scroll, isForced) {\n if (isForced) {\n scroll.isForced = isForced;\n }\n __assign(this.queuedScroll || (this.queuedScroll = {}), scroll);\n };\n View.prototype.popScroll = function (isResize) {\n this.applyQueuedScroll(isResize);\n this.queuedScroll = null;\n };\n View.prototype.applyQueuedScroll = function (isResize) {\n if (this.queuedScroll) {\n this.applyScroll(this.queuedScroll, isResize);\n }\n };\n View.prototype.queryScroll = function () {\n var scroll = {};\n if (this.props.dateProfile) { // dates rendered yet?\n __assign(scroll, this.queryDateScroll());\n }\n return scroll;\n };\n View.prototype.applyScroll = function (scroll, isResize) {\n var duration = scroll.duration, isForced = scroll.isForced;\n if (duration != null && !isForced) {\n delete scroll.duration;\n if (this.props.dateProfile) { // dates rendered yet?\n __assign(scroll, this.computeDateScroll(duration));\n }\n }\n if (this.props.dateProfile) { // dates rendered yet?\n this.applyDateScroll(scroll);\n }\n };\n View.prototype.computeDateScroll = function (duration) {\n return {}; // subclasses must implement\n };\n View.prototype.queryDateScroll = function () {\n return {}; // subclasses must implement\n };\n View.prototype.applyDateScroll = function (scroll) {\n // subclasses must implement\n };\n // for API\n View.prototype.scrollToDuration = function (duration) {\n this.applyScroll({ duration: duration }, false);\n };\n return View;\n}(DateComponent));\nexport default View;\nEmitterMixin.mixInto(View);\nView.prototype.usesMinMaxTime = false;\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator;\n","import * as tslib_1 from \"tslib\";\nimport { createFormatter } from '../../datelib/formatting';\nimport { htmlToElements } from '../../util/dom-manip';\nimport { compareByFieldSpecs } from '../../util/misc';\nimport { filterSegsViaEls, triggerRenderedSegs, triggerWillRemoveSegs } from '../event-rendering';\nvar FgEventRenderer = /** @class */ (function () {\n function FgEventRenderer() {\n this.segs = [];\n this.isSizeDirty = false;\n }\n FgEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {\n this.context = context;\n this.rangeUpdated(); // called too frequently :(\n // render an `.el` on each seg\n // returns a subset of the segs. segs that were actually rendered\n segs = this.renderSegEls(segs, mirrorInfo);\n this.segs = segs;\n this.attachSegs(segs, mirrorInfo);\n this.isSizeDirty = true;\n triggerRenderedSegs(this.context, this.segs, Boolean(mirrorInfo));\n };\n FgEventRenderer.prototype.unrender = function (context, _segs, mirrorInfo) {\n triggerWillRemoveSegs(this.context, this.segs, Boolean(mirrorInfo));\n this.detachSegs(this.segs);\n this.segs = [];\n };\n // Updates values that rely on options and also relate to range\n FgEventRenderer.prototype.rangeUpdated = function () {\n var options = this.context.options;\n var displayEventTime;\n var displayEventEnd;\n this.eventTimeFormat = createFormatter(options.eventTimeFormat || this.computeEventTimeFormat(), options.defaultRangeSeparator);\n displayEventTime = options.displayEventTime;\n if (displayEventTime == null) {\n displayEventTime = this.computeDisplayEventTime(); // might be based off of range\n }\n displayEventEnd = options.displayEventEnd;\n if (displayEventEnd == null) {\n displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\n }\n this.displayEventTime = displayEventTime;\n this.displayEventEnd = displayEventEnd;\n };\n // Renders and assigns an `el` property for each foreground event segment.\n // Only returns segments that successfully rendered.\n FgEventRenderer.prototype.renderSegEls = function (segs, mirrorInfo) {\n var html = '';\n var i;\n if (segs.length) { // don't build an empty html string\n // build a large concatenation of event segment HTML\n for (i = 0; i < segs.length; i++) {\n html += this.renderSegHtml(segs[i], mirrorInfo);\n }\n // Grab individual elements from the combined HTML string. Use each as the default rendering.\n // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n htmlToElements(html).forEach(function (el, i) {\n var seg = segs[i];\n if (el) {\n seg.el = el;\n }\n });\n segs = filterSegsViaEls(this.context, segs, Boolean(mirrorInfo));\n }\n return segs;\n };\n // Generic utility for generating the HTML classNames for an event segment's element\n FgEventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable, mirrorInfo) {\n var classes = [\n 'fc-event',\n seg.isStart ? 'fc-start' : 'fc-not-start',\n seg.isEnd ? 'fc-end' : 'fc-not-end'\n ].concat(seg.eventRange.ui.classNames);\n if (isDraggable) {\n classes.push('fc-draggable');\n }\n if (isResizable) {\n classes.push('fc-resizable');\n }\n if (mirrorInfo) {\n classes.push('fc-mirror');\n if (mirrorInfo.isDragging) {\n classes.push('fc-dragging');\n }\n if (mirrorInfo.isResizing) {\n classes.push('fc-resizing');\n }\n }\n return classes;\n };\n // Compute the text that should be displayed on an event's element.\n // `range` can be the Event object itself, or something range-like, with at least a `start`.\n // If event times are disabled, or the event has no time, will return a blank string.\n // If not specified, formatter will default to the eventTimeFormat setting,\n // and displayEnd will default to the displayEventEnd setting.\n FgEventRenderer.prototype.getTimeText = function (eventRange, formatter, displayEnd) {\n var def = eventRange.def, instance = eventRange.instance;\n return this._getTimeText(instance.range.start, def.hasEnd ? instance.range.end : null, def.allDay, formatter, displayEnd, instance.forcedStartTzo, instance.forcedEndTzo);\n };\n FgEventRenderer.prototype._getTimeText = function (start, end, allDay, formatter, displayEnd, forcedStartTzo, forcedEndTzo) {\n var dateEnv = this.context.dateEnv;\n if (formatter == null) {\n formatter = this.eventTimeFormat;\n }\n if (displayEnd == null) {\n displayEnd = this.displayEventEnd;\n }\n if (this.displayEventTime && !allDay) {\n if (displayEnd && end) {\n return dateEnv.formatRange(start, end, formatter, {\n forcedStartTzo: forcedStartTzo,\n forcedEndTzo: forcedEndTzo\n });\n }\n else {\n return dateEnv.format(start, formatter, {\n forcedTzo: forcedStartTzo\n });\n }\n }\n return '';\n };\n FgEventRenderer.prototype.computeEventTimeFormat = function () {\n return {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true\n };\n };\n FgEventRenderer.prototype.computeDisplayEventTime = function () {\n return true;\n };\n FgEventRenderer.prototype.computeDisplayEventEnd = function () {\n return true;\n };\n // Utility for generating event skin-related CSS properties\n FgEventRenderer.prototype.getSkinCss = function (ui) {\n return {\n 'background-color': ui.backgroundColor,\n 'border-color': ui.borderColor,\n color: ui.textColor\n };\n };\n FgEventRenderer.prototype.sortEventSegs = function (segs) {\n var specs = this.context.eventOrderSpecs;\n var objs = segs.map(buildSegCompareObj);\n objs.sort(function (obj0, obj1) {\n return compareByFieldSpecs(obj0, obj1, specs);\n });\n return objs.map(function (c) {\n return c._seg;\n });\n };\n FgEventRenderer.prototype.computeSizes = function (force) {\n if (force || this.isSizeDirty) {\n this.computeSegSizes(this.segs);\n }\n };\n FgEventRenderer.prototype.assignSizes = function (force) {\n if (force || this.isSizeDirty) {\n this.assignSegSizes(this.segs);\n this.isSizeDirty = false;\n }\n };\n FgEventRenderer.prototype.computeSegSizes = function (segs) {\n };\n FgEventRenderer.prototype.assignSegSizes = function (segs) {\n };\n // Manipulation on rendered segs\n FgEventRenderer.prototype.hideByHash = function (hash) {\n if (hash) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n if (hash[seg.eventRange.instance.instanceId]) {\n seg.el.style.visibility = 'hidden';\n }\n }\n }\n };\n FgEventRenderer.prototype.showByHash = function (hash) {\n if (hash) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n if (hash[seg.eventRange.instance.instanceId]) {\n seg.el.style.visibility = '';\n }\n }\n }\n };\n FgEventRenderer.prototype.selectByInstanceId = function (instanceId) {\n if (instanceId) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n var eventInstance = seg.eventRange.instance;\n if (eventInstance && eventInstance.instanceId === instanceId &&\n seg.el // necessary?\n ) {\n seg.el.classList.add('fc-selected');\n }\n }\n }\n };\n FgEventRenderer.prototype.unselectByInstanceId = function (instanceId) {\n if (instanceId) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n if (seg.el) { // necessary?\n seg.el.classList.remove('fc-selected');\n }\n }\n }\n };\n return FgEventRenderer;\n}());\nexport default FgEventRenderer;\n// returns a object with all primitive props that can be compared\nexport function buildSegCompareObj(seg) {\n var eventDef = seg.eventRange.def;\n var range = seg.eventRange.instance.range;\n var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events\n var end = range.end ? range.end.valueOf() : 0; // \"\n return tslib_1.__assign({}, eventDef.extendedProps, eventDef, { id: eventDef.publicId, start: start,\n end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg // for later retrieval\n });\n}\n","import { cssToStr } from '../../util/html';\nimport { htmlToElements, removeElement, elementMatches } from '../../util/dom-manip';\nimport { filterSegsViaEls, triggerRenderedSegs, triggerWillRemoveSegs } from '../event-rendering';\n/*\nTODO: when refactoring this class, make a new FillRenderer instance for each `type`\n*/\nvar FillRenderer = /** @class */ (function () {\n function FillRenderer() {\n this.fillSegTag = 'div';\n this.dirtySizeFlags = {};\n this.containerElsByType = {};\n this.segsByType = {};\n }\n FillRenderer.prototype.getSegsByType = function (type) {\n return this.segsByType[type] || [];\n };\n FillRenderer.prototype.renderSegs = function (type, context, segs) {\n var _a;\n this.context = context;\n var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs\n var containerEls = this.attachSegs(type, renderedSegs);\n if (containerEls) {\n (_a = (this.containerElsByType[type] || (this.containerElsByType[type] = []))).push.apply(_a, containerEls);\n }\n this.segsByType[type] = renderedSegs;\n if (type === 'bgEvent') {\n triggerRenderedSegs(context, renderedSegs, false); // isMirror=false\n }\n this.dirtySizeFlags[type] = true;\n };\n // Unrenders a specific type of fill that is currently rendered on the grid\n FillRenderer.prototype.unrender = function (type, context) {\n var segs = this.segsByType[type];\n if (segs) {\n if (type === 'bgEvent') {\n triggerWillRemoveSegs(context, segs, false); // isMirror=false\n }\n this.detachSegs(type, segs);\n }\n };\n // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n // Only returns segments that successfully rendered.\n FillRenderer.prototype.renderSegEls = function (type, segs) {\n var _this = this;\n var html = '';\n var i;\n if (segs.length) {\n // build a large concatenation of segment HTML\n for (i = 0; i < segs.length; i++) {\n html += this.renderSegHtml(type, segs[i]);\n }\n // Grab individual elements from the combined HTML string. Use each as the default rendering.\n // Then, compute the 'el' for each segment.\n htmlToElements(html).forEach(function (el, i) {\n var seg = segs[i];\n if (el) {\n seg.el = el;\n }\n });\n if (type === 'bgEvent') {\n segs = filterSegsViaEls(this.context, segs, false // isMirror. background events can never be mirror elements\n );\n }\n // correct element type? (would be bad if a non-TD were inserted into a table for example)\n segs = segs.filter(function (seg) {\n return elementMatches(seg.el, _this.fillSegTag);\n });\n }\n return segs;\n };\n // Builds the HTML needed for one fill segment. Generic enough to work with different types.\n FillRenderer.prototype.renderSegHtml = function (type, seg) {\n var css = null;\n var classNames = [];\n if (type !== 'highlight' && type !== 'businessHours') {\n css = {\n 'background-color': seg.eventRange.ui.backgroundColor\n };\n }\n if (type !== 'highlight') {\n classNames = classNames.concat(seg.eventRange.ui.classNames);\n }\n if (type === 'businessHours') {\n classNames.push('fc-bgevent');\n }\n else {\n classNames.push('fc-' + type.toLowerCase());\n }\n return '<' + this.fillSegTag +\n (classNames.length ? ' class=\"' + classNames.join(' ') + '\"' : '') +\n (css ? ' style=\"' + cssToStr(css) + '\"' : '') +\n '>';\n };\n FillRenderer.prototype.detachSegs = function (type, segs) {\n var containerEls = this.containerElsByType[type];\n if (containerEls) {\n containerEls.forEach(removeElement);\n delete this.containerElsByType[type];\n }\n };\n FillRenderer.prototype.computeSizes = function (force) {\n for (var type in this.segsByType) {\n if (force || this.dirtySizeFlags[type]) {\n this.computeSegSizes(this.segsByType[type]);\n }\n }\n };\n FillRenderer.prototype.assignSizes = function (force) {\n for (var type in this.segsByType) {\n if (force || this.dirtySizeFlags[type]) {\n this.assignSegSizes(this.segsByType[type]);\n }\n }\n this.dirtySizeFlags = {};\n };\n FillRenderer.prototype.computeSegSizes = function (segs) {\n };\n FillRenderer.prototype.assignSegSizes = function (segs) {\n };\n return FillRenderer;\n}());\nexport default FillRenderer;\n","var NamedTimeZoneImpl = /** @class */ (function () {\n function NamedTimeZoneImpl(timeZoneName) {\n this.timeZoneName = timeZoneName;\n }\n return NamedTimeZoneImpl;\n}());\nexport { NamedTimeZoneImpl };\n","import EmitterMixin from '../common/EmitterMixin';\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\nvar ElementDragging = /** @class */ (function () {\n function ElementDragging(el) {\n this.emitter = new EmitterMixin();\n }\n ElementDragging.prototype.destroy = function () {\n };\n ElementDragging.prototype.setMirrorIsVisible = function (bool) {\n // optional if subclass doesn't want to support a mirror\n };\n ElementDragging.prototype.setMirrorNeedsRevert = function (bool) {\n // optional if subclass doesn't want to support a mirror\n };\n ElementDragging.prototype.setAutoScrollEnabled = function (bool) {\n // optional\n };\n return ElementDragging;\n}());\nexport default ElementDragging;\n","import * as tslib_1 from \"tslib\";\nimport { DateEnv } from './datelib/env';\nimport { createFormatter } from './datelib/formatting';\nimport { parseRawLocales, buildLocale } from './datelib/locale';\nimport { globalDefaults } from './options';\nexport function formatDate(dateInput, settings) {\n if (settings === void 0) { settings = {}; }\n var dateEnv = buildDateEnv(settings);\n var formatter = createFormatter(settings);\n var dateMeta = dateEnv.createMarkerMeta(dateInput);\n if (!dateMeta) { // TODO: warning?\n return '';\n }\n return dateEnv.format(dateMeta.marker, formatter, {\n forcedTzo: dateMeta.forcedTzo\n });\n}\nexport function formatRange(startInput, endInput, settings // mixture of env and formatter settings\n) {\n var dateEnv = buildDateEnv(typeof settings === 'object' && settings ? settings : {}); // pass in if non-null object\n var formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator);\n var startMeta = dateEnv.createMarkerMeta(startInput);\n var endMeta = dateEnv.createMarkerMeta(endInput);\n if (!startMeta || !endMeta) { // TODO: warning?\n return '';\n }\n return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n forcedStartTzo: startMeta.forcedTzo,\n forcedEndTzo: endMeta.forcedTzo,\n isEndExclusive: settings.isEndExclusive\n });\n}\n// TODO: more DRY and optimized\nfunction buildDateEnv(settings) {\n var locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map); // TODO: don't hardcode 'en' everywhere\n // ensure required settings\n settings = tslib_1.__assign({ timeZone: globalDefaults.timeZone, calendarSystem: 'gregory' }, settings, { locale: locale });\n return new DateEnv(settings);\n}\n","import { createDuration } from '../datelib/duration';\nimport { refineProps } from '../util/misc';\nvar DRAG_META_PROPS = {\n startTime: createDuration,\n duration: createDuration,\n create: Boolean,\n sourceId: String\n};\nvar DRAG_META_DEFAULTS = {\n create: true\n};\nexport function parseDragMeta(raw) {\n var leftoverProps = {};\n var refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps);\n refined.leftoverProps = leftoverProps;\n return refined;\n}\n","import { rangeContainsMarker } from '../datelib/date-range';\nimport { htmlEscape } from '../util/html';\nimport { buildGotoAnchorHtml, getDayClasses } from '../component/date-rendering';\nimport { DAY_IDS } from '../datelib/marker';\n// Computes a default column header formatting string if `colFormat` is not explicitly defined\nexport function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {\n // if more than one week row, or if there are a lot of columns with not much space,\n // put just the day numbers will be in each cell\n if (!datesRepDistinctDays || dayCnt > 10) {\n return { weekday: 'short' }; // \"Sat\"\n }\n else if (dayCnt > 1) {\n return { weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }; // \"Sat 11/12\"\n }\n else {\n return { weekday: 'long' }; // \"Saturday\"\n }\n}\nexport function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) {\n var dateEnv = context.dateEnv, theme = context.theme, options = context.options;\n var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow.\n var classNames = [\n 'fc-day-header',\n theme.getClass('widgetHeader')\n ];\n var innerHtml;\n if (typeof options.columnHeaderHtml === 'function') {\n innerHtml = options.columnHeaderHtml(dateEnv.toDate(dateMarker));\n }\n else if (typeof options.columnHeaderText === 'function') {\n innerHtml = htmlEscape(options.columnHeaderText(dateEnv.toDate(dateMarker)));\n }\n else {\n innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat));\n }\n // if only one row of days, the classNames on the header can represent the specific days beneath\n if (datesRepDistinctDays) {\n classNames = classNames.concat(\n // includes the day-of-week class\n // noThemeHighlight=true (don't highlight the header)\n getDayClasses(dateMarker, dateProfile, context, true));\n }\n else {\n classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]); // only add the day-of-week class\n }\n return '' +\n ' 1 ?\n ' colspan=\"' + colspan + '\"' :\n '') +\n (otherAttrs ?\n ' ' + otherAttrs :\n '') +\n '>' +\n (isDateValid ?\n // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\n buildGotoAnchorHtml(options, dateEnv, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) :\n // if not valid, display text, but no link\n innerHtml) +\n '';\n}\n","import * as tslib_1 from \"tslib\";\nimport Component from '../component/Component';\nimport { htmlToElement, removeElement } from '../util/dom-manip';\nimport { createFormatter } from '../datelib/formatting';\nimport { computeFallbackHeaderFormat, renderDateCell } from './table-utils';\nimport { memoizeRendering } from '../component/memoized-rendering';\nvar DayHeader = /** @class */ (function (_super) {\n tslib_1.__extends(DayHeader, _super);\n function DayHeader(parentEl) {\n var _this = _super.call(this) || this;\n _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);\n _this.parentEl = parentEl;\n return _this;\n }\n DayHeader.prototype.render = function (props, context) {\n var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays;\n var parts = [];\n this.renderSkeleton(context);\n if (props.renderIntroHtml) {\n parts.push(props.renderIntroHtml());\n }\n var colHeadFormat = createFormatter(context.options.columnHeaderFormat ||\n computeFallbackHeaderFormat(datesRepDistinctDays, dates.length));\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, context));\n }\n if (context.isRtl) {\n parts.reverse();\n }\n this.thead.innerHTML = '' + parts.join('') + '';\n };\n DayHeader.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderSkeleton.unrender();\n };\n DayHeader.prototype._renderSkeleton = function (context) {\n var theme = context.theme;\n var parentEl = this.parentEl;\n parentEl.innerHTML = ''; // because might be nbsp\n parentEl.appendChild(this.el = htmlToElement('
' +\n '' +\n '' +\n '
' +\n '
'));\n this.thead = this.el.querySelector('thead');\n };\n DayHeader.prototype._unrenderSkeleton = function () {\n removeElement(this.el);\n };\n return DayHeader;\n}(Component));\nexport default DayHeader;\n","import { addDays, diffDays } from '../datelib/marker';\nvar DaySeries = /** @class */ (function () {\n function DaySeries(range, dateProfileGenerator) {\n var date = range.start;\n var end = range.end;\n var indices = [];\n var dates = [];\n var dayIndex = -1;\n while (date < end) { // loop each day from start to end\n if (dateProfileGenerator.isHiddenDay(date)) {\n indices.push(dayIndex + 0.5); // mark that it's between indices\n }\n else {\n dayIndex++;\n indices.push(dayIndex);\n dates.push(date);\n }\n date = addDays(date, 1);\n }\n this.dates = dates;\n this.indices = indices;\n this.cnt = dates.length;\n }\n DaySeries.prototype.sliceRange = function (range) {\n var firstIndex = this.getDateDayIndex(range.start); // inclusive first index\n var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index\n var clippedFirstIndex = Math.max(0, firstIndex);\n var clippedLastIndex = Math.min(this.cnt - 1, lastIndex);\n // deal with in-between indices\n clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell\n clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell\n if (clippedFirstIndex <= clippedLastIndex) {\n return {\n firstIndex: clippedFirstIndex,\n lastIndex: clippedLastIndex,\n isStart: firstIndex === clippedFirstIndex,\n isEnd: lastIndex === clippedLastIndex\n };\n }\n else {\n return null;\n }\n };\n // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n // If before the first offset, returns a negative number.\n // If after the last offset, returns an offset past the last cell offset.\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n DaySeries.prototype.getDateDayIndex = function (date) {\n var indices = this.indices;\n var dayOffset = Math.floor(diffDays(this.dates[0], date));\n if (dayOffset < 0) {\n return indices[0] - 1;\n }\n else if (dayOffset >= indices.length) {\n return indices[indices.length - 1] + 1;\n }\n else {\n return indices[dayOffset];\n }\n };\n return DaySeries;\n}());\nexport default DaySeries;\n","var DayTable = /** @class */ (function () {\n function DayTable(daySeries, breakOnWeeks) {\n var dates = daySeries.dates;\n var daysPerRow;\n var firstDay;\n var rowCnt;\n if (breakOnWeeks) {\n // count columns until the day-of-week repeats\n firstDay = dates[0].getUTCDay();\n for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) {\n if (dates[daysPerRow].getUTCDay() === firstDay) {\n break;\n }\n }\n rowCnt = Math.ceil(dates.length / daysPerRow);\n }\n else {\n rowCnt = 1;\n daysPerRow = dates.length;\n }\n this.rowCnt = rowCnt;\n this.colCnt = daysPerRow;\n this.daySeries = daySeries;\n this.cells = this.buildCells();\n this.headerDates = this.buildHeaderDates();\n }\n DayTable.prototype.buildCells = function () {\n var rows = [];\n for (var row = 0; row < this.rowCnt; row++) {\n var cells = [];\n for (var col = 0; col < this.colCnt; col++) {\n cells.push(this.buildCell(row, col));\n }\n rows.push(cells);\n }\n return rows;\n };\n DayTable.prototype.buildCell = function (row, col) {\n return {\n date: this.daySeries.dates[row * this.colCnt + col]\n };\n };\n DayTable.prototype.buildHeaderDates = function () {\n var dates = [];\n for (var col = 0; col < this.colCnt; col++) {\n dates.push(this.cells[0][col].date);\n }\n return dates;\n };\n DayTable.prototype.sliceRange = function (range) {\n var colCnt = this.colCnt;\n var seriesSeg = this.daySeries.sliceRange(range);\n var segs = [];\n if (seriesSeg) {\n var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex;\n var index = firstIndex;\n while (index <= lastIndex) {\n var row = Math.floor(index / colCnt);\n var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);\n segs.push({\n row: row,\n firstCol: index % colCnt,\n lastCol: (nextIndex - 1) % colCnt,\n isStart: seriesSeg.isStart && index === firstIndex,\n isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex\n });\n index = nextIndex;\n }\n }\n return segs;\n };\n return DayTable;\n}());\nexport default DayTable;\n","import { expandRecurring } from '../structs/event-store';\nimport { sliceEventStore } from '../component/event-rendering';\nimport { fabricateEventRange } from '../structs/date-span';\nimport { memoize } from '../util/memoize';\nimport { addMs } from '../datelib/marker';\nvar Slicer = /** @class */ (function () {\n function Slicer() {\n this.sliceBusinessHours = memoize(this._sliceBusinessHours);\n this.sliceDateSelection = memoize(this._sliceDateSpan);\n this.sliceEventStore = memoize(this._sliceEventStore);\n this.sliceEventDrag = memoize(this._sliceInteraction);\n this.sliceEventResize = memoize(this._sliceInteraction);\n }\n Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, calendar, component) {\n var extraArgs = [];\n for (var _i = 5; _i < arguments.length; _i++) {\n extraArgs[_i - 5] = arguments[_i];\n }\n var eventUiBases = props.eventUiBases;\n var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs));\n return {\n dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)),\n businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, calendar, component].concat(extraArgs)),\n fgEventSegs: eventSegs.fg,\n bgEventSegs: eventSegs.bg,\n eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),\n eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),\n eventSelection: props.eventSelection\n }; // TODO: give interactionSegs?\n };\n Slicer.prototype.sliceNowDate = function (// does not memoize\n date, component) {\n var extraArgs = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n extraArgs[_i - 2] = arguments[_i];\n }\n return this._sliceDateSpan.apply(this, [{ range: { start: date, end: addMs(date, 1) }, allDay: false },\n {},\n component].concat(extraArgs));\n };\n Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, calendar, component) {\n var extraArgs = [];\n for (var _i = 5; _i < arguments.length; _i++) {\n extraArgs[_i - 5] = arguments[_i];\n }\n if (!businessHours) {\n return [];\n }\n return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), calendar),\n {},\n dateProfile,\n nextDayThreshold,\n component].concat(extraArgs)).bg;\n };\n Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold, component) {\n var extraArgs = [];\n for (var _i = 5; _i < arguments.length; _i++) {\n extraArgs[_i - 5] = arguments[_i];\n }\n if (eventStore) {\n var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n return {\n bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs),\n fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs)\n };\n }\n else {\n return { bg: [], fg: [] };\n }\n };\n Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold, component) {\n var extraArgs = [];\n for (var _i = 5; _i < arguments.length; _i++) {\n extraArgs[_i - 5] = arguments[_i];\n }\n if (!interaction) {\n return null;\n }\n var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n return {\n segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs),\n affectedInstances: interaction.affectedEvents.instances,\n isEvent: interaction.isEvent,\n sourceSeg: interaction.origSeg\n };\n };\n Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, component) {\n var extraArgs = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n extraArgs[_i - 3] = arguments[_i];\n }\n if (!dateSpan) {\n return [];\n }\n var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.context.calendar);\n var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs));\n for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {\n var seg = segs_1[_a];\n seg.component = component;\n seg.eventRange = eventRange;\n }\n return segs;\n };\n /*\n \"complete\" seg means it has component and eventRange\n */\n Slicer.prototype.sliceEventRanges = function (eventRanges, component, // TODO: kill\n extraArgs) {\n var segs = [];\n for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {\n var eventRange = eventRanges_1[_i];\n segs.push.apply(segs, this.sliceEventRange(eventRange, component, extraArgs));\n }\n return segs;\n };\n /*\n \"complete\" seg means it has component and eventRange\n */\n Slicer.prototype.sliceEventRange = function (eventRange, component, // TODO: kill\n extraArgs) {\n var segs = this.sliceRange.apply(this, [eventRange.range].concat(extraArgs));\n for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {\n var seg = segs_2[_i];\n seg.component = component;\n seg.eventRange = eventRange;\n seg.isStart = eventRange.isStart && seg.isStart;\n seg.isEnd = eventRange.isEnd && seg.isEnd;\n }\n return segs;\n };\n return Slicer;\n}());\nexport default Slicer;\n/*\nfor incorporating minTime/maxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\nfunction computeActiveRange(dateProfile, isComponentAllDay) {\n var range = dateProfile.activeRange;\n if (isComponentAllDay) {\n return range;\n }\n return {\n start: addMs(range.start, dateProfile.minTime.milliseconds),\n end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day\n };\n}\n","// exports\n// --------------------------------------------------------------------------------------------------\nexport var version = '<%= version %>';\nexport { parseEventDef, createEventInstance } from './structs/event';\nexport { parseBusinessHours } from './structs/business-hours';\nexport { applyAll, debounce, padStart, isInt, capitaliseFirstLetter, parseFieldSpecs, compareByFieldSpecs, compareByFieldSpec, flexibleCompare, computeVisibleDayRange, refineProps, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, isMultiDayRange, distributeHeight, undistributeHeight, preventSelection, allowSelection, preventContextMenu, allowContextMenu, compareNumbers, enableCursor, disableCursor, diffDates } from './util/misc';\nexport { htmlEscape, cssToStr } from './util/html';\nexport { removeExact, isArraysEqual } from './util/array';\nexport { memoize, memoizeOutput } from './util/memoize';\nexport { memoizeRendering } from './component/memoized-rendering';\nexport { intersectRects, pointInsideRect, constrainPoint, getRectCenter, diffPoints, translateRect } from './util/geom';\nexport { mapHash, filterHash, isPropsEqual } from './util/object';\nexport { findElements, findChildren, htmlToElement, createElement, insertAfterElement, prependToElement, removeElement, appendToElement, applyStyle, applyStyleProp, elementMatches, elementClosest, forceClassName } from './util/dom-manip';\nexport { filterEventStoreDefs, createEmptyEventStore, mergeEventStores, getRelevantEvents, eventTupleToStore } from './structs/event-store';\nexport { processScopedUiProps, combineEventUis } from './component/event-ui';\nexport { default as Splitter } from './component/event-splitting';\nexport { buildGotoAnchorHtml, getAllDayHtml, getDayClasses } from './component/date-rendering';\nexport { preventDefault, listenBySelector, whenTransitionDone } from './util/dom-event';\nexport { computeInnerRect, computeEdges, computeHeightAndMargins, getClippingParents, computeClippingRect, computeRect } from './util/dom-geom';\nexport { unpromisify } from './util/promise';\nexport { default as EmitterMixin } from './common/EmitterMixin';\nexport { rangeContainsMarker, intersectRanges, rangesEqual, rangesIntersect, rangeContainsRange } from './datelib/date-range';\nexport { default as Mixin } from './common/Mixin';\nexport { default as PositionCache } from './common/PositionCache';\nexport { default as ScrollComponent } from './common/ScrollComponent';\nexport { ScrollController, ElementScrollController, WindowScrollController } from './common/scroll-controller';\nexport { default as Theme } from './theme/Theme';\nexport { default as Component, ComponentContext } from './component/Component';\nexport { default as DateComponent } from './component/DateComponent';\nexport { default as Calendar } from './Calendar';\nexport { default as View } from './View';\nexport { default as FgEventRenderer, buildSegCompareObj } from './component/renderers/FgEventRenderer';\nexport { default as FillRenderer } from './component/renderers/FillRenderer';\nexport { default as DateProfileGenerator } from './DateProfileGenerator';\nexport { isDateSpansEqual } from './structs/date-span';\nexport { addDays, startOfDay, addMs, addWeeks, diffWeeks, diffWholeWeeks, diffWholeDays, diffDayAndTime, diffDays, isValidDate } from './datelib/marker';\nexport { createDuration, isSingleDay, multiplyDuration, addDurations, asRoughMinutes, asRoughSeconds, asRoughMs, wholeDivideDurations, greatestDurationDenominator } from './datelib/duration';\nexport { DateEnv } from './datelib/env';\nexport { createFormatter, formatIsoTimeString } from './datelib/formatting';\nexport { NamedTimeZoneImpl } from './datelib/timezone';\nexport { parse as parseMarker } from './datelib/parsing';\nexport { Interaction, interactionSettingsToStore, interactionSettingsStore } from './interactions/interaction';\nexport { default as ElementDragging } from './interactions/ElementDragging';\nexport { formatDate, formatRange } from './formatting-api';\nexport { globalDefaults, config } from './options';\nexport { parseDragMeta } from './structs/drag-meta';\nexport { createPlugin } from './plugin-system';\nexport { default as DayHeader } from './common/DayHeader';\nexport { computeFallbackHeaderFormat, renderDateCell } from './common/table-utils';\nexport { default as DaySeries } from './common/DaySeries';\nexport { sliceEventStore, hasBgRendering, getElSeg, computeEventDraggable, computeEventStartResizable, computeEventEndResizable } from './component/event-rendering';\nexport { default as DayTable } from './common/DayTable';\nexport { default as Slicer } from './common/slicing-utils';\nexport { applyMutationToEventStore } from './structs/event-mutation';\nexport { isPropsValid, isInteractionValid } from './validation';\nexport { default as EventApi } from './api/EventApi';\nexport { default as requestJson } from './util/requestJson';\n"],"names":["tslib_1.__assign","tslib_1.__extends","uid","eventSourceDef","buildComponentContext","buildDateEnv"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/core/main.min.css b/src/main/resources/static/packages/core/main.min.css new file mode 100644 index 00000000..8948b534 --- /dev/null +++ b/src/main/resources/static/packages/core/main.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.fc-button:not(:disabled),.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a.fc-more,a[data-goto]{cursor:pointer}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:2px 4px}.fc-rtl .fc-popover .fc-header{flex-direction:row-reverse}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{opacity:.65;font-size:1.1em}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-bg,.fc-bgevent-skeleton,.fc-highlight-skeleton,.fc-mirror-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-mirror-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-mirror-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-mirror-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-mirror-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.4;border-radius:3px;border:1px solid #3788d8}.fc-event,.fc-event-dot{background-color:#3788d8}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-event.fc-dragging.fc-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event.fc-dragging:not(.fc-selected){opacity:.75}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-mirror-skeleton tr:first-child>td>.fc-day-grid-event{margin-top:0}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-button,.fc-icon{display:inline-block;font-weight:400;text-align:center}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}@font-face{font-family:fcicons;src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format("truetype");font-weight:400;font-style:normal}.fc-icon{font-family:fcicons!important;speak:none;font-style:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:1em;height:1em}.fc-icon-chevron-left:before{content:""}.fc-icon-chevron-right:before{content:""}.fc-icon-chevrons-left:before{content:""}.fc-icon-chevrons-right:before{content:""}.fc-icon-minus-square:before{content:""}.fc-icon-plus-square:before{content:""}.fc-icon-x:before{content:""}.fc-button{overflow:visible;text-transform:none;margin:0;font-family:inherit}.fc-button::-moz-focus-inner{padding:0;border-style:none}.fc-button{-webkit-appearance:button;color:#212529;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc-button:hover{color:#212529;text-decoration:none}.fc-button:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(44,62,80,.25);box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc-button:disabled{opacity:.65}.fc-button-primary{color:#fff;background-color:#2C3E50;border-color:#2C3E50}.fc-button-primary:hover{color:#fff;background-color:#1e2b37;border-color:#1a252f}.fc-button-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:disabled{color:#fff;background-color:#2C3E50;border-color:#2C3E50}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{color:#fff;background-color:#1a252f;border-color:#151e27}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{vertical-align:middle;font-size:1.5em}.fc-button-group{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.fc-button-group>.fc-button{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.fc-button-group>.fc-button:hover{z-index:1}.fc-button-group>.fc-button:not(:first-child){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.fc-toolbar{display:flex;justify-content:space-between;align-items:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-toolbar h2{font-size:1.75em;margin:0}.fc-view-container{position:relative}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}@media print{.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-highlight-container,.fc-highlight-skeleton,.fc-mirror-container,.fc-mirror-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-popover,.fc-timeGrid-view .fc-axis{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important}} \ No newline at end of file diff --git a/src/main/resources/static/packages/core/main.min.js b/src/main/resources/static/packages/core/main.min.js new file mode 100644 index 00000000..1f86df56 --- /dev/null +++ b/src/main/resources/static/packages/core/main.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Core Package v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).FullCalendar={})}(this,function(e){"use strict";var t={className:!0,colSpan:!0,rowSpan:!0},n={"
");document.body.appendChild(e);var t=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return c(e),t}()),S}function D(e){return e=Math.max(0,e),e=Math.round(e)}function T(e,t){void 0===t&&(t=!1);var n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,o=parseInt(n.borderTopWidth,10)||0,a=parseInt(n.borderBottomWidth,10)||0,s=D(e.offsetWidth-e.clientWidth-r-i),u={borderLeft:r,borderRight:i,borderTop:o,borderBottom:a,scrollbarBottom:D(e.offsetHeight-e.clientHeight-o-a),scrollbarLeft:0,scrollbarRight:0};return b()&&"rtl"===n.direction?u.scrollbarLeft=s:u.scrollbarRight=s,t&&(u.paddingLeft=parseInt(n.paddingLeft,10)||0,u.paddingRight=parseInt(n.paddingRight,10)||0,u.paddingTop=parseInt(n.paddingTop,10)||0,u.paddingBottom=parseInt(n.paddingBottom,10)||0),u}function w(e,t){void 0===t&&(t=!1);var n=R(e),r=T(e,t),i={left:n.left+r.borderLeft+r.scrollbarLeft,right:n.right-r.borderRight-r.scrollbarRight,top:n.top+r.borderTop,bottom:n.bottom-r.borderBottom-r.scrollbarBottom};return t&&(i.left+=r.paddingLeft,i.right-=r.paddingRight,i.top+=r.paddingTop,i.bottom-=r.paddingBottom),i}function R(e){var t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function C(e){return e.getBoundingClientRect().height+I(e)}function I(e){var t=window.getComputedStyle(e);return parseInt(t.marginTop,10)+parseInt(t.marginBottom,10)}function M(e){for(var t=[];e instanceof HTMLElement;){var n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}function k(e){e.preventDefault()}function _(e,t,n,r){function i(e){var t=p(e.target,n);t&&r.call(t,e,t)}return e.addEventListener(t,i),function(){e.removeEventListener(t,i)}}var O=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];var P=["sun","mon","tue","wed","thu","fri","sat"];function x(e,t){var n=Z(e);return n[2]+=t,j(n)}function N(e,t){var n=Z(e);return n[6]+=t,j(n)}function H(e,t){return(t.valueOf()-e.valueOf())/864e5}function U(e,t){var n=B(e),r=B(t);return{years:0,months:0,days:Math.round(H(n,r)),milliseconds:t.valueOf()-r.valueOf()-(e.valueOf()-n.valueOf())}}function z(e,t){var n=L(e,t);return null!==n&&n%7==0?n/7:null}function L(e,t){return q(e)===q(t)?Math.round(H(e,t)):null}function B(e){return j([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function V(e,t,n,r){var i=j([t,0,1+A(t,n,r)]),o=B(e),a=Math.round(H(i,o));return Math.floor(a/7)+1}function A(e,t,n){var r=7+t-n;return-((7+j([e,0,r]).getUTCDay()-t)%7)+r-1}function F(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function W(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function Z(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function j(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC.apply(Date,e))}function Y(e){return!isNaN(e.valueOf())}function q(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}var G=["years","months","days","milliseconds"],X=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function J(e,t){var n;return"string"==typeof e?function(e){var t=X.exec(e);if(t){var n=t[1]?-1:1;return{years:0,months:0,days:n*(t[2]?parseInt(t[2],10):0),milliseconds:n*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}(e):"object"==typeof e&&e?K(e):"number"==typeof e?K(((n={})[t||"milliseconds"]=e,n)):null}function K(e){return{years:e.years||e.year||0,months:e.months||e.month||0,days:(e.days||e.day||0)+7*Q(e),milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)}}function Q(e){return e.weeks||e.week||0}function $(e,t){return e.years===t.years&&e.months===t.months&&e.days===t.days&&e.milliseconds===t.milliseconds}function ee(e){return te(e)/864e5}function te(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function ne(e,t){var n=e.milliseconds;if(n){if(n%1e3!=0)return{unit:"millisecond",value:n};if(n%6e4!=0)return{unit:"second",value:n/1e3};if(n%36e5!=0)return{unit:"minute",value:n/6e4};if(n)return{unit:"hour",value:n/36e5}}return e.days?t||e.days%7!=0?{unit:"day",value:e.days}:{unit:"week",value:e.days/7}:e.months?{unit:"month",value:e.months}:e.years?{unit:"year",value:e.years}:{unit:"millisecond",value:0}}function re(e){e.forEach(function(e){e.style.height=""})}function ie(e){var t,n,r=[],i=[];for("string"==typeof e?i=e.split(/\s*,\s*/):"function"==typeof e?i=[e]:Array.isArray(e)&&(i=e),t=0;t=te(t)&&(r=x(r,1))}return e.start&&(n=B(e.start),r&&r<=n&&(r=x(n,1))),{start:n,end:r}}function ye(e,t,n,r){return"year"===r?J(n.diffWholeYears(e,t),"year"):"month"===r?J(n.diffWholeMonths(e,t),"month"):U(e,t)}var me=function(e,t){return(me=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function Ee(e,t){function n(){this.constructor=e}me(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var Se=function(){return(Se=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;o--)if("object"==typeof(a=e[o][r])&&a)i.unshift(a);else if(void 0!==a){u[r]=a;break}i.length&&(u[r]=Te(i))}for(n=e.length-1;n>=0;n--)for(r in s=e[n])r in u||(u[r]=s[r]);return u}function we(e,t){var n={};for(var r in e)t(e[r],r)&&(n[r]=e[r]);return n}function Re(e,t){var n={};for(var r in e)n[r]=t(e[r],r);return n}function Ce(e){for(var t={},n=0,r=e;no&&i.push({start:o,end:r.start}),r.end>o&&(o=r.end);return ot.start)&&(null===e.start||null===t.end||e.start=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function Ze(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t1)||"numeric"!==r.year&&"2-digit"!==r.year||"numeric"!==r.month&&"2-digit"!==r.month||"numeric"!==r.day&&"2-digit"!==r.day||(a=1);var s=this.format(e,n),u=this.format(t,n);if(s===u)return s;var l=nt(function(e,t){var n={};for(var r in e)r in Xe&&!(Xe[r]<=t)||(n[r]=e[r]);return n}(r,a),i,n),c=l(e),d=l(t),f=function(e,t,n,r){var i=0;for(;i/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
")}function xt(e){var t=[];for(var n in e){var r=e[n];null!=r&&""!==r&&t.push(n+":"+r)}return t.join(";")}function Nt(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}var Ht={editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:null,overlap:null,allow:null,className:Nt,classNames:Nt,color:String,backgroundColor:String,borderColor:String,textColor:String};function Ut(e,t,n){var r=he(e,Ht,{},n),i=function(e,t){return Array.isArray(e)?ke(e,"",t,!0):"object"==typeof e&&e?ke([e],"",t,!0):null!=e?String(e):null}(r.constraint,t);return{startEditable:null!=r.startEditable?r.startEditable:r.editable,durationEditable:null!=r.durationEditable?r.durationEditable:r.editable,constraints:null!=i?[i]:[],overlap:r.overlap,allows:null!=r.allow?[r.allow]:[],backgroundColor:r.backgroundColor||r.color,borderColor:r.borderColor||r.color,textColor:r.textColor,classNames:r.classNames.concat(r.className)}}function zt(e,t,n,r){var i={},o={};for(var a in Ht){var s=e+ue(a);i[a]=t[s],o[s]=!0}if("event"===e&&(i.editable=t.editable),r)for(var a in t)o[a]||(r[a]=t[a]);return Ut(i,n)}var Lt={startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function Bt(e){return e.reduce(Vt,Lt)}function Vt(e,t){return{startEditable:null!=t.startEditable?t.startEditable:e.startEditable,durationEditable:null!=t.durationEditable?t.durationEditable:e.durationEditable,constraints:e.constraints.concat(t.constraints),overlap:"boolean"==typeof t.overlap?t.overlap:e.overlap,allows:e.allows.concat(t.allows),backgroundColor:t.backgroundColor||e.backgroundColor,borderColor:t.borderColor||e.borderColor,textColor:t.textColor||e.textColor,classNames:e.classNames.concat(t.classNames)}}var At={id:String,groupId:String,title:String,url:String,rendering:String,extendedProps:null},Ft={start:null,date:null,end:null,allDay:null},Wt=0;function Zt(e,t,n,r){var i=function(e,t){var n=null;if(e){var r=t.state.eventSources[e];n=r.allDayDefault}null==n&&(n=t.opt("allDayDefault"));return n}(t,n),o={},a=function(e,t,n,r,i){for(var o=0;o'+i+"
":""+i+""}function en(e,t,n,r){var i,o,a=n.calendar,s=n.options,u=n.theme,l=n.dateEnv,c=[];return Ze(t.activeRange,e)?(c.push("fc-"+P[e.getUTCDay()]),s.monthMode&&l.getMonth(e)!==l.getMonth(t.currentRange.start)&&c.push("fc-other-month"),o=x(i=B(a.getNow()),1),e=o?c.push("fc-future"):(c.push("fc-today"),!0!==r&&c.push(u.getClass("today")))):c.push("fc-disabled-day"),c}function tn(e,t,n){var r=!1,i=function(){r||(r=!0,t.apply(this,arguments))},o=function(){r||(r=!0,n&&n.apply(this,arguments))},a=e(i,o);a&&"function"==typeof a.then&&a.then(i,o)}var nn=function(){function e(){}return e.mixInto=function(e){this.mixIntoObj(e.prototype)},e.mixIntoObj=function(e){var t=this;Object.getOwnPropertyNames(this.prototype).forEach(function(n){e[n]||(e[n]=t.prototype[n])})},e.mixOver=function(e){var t=this;Object.getOwnPropertyNames(this.prototype).forEach(function(n){e.prototype[n]=t.prototype[n]})},e}(),rn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ee(t,e),t.prototype.on=function(e,t){return on(this._handlers||(this._handlers={}),e,t),this},t.prototype.one=function(e,t){return on(this._oneHandlers||(this._oneHandlers={}),e,t),this},t.prototype.off=function(e,t){return this._handlers&&an(this._handlers,e,t),this._oneHandlers&&an(this._oneHandlers,e,t),this},t.prototype.trigger=function(e){for(var t=[],n=1;n=n[t]&&e=n[t]&&e0},e.prototype.canScrollHorizontally=function(){return this.getMaxScrollLeft()>0},e.prototype.canScrollUp=function(){return this.getScrollTop()>0},e.prototype.canScrollDown=function(){return this.getScrollTop()0},e.prototype.canScrollRight=function(){return this.getScrollLeft()=200&&a.status<400)try{var e=JSON.parse(a.responseText);r(e,a)}catch(e){i("Failure parsing JSON",a)}else i("Request failed",a)},a.onerror=function(){i("Request failed",a)},a.send(o)}function Tn(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}var wn=mn({eventSourceDefs:[{parseMeta:function(e){if("string"==typeof e)e={url:e};else if(!e||"object"!=typeof e||!e.url)return null;return{url:e.url,method:(e.method||"GET").toUpperCase(),extraParams:e.extraParams,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam}},fetch:function(e,t,n){var r=e.eventSource.meta,i=function(e,t,n){var r,i,o,a,s=n.dateEnv,u={};null==(r=e.startParam)&&(r=n.opt("startParam"));null==(i=e.endParam)&&(i=n.opt("endParam"));null==(o=e.timeZoneParam)&&(o=n.opt("timeZoneParam"));a="function"==typeof e.extraParams?e.extraParams():e.extraParams||{};Se(u,a),u[r]=s.formatIso(t.start),u[i]=s.formatIso(t.end),"local"!==s.timeZone&&(u[o]=s.timeZone);return u}(r,e.range,e.calendar);Dn(r.method,r.url,i,function(e,n){t({rawEvents:e,xhr:n})},function(e,t){n({message:e,xhr:t})})}}]});var Rn=mn({recurringTypes:[{parse:function(e,t,n){var r,i,o=n.createMarker.bind(n),a=he(e,{daysOfWeek:null,startTime:J,endTime:J,startRecur:o,endRecur:o},{},t),s=!1;for(var u in a)if(null!=a[u]){s=!0;break}if(s){var l=null;return"duration"in t&&(l=J(t.duration),delete t.duration),!l&&a.startTime&&a.endTime&&(r=a.endTime,i=a.startTime,l={years:r.years-i.years,months:r.months-i.months,days:r.days-i.days,milliseconds:r.milliseconds-i.milliseconds}),{allDayGuess:Boolean(!a.startTime&&!a.endTime),duration:l,typeData:a}}return null},expand:function(e,t,n){var r=Ve(t,{start:e.startRecur,end:e.endRecur});return r?function(e,t,n,r){var i=e?Ce(e):null,o=B(n.start),a=n.end,s=[];for(;o0?e[0].code:"en",n=window.FullCalendarLocalesAll||[],r=window.FullCalendarLocales||{},i=n.concat(Ie(r),e),o={en:Pn},a=0,s=i;a0;i--){var o=r.slice(0,i).join("-");if(t[o])return t[o]}return null}(n,t)||Pn;return Hn(e,n,r)}(e,t):Hn(e.code,[e.code],e)}function Hn(e,t,n){var r=Te([Pn,n],["buttonText"]);delete r.code;var i=r.week;return delete r.week,{codeArg:e,codes:t,week:i,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}var Un=function(){function e(e){this.overrides=Se({},e),this.dynamicOverrides={},this.compute()}return e.prototype.mutate=function(e,t,n){if(Object.keys(e).length||t.length){var r=n?this.dynamicOverrides:this.overrides;Se(r,e);for(var i=0,o=t;i=1?Math.min(i,o):i}(e,this.weekDow,this.weekDoy)},e.prototype.format=function(e,t,n){return void 0===n&&(n={}),t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)},e.prototype.formatRange=function(e,t,n,r){return void 0===r&&(r={}),r.isEndExclusive&&(t=N(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this)},e.prototype.formatIso=function(e,t){void 0===t&&(t={});var n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),function(e,t,n){void 0===n&&(n=!1);var r=e.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",at(t,!0)))),r}(e,n,t.omitTime)},e.prototype.timestampToMarker=function(e){return"local"===this.timeZone?j(F(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?j(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)},e.prototype.offsetForMarker=function(e){return"local"===this.timeZone?-W(Z(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(Z(e)):null},e.prototype.toDate=function(e,t){return"local"===this.timeZone?W(Z(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(Z(e))*60):new Date(e.valueOf()-(t||0))},e}(),Wn={id:String,allDayDefault:Boolean,eventDataTransform:Function,success:Function,failure:Function},Zn=0;function jn(e,t){return!t.pluginSystem.hooks.eventSourceDefs[e.sourceDefId].ignoreRange}function Yn(e,t){for(var n=t.pluginSystem.hooks.eventSourceDefs,r=n.length-1;r>=0;r--){var i=n[r].parseMeta(e);if(i){var o=qn("object"==typeof e?e:{},i,r,t);return o._raw=e,o}}return null}function qn(e,t,n,r){var i={},o=he(e,Wn,{},i),a={},s=Ut(i,r,a);return o.isFetching=!1,o.latestFetchId="",o.fetchRange=null,o.publicId=String(e.id||""),o.sourceId=String(Zn++),o.sourceDefId=n,o.meta=t,o.ui=s,o.extendedProps=a,o}function Gn(e,t,n,r){switch(t.type){case"ADD_EVENT_SOURCES":return function(e,t,n,r){for(var i={},o=0,a=t;oe.fetchRange.end:!e.latestFetchId}(e,t,n)}),t,n)}function Kn(e,t,n,r){var i={};for(var o in e){var a=e[o];t[o]?i[o]=Qn(a,n,r):i[o]=a}return i}function Qn(e,t,n){var r=n.pluginSystem.hooks.eventSourceDefs[e.sourceDefId],i=String(Xn++);return r.fetch({eventSource:e,calendar:n,range:t},function(r){var o,a,s=r.rawEvents,u=n.opt("eventSourceSuccess");e.success&&(a=e.success(s,r.xhr)),u&&(o=u(s,r.xhr)),s=a||o||s,n.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:i,fetchRange:t,rawEvents:s})},function(r){var o=n.opt("eventSourceFailure");console.warn(r.message,r),e.failure&&e.failure(r),o&&o(r),n.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:i,fetchRange:t,error:r})}),Se({},e,{isFetching:!0,latestFetchId:i})}var $n=function(){function e(e,t){this.viewSpec=e,this.options=e.options,this.dateEnv=t.dateEnv,this.calendar=t,this.initHiddenDays()}return e.prototype.buildPrev=function(e,t){var n=this.dateEnv,r=n.subtract(n.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(r,-1)},e.prototype.buildNext=function(e,t){var n=this.dateEnv,r=n.add(n.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(r,1)},e.prototype.build=function(e,t,n){var r;void 0===n&&(n=!1);var i,o,a,s,u,l,c,d,f;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(d=e,e=null!=(f=r).start&&d=f.end?new Date(f.end.valueOf()-1):d),a=this.buildCurrentRangeInfo(e,t),s=/^(year|month|week|day)$/.test(a.unit),u=this.buildRenderRange(this.trimHiddenDays(a.range),a.unit,s),l=u=this.trimHiddenDays(u),this.options.showNonCurrentDates||(l=Ve(l,a.range)),i=J(this.options.minTime),o=J(this.options.maxTime),l=Ve(l=this.adjustActiveRange(l,i,o),r),c=Fe(a.range,r),{validRange:r,currentRange:a.range,currentRangeUnit:a.unit,isRangeAllDay:s,activeRange:l,renderRange:u,minTime:i,maxTime:o,isValid:c,dateIncrement:this.buildDateIncrement(a.duration)}},e.prototype.buildValidRange=function(){return this.getRangeOption("validRange",this.calendar.getNow())||{start:null,end:null}},e.prototype.buildCurrentRangeInfo=function(e,t){var n,r=this.viewSpec,i=this.dateEnv,o=null,a=null,s=null;return r.duration?(o=r.duration,a=r.durationUnit,s=this.buildRangeFromDuration(e,t,o,a)):(n=this.options.dayCount)?(a="day",s=this.buildRangeFromDayCount(e,t,n)):(s=this.buildCustomVisibleRange(e))?a=i.greatestWholeUnit(s.start,s.end).unit:(a=ne(o=this.getFallbackDuration()).unit,s=this.buildRangeFromDuration(e,t,o,a)),{duration:o,unit:a,range:s}},e.prototype.getFallbackDuration=function(){return J({day:1})},e.prototype.adjustActiveRange=function(e,t,n){var r=this.dateEnv,i=e.start,o=e.end;return this.viewSpec.class.prototype.usesMinMaxTime&&(ee(t)<0&&(i=B(i),i=r.add(i,t)),ee(n)>1&&(o=x(o=B(o),-1),o=r.add(o,n))),{start:i,end:o}},e.prototype.buildRangeFromDuration=function(e,t,n,r){var i,o,a,s,u,l=this.dateEnv,c=this.options.dateAlignment;function d(){a=l.startOf(e,c),s=l.add(a,n),u={start:a,end:s}}return c||((i=this.options.dateIncrement)?(o=J(i),c=te(o) ")),l=!1):((r=f[e])?(d=function(e){r.click&&r.click.call(E,e)},(v=a.getCustomButtonIconClass(r))||(v=a.getIconClass(e))||(g=r.text)):(s=c[e])?(n.viewsWithButtons.push(e),d=function(){u.changeView(e)},(g=s.buttonTextOverride)||(v=a.getIconClass(e))||(g=s.buttonTextDefault)):u[e]&&(d=function(){u[e]()},(g=p[e])||(v=a.getIconClass(e))||(g=h[e])),d&&(m=["fc-"+e+"-button",a.getClass("button")],g?(y=Pt(g),S=""):v&&(y="",S=' aria-label="'+e+'"'),(E=i('")).addEventListener("click",d),o.push(E)))}),o.length>1){r=document.createElement("div");var v=a.getClass("buttonGroup");l&&v&&r.classList.add(v),s(r,o),d.appendChild(r)}else s(d,o)}),d},t.prototype.updateToday=function(e){this.toggleButtonEnabled("today",e)},t.prototype.updatePrev=function(e){this.toggleButtonEnabled("prev",e)},t.prototype.updateNext=function(e){this.toggleButtonEnabled("next",e)},t.prototype.updateTitle=function(e){v(this.el,"h2").forEach(function(t){t.innerText=e})},t.prototype.updateActiveButton=function(e){var t=this.context.theme.getClass("buttonActive");v(this.el,"button").forEach(function(n){e&&n.classList.contains("fc-"+e+"-button")?n.classList.add(t):n.classList.remove(t)})},t.prototype.toggleButtonEnabled=function(e,t){v(this.el,".fc-"+e+"-button").forEach(function(e){e.disabled=!t})},t}(vn),yr=function(e){function t(t){var n=e.call(this)||this;return n.elClassNames=[],n.renderSkeleton=Xt(n._renderSkeleton,n._unrenderSkeleton),n.renderToolbars=Xt(n._renderToolbars,n._unrenderToolbars,[n.renderSkeleton]),n.buildComponentContext=Ye(Er),n.buildViewPropTransformers=Ye(Sr),n.el=t,n.computeTitle=Ye(mr),n.parseBusinessHours=Ye(function(e){return Gt(e,n.context.calendar)}),n}return Ee(t,e),t.prototype.render=function(e,t){this.freezeHeight();var n=this.computeTitle(e.dateProfile,e.viewSpec.options);this.renderSkeleton(t),this.renderToolbars(e.viewSpec,e.dateProfile,e.currentDate,n),this.renderView(e,n),this.updateSize(),this.thawHeight()},t.prototype.destroy=function(){this.header&&this.header.destroy(),this.footer&&this.footer.destroy(),this.renderSkeleton.unrender(),e.prototype.destroy.call(this)},t.prototype._renderSkeleton=function(e){this.updateElClassNames(e),u(this.el,this.contentEl=r("div",{className:"fc-view-container"}));for(var t=e.calendar,n=0,i=t.pluginSystem.hooks.viewContainerModifiers;n1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}}(e),t.titleRangeSeparator),{isEndExclusive:e.isRangeAllDay})}function Er(e,t,n){return e.extend(t.options,n)}function Sr(e){return e.map(function(e){return new e})}var br=function(){function e(e){this.component=e.component}return e.prototype.destroy=function(){},e}();var Dr={},Tr=function(e){function t(t){var n=e.call(this,t)||this;n.handleSegClick=function(e,t){var r=n.component,i=r.context,o=i.calendar,a=i.view,s=ht(t);if(s&&r.isValidSegDownEl(e.target)){var u=p(e.target,".fc-has-url"),l=u?u.querySelector("a[href]").href:"";o.publiclyTrigger("eventClick",[{el:t,event:new ct(r.context.calendar,s.eventRange.def,s.eventRange.instance),jsEvent:e,view:a}]),l&&!e.defaultPrevented&&(window.location.href=l)}};var r=t.component;return n.destroy=_(r.el,"click",r.fgSegSelector+","+r.bgSegSelector,n.handleSegClick),n}return Ee(t,e),t}(br),wr=function(e){function t(t){var n=e.call(this,t)||this;n.handleEventElRemove=function(e){e===n.currentSegEl&&n.handleSegLeave(null,n.currentSegEl)},n.handleSegEnter=function(e,t){ht(t)&&(t.classList.add("fc-allow-mouse-resize"),n.currentSegEl=t,n.triggerEvent("eventMouseEnter",e,t))},n.handleSegLeave=function(e,t){n.currentSegEl&&(t.classList.remove("fc-allow-mouse-resize"),n.currentSegEl=null,n.triggerEvent("eventMouseLeave",e,t))};var r,i,o,a,s,u=t.component;return n.removeHoverListeners=(r=u.el,i=u.fgSegSelector+","+u.bgSegSelector,o=n.handleSegEnter,a=n.handleSegLeave,_(r,"mouseover",i,function(e,t){if(t!==s){s=t,o(e,t);var n=function(e){s=null,a(e,t),t.removeEventListener("mouseleave",n)};t.addEventListener("mouseleave",n)}})),u.context.calendar.on("eventElRemove",n.handleEventElRemove),n}return Ee(t,e),t.prototype.destroy=function(){this.removeHoverListeners(),this.component.context.calendar.off("eventElRemove",this.handleEventElRemove)},t.prototype.triggerEvent=function(e,t,n){var r=this.component,i=r.context,o=i.calendar,a=i.view,s=ht(n);t&&!r.isValidSegDownEl(t.target)||o.publiclyTrigger(e,[{el:n,event:new ct(o,s.eventRange.def,s.eventRange.instance),jsEvent:t,view:a}])},t}(br),Rr=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ee(t,e),t}(fn);Rr.prototype.classes={widget:"fc-unthemed",widgetHeader:"fc-widget-header",widgetContent:"fc-widget-content",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active",popoverHeader:"fc-widget-header",popoverContent:"fc-widget-content",headerRow:"fc-widget-header",dayRow:"fc-widget-content",listView:"fc-widget-content"},Rr.prototype.baseIconClass="fc-icon",Rr.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"},Rr.prototype.iconOverrideOption="buttonIcons",Rr.prototype.iconOverrideCustomButtonOption="icon",Rr.prototype.iconOverridePrefix="fc-icon-";var Cr=function(){function e(e,t){var n=this;this.buildComponentContext=Ye(Ir),this.parseRawLocales=Ye(xn),this.buildLocale=Ye(Nn),this.buildDateEnv=Ye(Mr),this.buildTheme=Ye(kr),this.buildEventUiSingleBase=Ye(this._buildEventUiSingleBase),this.buildSelectionConfig=Ye(this._buildSelectionConfig),this.buildEventUiBySource=qe(Or,Me),this.buildEventUiBases=Ye(Pr),this.interactionsStore={},this.actionQueue=[],this.isReducing=!1,this.needsRerender=!1,this.isRendering=!1,this.renderingPauseDepth=0,this.buildDelayedRerender=Ye(_r),this.afterSizingTriggers={},this.isViewUpdated=!1,this.isDatesUpdated=!1,this.isEventsUpdated=!1,this.el=e,this.optionsManager=new Un(t||{}),this.pluginSystem=new En,this.addPluginInputs(this.optionsManager.computed.plugins||[]),this.handleOptions(this.optionsManager.computed),this.publiclyTrigger("_init"),this.hydrate(),this.calendarInteractions=this.pluginSystem.hooks.calendarInteractions.map(function(e){return new e(n)})}return e.prototype.addPluginInputs=function(e){for(var t=function(e){for(var t=[],n=0,r=e;n"},e.prototype.detachSegs=function(e,t){var n=this.containerElsByType[e];n&&(n.forEach(c),delete this.containerElsByType[e])},e.prototype.computeSizes=function(e){for(var t in this.segsByType)(e||this.dirtySizeFlags[t])&&this.computeSegSizes(this.segsByType[t])},e.prototype.assignSizes=function(e){for(var t in this.segsByType)(e||this.dirtySizeFlags[t])&&this.assignSegSizes(this.segsByType[t]);this.dirtySizeFlags={}},e.prototype.computeSegSizes=function(e){},e.prototype.assignSegSizes=function(e){},e}(),zr=function(e){this.timeZoneName=e},Lr=function(){function e(e){this.emitter=new rn}return e.prototype.destroy=function(){},e.prototype.setMirrorIsVisible=function(e){},e.prototype.setMirrorNeedsRevert=function(e){},e.prototype.setAutoScrollEnabled=function(e){},e}();function Br(e){var t=Nn(e.locale||"en",xn([]).map);return e=Se({timeZone:Mn.timeZone,calendarSystem:"gregory"},e,{locale:t}),new Fn(e)}var Vr={startTime:J,duration:J,create:Boolean,sourceId:String},Ar={create:!0};function Fr(e,t){return!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"}}function Wr(e,t,n,r,i,o,a,s){var u,l=o.dateEnv,c=o.theme,d=o.options,f=Ze(t.activeRange,e),p=["fc-day-header",c.getClass("widgetHeader")];return u="function"==typeof d.columnHeaderHtml?d.columnHeaderHtml(l.toDate(e)):"function"==typeof d.columnHeaderText?Pt(d.columnHeaderText(l.toDate(e))):Pt(l.format(e,i)),n?p=p.concat(en(e,t,o,!0)):p.push("fc-"+P[e.getUTCDay()]),'1?' colspan="'+a+'"':"")+(s?" "+s:"")+">"+(f?$t(d,l,{date:e,forceOff:!n||1===r},u):u)+""}var Zr=function(e){function t(t){var n=e.call(this)||this;return n.renderSkeleton=Xt(n._renderSkeleton,n._unrenderSkeleton),n.parentEl=t,n}return Ee(t,e),t.prototype.render=function(e,t){var n=e.dates,r=e.datesRepDistinctDays,i=[];this.renderSkeleton(t),e.renderIntroHtml&&i.push(e.renderIntroHtml());for(var o=ot(t.options.columnHeaderFormat||Fr(r,n.length)),a=0,s=n;a"+i.join("")+""},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender()},t.prototype._renderSkeleton=function(e){var t=e.theme,n=this.parentEl;n.innerHTML="",n.appendChild(this.el=i('
')),this.thead=this.el.querySelector("thead")},t.prototype._unrenderSkeleton=function(){c(this.el)},t}(vn),jr=function(){function e(e,t){for(var n=e.start,r=e.end,i=[],o=[],a=-1;n=t.length?t[t.length-1]+1:t[n]},e}(),Yr=function(){function e(e,t){var n,r,i,o=e.dates;if(t){for(r=o[0].getUTCDay(),n=1;n1},e.isPropsEqual=Me,e.isPropsValid=It,e.isSingleDay=function(e){return 0===e.years&&0===e.months&&1===e.days&&0===e.milliseconds},e.isValidDate=Y,e.listenBySelector=_,e.mapHash=Re,e.matchCellWidths=function(e){var t=0;return e.forEach(function(e){var n=e.firstChild;if(n instanceof HTMLElement){var r=n.getBoundingClientRect().width;r>t&&(t=r)}}),t++,e.forEach(function(e){e.style.width=t+"px"}),t},e.memoize=Ye,e.memoizeOutput=qe,e.memoizeRendering=Xt,e.mergeEventStores=He,e.multiplyDuration=function(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}},e.padStart=le,e.parseBusinessHours=Gt,e.parseDragMeta=function(e){var t={},n=he(e,Vr,Ar,t);return n.leftoverProps=t,n},e.parseEventDef=jt,e.parseFieldSpecs=ie,e.parseMarker=An,e.pointInsideRect=function(e,t){return e.left>=t.left&&e.left=t.top&&e.top * { + /* work around the way we do column resizing and ensure a minimum width */ + display: inline-block; + min-width: 1.25em; +} \ No newline at end of file diff --git a/src/main/resources/static/packages/daygrid/main.d.ts b/src/main/resources/static/packages/daygrid/main.d.ts new file mode 100644 index 00000000..312ddd97 --- /dev/null +++ b/src/main/resources/static/packages/daygrid/main.d.ts @@ -0,0 +1,316 @@ +// Generated by dts-bundle v0.7.3-fork.1 +// Dependencies for this module: +// ../../../../../@fullcalendar/core + +declare module '@fullcalendar/daygrid' { + export { default as SimpleDayGrid, DayGridSlicer } from '@fullcalendar/daygrid/SimpleDayGrid'; + export { default as DayGrid, DayGridSeg } from '@fullcalendar/daygrid/DayGrid'; + export { default as AbstractDayGridView } from '@fullcalendar/daygrid/AbstractDayGridView'; + export { default as DayGridView, buildDayTable as buildBasicDayTable } from '@fullcalendar/daygrid/DayGridView'; + export { default as DayBgRow } from '@fullcalendar/daygrid/DayBgRow'; + const _default: import("@fullcalendar/core").PluginDef; + export default _default; +} + +declare module '@fullcalendar/daygrid/SimpleDayGrid' { + import { DateProfile, EventStore, EventUiHash, DateSpan, EventInteractionState, DayTable, Duration, DateComponent, DateRange, Slicer, Hit, ComponentContext } from '@fullcalendar/core'; + import { default as DayGrid, DayGridSeg } from '@fullcalendar/daygrid/DayGrid'; + export interface SimpleDayGridProps { + dateProfile: DateProfile | null; + dayTable: DayTable; + nextDayThreshold: Duration; + businessHours: EventStore; + eventStore: EventStore; + eventUiBases: EventUiHash; + dateSelection: DateSpan | null; + eventSelection: string; + eventDrag: EventInteractionState | null; + eventResize: EventInteractionState | null; + isRigid: boolean; + } + export { SimpleDayGrid as default, SimpleDayGrid }; + class SimpleDayGrid extends DateComponent { + dayGrid: DayGrid; + constructor(dayGrid: DayGrid); + firstContext(context: ComponentContext): void; + destroy(): void; + render(props: SimpleDayGridProps, context: ComponentContext): void; + buildPositionCaches(): void; + queryHit(positionLeft: number, positionTop: number): Hit; + } + export class DayGridSlicer extends Slicer { + sliceRange(dateRange: DateRange, dayTable: DayTable): DayGridSeg[]; + } +} + +declare module '@fullcalendar/daygrid/DayGrid' { + import { PositionCache, DateMarker, DateComponent, EventSegUiInteractionState, Seg, DateProfile, ComponentContext } from '@fullcalendar/core'; + import Popover from '@fullcalendar/daygrid/Popover'; + import DayGridEventRenderer from '@fullcalendar/daygrid/DayGridEventRenderer'; + import DayTile from '@fullcalendar/daygrid/DayTile'; + export interface RenderProps { + renderNumberIntroHtml: (row: number, dayGrid: DayGrid) => string; + renderBgIntroHtml: () => string; + renderIntroHtml: () => string; + colWeekNumbersVisible: boolean; + cellWeekNumbersVisible: boolean; + } + export interface DayGridSeg extends Seg { + row: number; + firstCol: number; + lastCol: number; + } + export interface DayGridCell { + date: DateMarker; + htmlAttrs?: string; + } + export interface DayGridProps { + dateProfile: DateProfile; + cells: DayGridCell[][]; + businessHourSegs: DayGridSeg[]; + bgEventSegs: DayGridSeg[]; + fgEventSegs: DayGridSeg[]; + dateSelectionSegs: DayGridSeg[]; + eventSelection: string; + eventDrag: EventSegUiInteractionState | null; + eventResize: EventSegUiInteractionState | null; + isRigid: boolean; + } + export { DayGrid as default, DayGrid }; + class DayGrid extends DateComponent { + eventRenderer: DayGridEventRenderer; + renderProps: RenderProps; + rowCnt: number; + colCnt: number; + bottomCoordPadding: number; + rowEls: HTMLElement[]; + cellEls: HTMLElement[]; + isCellSizesDirty: boolean; + rowPositions: PositionCache; + colPositions: PositionCache; + segPopover: Popover; + segPopoverTile: DayTile; + constructor(el: any, renderProps: RenderProps); + render(props: DayGridProps, context: ComponentContext): void; + destroy(): void; + getCellRange(row: any, col: any): { + start: Date; + end: Date; + }; + updateSegPopoverTile(date?: any, segs?: any): void; + _renderCells(cells: DayGridCell[][], isRigid: boolean): void; + _unrenderCells(): void; + renderDayRowHtml(row: any, isRigid: any): string; + getIsNumbersVisible(): boolean; + getIsDayNumbersVisible(): boolean; + renderNumberTrHtml(row: number): string; + renderNumberCellsHtml(row: any): string; + renderNumberCellHtml(date: any): string; + updateSize(isResize: boolean): void; + buildPositionCaches(): void; + buildColPositions(): void; + buildRowPositions(): void; + positionToHit(leftPosition: any, topPosition: any): { + row: any; + col: any; + dateSpan: { + range: { + start: Date; + end: Date; + }; + allDay: boolean; + }; + dayEl: HTMLElement; + relativeRect: { + left: any; + right: any; + top: any; + bottom: any; + }; + }; + getCellEl(row: any, col: any): HTMLElement; + _renderEventDrag(state: EventSegUiInteractionState): void; + _unrenderEventDrag(state: EventSegUiInteractionState): void; + _renderEventResize(state: EventSegUiInteractionState): void; + _unrenderEventResize(state: EventSegUiInteractionState): void; + removeSegPopover(): void; + limitRows(levelLimit: any): void; + computeRowLevelLimit(row: any): (number | false); + limitRow(row: any, levelLimit: any): void; + unlimitRow(row: any): void; + renderMoreLink(row: any, col: any, hiddenSegs: any): HTMLElement; + showSegPopover(row: any, col: any, moreLink: HTMLElement, segs: any): void; + resliceDaySegs(segs: any, dayDate: any): any[]; + getMoreLinkText(num: any): any; + getCellSegs(row: any, col: any, startLevel?: any): any[]; + } +} + +declare module '@fullcalendar/daygrid/AbstractDayGridView' { + import { ScrollComponent, View, Duration, ComponentContext, ViewProps } from '@fullcalendar/core'; + import DayGrid from '@fullcalendar/daygrid/DayGrid'; + export { AbstractDayGridView as default, AbstractDayGridView }; + abstract class AbstractDayGridView extends View { + scroller: ScrollComponent; + dayGrid: DayGrid; + colWeekNumbersVisible: boolean; + cellWeekNumbersVisible: boolean; + weekNumberWidth: number; + _processOptions(options: any): void; + render(props: ViewProps, context: ComponentContext): void; + destroy(): void; + _renderSkeleton(context: ComponentContext): void; + _unrenderSkeleton(): void; + renderSkeletonHtml(): string; + weekNumberStyleAttr(): string; + hasRigidRows(): boolean; + updateSize(isResize: boolean, viewHeight: number, isAuto: boolean): void; + updateBaseSize(isResize: boolean, viewHeight: number, isAuto: boolean): void; + computeScrollerHeight(viewHeight: any): number; + setGridHeight(height: any, isAuto: any): void; + computeDateScroll(duration: Duration): { + top: number; + }; + queryDateScroll(): { + top: number; + }; + applyDateScroll(scroll: any): void; + renderHeadIntroHtml: () => string; + renderDayGridNumberIntroHtml: (row: number, dayGrid: DayGrid) => string; + renderDayGridBgIntroHtml: () => string; + renderDayGridIntroHtml: () => string; + } +} + +declare module '@fullcalendar/daygrid/DayGridView' { + import { DayHeader, ComponentContext, DateProfileGenerator, DateProfile, ViewProps, DayTable } from '@fullcalendar/core'; + import AbstractDayGridView from '@fullcalendar/daygrid/AbstractDayGridView'; + import SimpleDayGrid from '@fullcalendar/daygrid/SimpleDayGrid'; + export { DayGridView as default, DayGridView }; + class DayGridView extends AbstractDayGridView { + header: DayHeader; + simpleDayGrid: SimpleDayGrid; + dayTable: DayTable; + render(props: ViewProps, context: ComponentContext): void; + _renderSkeleton(context: ComponentContext): void; + _unrenderSkeleton(): void; + } + export function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable; +} + +declare module '@fullcalendar/daygrid/DayBgRow' { + import { ComponentContext, DateMarker, DateProfile } from '@fullcalendar/core'; + export interface DayBgCell { + date: DateMarker; + htmlAttrs?: string; + } + export interface DayBgRowProps { + cells: DayBgCell[]; + dateProfile: DateProfile; + renderIntroHtml?: () => string; + } + export { DayBgRow as default, DayBgRow }; + class DayBgRow { + context: ComponentContext; + constructor(context: ComponentContext); + renderHtml(props: DayBgRowProps): string; + } +} + +declare module '@fullcalendar/daygrid/Popover' { + export interface PopoverOptions { + className?: string; + content?: (el: HTMLElement) => void; + parentEl: HTMLElement; + autoHide?: boolean; + top?: number; + left?: number; + right?: number; + viewportConstrain?: boolean; + } + export { Popover as default, Popover }; + class Popover { + isHidden: boolean; + options: PopoverOptions; + el: HTMLElement; + margin: number; + constructor(options: PopoverOptions); + show(): void; + hide(): void; + render(): void; + documentMousedown: (ev: any) => void; + destroy(): void; + position(): void; + trigger(name: any): void; + } +} + +declare module '@fullcalendar/daygrid/DayGridEventRenderer' { + import { Seg } from '@fullcalendar/core'; + import DayGrid from '@fullcalendar/daygrid/DayGrid'; + import SimpleDayGridEventRenderer from '@fullcalendar/daygrid/SimpleDayGridEventRenderer'; + export { DayGridEventRenderer as default, DayGridEventRenderer }; + class DayGridEventRenderer extends SimpleDayGridEventRenderer { + dayGrid: DayGrid; + rowStructs: any; + constructor(dayGrid: DayGrid); + attachSegs(segs: Seg[], mirrorInfo: any): void; + detachSegs(): void; + renderSegRows(segs: Seg[]): any[]; + renderSegRow(row: any, rowSegs: any): { + row: any; + tbodyEl: HTMLTableSectionElement; + cellMatrix: any[]; + segMatrix: any[]; + segLevels: any[]; + segs: any; + }; + buildSegLevels(segs: Seg[]): any[]; + groupSegRows(segs: Seg[]): any[]; + computeDisplayEventEnd(): boolean; + } +} + +declare module '@fullcalendar/daygrid/DayTile' { + import { DateComponent, Seg, Hit, DateMarker, ComponentContext, EventInstanceHash } from '@fullcalendar/core'; + import SimpleDayGridEventRenderer from '@fullcalendar/daygrid/SimpleDayGridEventRenderer'; + export interface DayTileProps { + date: DateMarker; + fgSegs: Seg[]; + eventSelection: string; + eventDragInstances: EventInstanceHash; + eventResizeInstances: EventInstanceHash; + } + export { DayTile as default, DayTile }; + class DayTile extends DateComponent { + segContainerEl: HTMLElement; + constructor(el: HTMLElement); + firstContext(context: ComponentContext): void; + render(props: DayTileProps, context: ComponentContext): void; + destroy(): void; + _renderFrame(date: DateMarker): void; + queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null; + } + export class DayTileEventRenderer extends SimpleDayGridEventRenderer { + dayTile: DayTile; + constructor(dayTile: any); + attachSegs(segs: Seg[]): void; + detachSegs(segs: Seg[]): void; + } +} + +declare module '@fullcalendar/daygrid/SimpleDayGridEventRenderer' { + import { FgEventRenderer, Seg } from '@fullcalendar/core'; + export { SimpleDayGridEventRenderer as default, SimpleDayGridEventRenderer }; + abstract class SimpleDayGridEventRenderer extends FgEventRenderer { + renderSegHtml(seg: Seg, mirrorInfo: any): string; + computeEventTimeFormat(): { + hour: string; + minute: string; + omitZeroMinute: boolean; + meridiem: string; + }; + computeDisplayEventEnd(): boolean; + } +} + diff --git a/src/main/resources/static/packages/daygrid/main.esm.js b/src/main/resources/static/packages/daygrid/main.esm.js new file mode 100644 index 00000000..ffe022c4 --- /dev/null +++ b/src/main/resources/static/packages/daygrid/main.esm.js @@ -0,0 +1,1654 @@ +/*! +FullCalendar Day Grid Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +import { addWeeks, diffWeeks, DateProfileGenerator, createElement, listenBySelector, removeElement, computeRect, computeClippingRect, applyStyle, computeEventDraggable, computeEventStartResizable, computeEventEndResizable, cssToStr, htmlEscape, FgEventRenderer, appendToElement, prependToElement, htmlToElement, FillRenderer, memoizeRendering, createFormatter, addDays, DateComponent, rangeContainsMarker, getDayClasses, findElements, PositionCache, buildGotoAnchorHtml, findChildren, insertAfterElement, intersectRanges, memoize, ScrollComponent, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, distributeHeight, undistributeHeight, View, Slicer, DayHeader, DaySeries, DayTable, createPlugin } from '@fullcalendar/core'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +var DayGridDateProfileGenerator = /** @class */ (function (_super) { + __extends(DayGridDateProfileGenerator, _super); + function DayGridDateProfileGenerator() { + return _super !== null && _super.apply(this, arguments) || this; + } + // Computes the date range that will be rendered. + DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) { + var dateEnv = this.dateEnv; + var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay); + var start = renderRange.start; + var end = renderRange.end; + var endOfWeek; + // year and month views should be aligned with weeks. this is already done for week + if (/^(year|month)$/.test(currentRangeUnit)) { + start = dateEnv.startOfWeek(start); + // make end-of-week if not already + endOfWeek = dateEnv.startOfWeek(end); + if (endOfWeek.valueOf() !== end.valueOf()) { + end = addWeeks(endOfWeek, 1); + } + } + // ensure 6 weeks + if (this.options.monthMode && + this.options.fixedWeekCount) { + var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays + diffWeeks(start, end)); + end = addWeeks(end, 6 - rowCnt); + } + return { start: start, end: end }; + }; + return DayGridDateProfileGenerator; +}(DateProfileGenerator)); + +/* A rectangular panel that is absolutely positioned over other content +------------------------------------------------------------------------------------------------------------------------ +Options: + - className (string) + - content (HTML string, element, or element array) + - parentEl + - top + - left + - right (the x coord of where the right edge should be. not a "CSS" right) + - autoHide (boolean) + - show (callback) + - hide (callback) +*/ +var Popover = /** @class */ (function () { + function Popover(options) { + var _this = this; + this.isHidden = true; + this.margin = 10; // the space required between the popover and the edges of the scroll container + // Triggered when the user clicks *anywhere* in the document, for the autoHide feature + this.documentMousedown = function (ev) { + // only hide the popover if the click happened outside the popover + if (_this.el && !_this.el.contains(ev.target)) { + _this.hide(); + } + }; + this.options = options; + } + // Shows the popover on the specified position. Renders it if not already + Popover.prototype.show = function () { + if (this.isHidden) { + if (!this.el) { + this.render(); + } + this.el.style.display = ''; + this.position(); + this.isHidden = false; + this.trigger('show'); + } + }; + // Hides the popover, through CSS, but does not remove it from the DOM + Popover.prototype.hide = function () { + if (!this.isHidden) { + this.el.style.display = 'none'; + this.isHidden = true; + this.trigger('hide'); + } + }; + // Creates `this.el` and renders content inside of it + Popover.prototype.render = function () { + var _this = this; + var options = this.options; + var el = this.el = createElement('div', { + className: 'fc-popover ' + (options.className || ''), + style: { + top: '0', + left: '0' + } + }); + if (typeof options.content === 'function') { + options.content(el); + } + options.parentEl.appendChild(el); + // when a click happens on anything inside with a 'fc-close' className, hide the popover + listenBySelector(el, 'click', '.fc-close', function (ev) { + _this.hide(); + }); + if (options.autoHide) { + document.addEventListener('mousedown', this.documentMousedown); + } + }; + // Hides and unregisters any handlers + Popover.prototype.destroy = function () { + this.hide(); + if (this.el) { + removeElement(this.el); + this.el = null; + } + document.removeEventListener('mousedown', this.documentMousedown); + }; + // Positions the popover optimally, using the top/left/right options + Popover.prototype.position = function () { + var options = this.options; + var el = this.el; + var elDims = el.getBoundingClientRect(); // only used for width,height + var origin = computeRect(el.offsetParent); + var clippingRect = computeClippingRect(options.parentEl); + var top; // the "position" (not "offset") values for the popover + var left; // + // compute top and left + top = options.top || 0; + if (options.left !== undefined) { + left = options.left; + } + else if (options.right !== undefined) { + left = options.right - elDims.width; // derive the left value from the right value + } + else { + left = 0; + } + // constrain to the view port. if constrained by two edges, give precedence to top/left + top = Math.min(top, clippingRect.bottom - elDims.height - this.margin); + top = Math.max(top, clippingRect.top + this.margin); + left = Math.min(left, clippingRect.right - elDims.width - this.margin); + left = Math.max(left, clippingRect.left + this.margin); + applyStyle(el, { + top: top - origin.top, + left: left - origin.left + }); + }; + // Triggers a callback. Calls a function in the option hash of the same name. + // Arguments beyond the first `name` are forwarded on. + // TODO: better code reuse for this. Repeat code + // can kill this??? + Popover.prototype.trigger = function (name) { + if (this.options[name]) { + this.options[name].apply(this, Array.prototype.slice.call(arguments, 1)); + } + }; + return Popover; +}()); + +/* Event-rendering methods for the DayGrid class +----------------------------------------------------------------------------------------------------------------------*/ +// "Simple" is bad a name. has nothing to do with SimpleDayGrid +var SimpleDayGridEventRenderer = /** @class */ (function (_super) { + __extends(SimpleDayGridEventRenderer, _super); + function SimpleDayGridEventRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + // Builds the HTML to be used for the default element for an individual segment + SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) { + var context = this.context; + var eventRange = seg.eventRange; + var eventDef = eventRange.def; + var eventUi = eventRange.ui; + var allDay = eventDef.allDay; + var isDraggable = computeEventDraggable(context, eventDef, eventUi); + var isResizableFromStart = allDay && seg.isStart && computeEventStartResizable(context, eventDef, eventUi); + var isResizableFromEnd = allDay && seg.isEnd && computeEventEndResizable(context, eventDef, eventUi); + var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo); + var skinCss = cssToStr(this.getSkinCss(eventUi)); + var timeHtml = ''; + var timeText; + var titleHtml; + classes.unshift('fc-day-grid-event', 'fc-h-event'); + // Only display a timed events time if it is the starting segment + if (seg.isStart) { + timeText = this.getTimeText(eventRange); + if (timeText) { + timeHtml = '' + htmlEscape(timeText) + ''; + } + } + titleHtml = + '' + + (htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height + ''; + return '' + + '
' + + (context.options.dir === 'rtl' ? + titleHtml + ' ' + timeHtml : // put a natural space in between + timeHtml + ' ' + titleHtml // + ) + + '
' + + (isResizableFromStart ? + '
' : + '') + + (isResizableFromEnd ? + '
' : + '') + + '
'; + }; + // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined + SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () { + return { + hour: 'numeric', + minute: '2-digit', + omitZeroMinute: true, + meridiem: 'narrow' + }; + }; + SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () { + return false; // TODO: somehow consider the originating DayGrid's column count + }; + return SimpleDayGridEventRenderer; +}(FgEventRenderer)); + +/* Event-rendering methods for the DayGrid class +----------------------------------------------------------------------------------------------------------------------*/ +var DayGridEventRenderer = /** @class */ (function (_super) { + __extends(DayGridEventRenderer, _super); + function DayGridEventRenderer(dayGrid) { + var _this = _super.call(this) || this; + _this.dayGrid = dayGrid; + return _this; + } + // Renders the given foreground event segments onto the grid + DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) { + var rowStructs = this.rowStructs = this.renderSegRows(segs); + // append to each row's content skeleton + this.dayGrid.rowEls.forEach(function (rowNode, i) { + rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl); + }); + // removes the "more.." events popover + if (!mirrorInfo) { + this.dayGrid.removeSegPopover(); + } + }; + // Unrenders all currently rendered foreground event segments + DayGridEventRenderer.prototype.detachSegs = function () { + var rowStructs = this.rowStructs || []; + var rowStruct; + while ((rowStruct = rowStructs.pop())) { + removeElement(rowStruct.tbodyEl); + } + this.rowStructs = null; + }; + // Uses the given events array to generate elements that should be appended to each row's content skeleton. + // Returns an array of rowStruct objects (see the bottom of `renderSegRow`). + // PRECONDITION: each segment shoud already have a rendered and assigned `.el` + DayGridEventRenderer.prototype.renderSegRows = function (segs) { + var rowStructs = []; + var segRows; + var row; + segRows = this.groupSegRows(segs); // group into nested arrays + // iterate each row of segment groupings + for (row = 0; row < segRows.length; row++) { + rowStructs.push(this.renderSegRow(row, segRows[row])); + } + return rowStructs; + }; + // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains + // the segments. Returns object with a bunch of internal data about how the render was calculated. + // NOTE: modifies rowSegs + DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) { + var isRtl = this.context.isRtl; + var dayGrid = this.dayGrid; + var colCnt = dayGrid.colCnt; + var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels + var levelCnt = Math.max(1, segLevels.length); // ensure at least one level + var tbody = document.createElement('tbody'); + var segMatrix = []; // lookup for which segments are rendered into which level+col cells + var cellMatrix = []; // lookup for all elements of the level+col matrix + var loneCellMatrix = []; // lookup for elements that only take up a single column + var i; + var levelSegs; + var col; + var tr; + var j; + var seg; + var td; + // populates empty cells from the current column (`col`) to `endCol` + function emptyCellsUntil(endCol) { + while (col < endCol) { + // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell + td = (loneCellMatrix[i - 1] || [])[col]; + if (td) { + td.rowSpan = (td.rowSpan || 1) + 1; + } + else { + td = document.createElement('td'); + tr.appendChild(td); + } + cellMatrix[i][col] = td; + loneCellMatrix[i][col] = td; + col++; + } + } + for (i = 0; i < levelCnt; i++) { // iterate through all levels + levelSegs = segLevels[i]; + col = 0; + tr = document.createElement('tr'); + segMatrix.push([]); + cellMatrix.push([]); + loneCellMatrix.push([]); + // levelCnt might be 1 even though there are no actual levels. protect against this. + // this single empty row is useful for styling. + if (levelSegs) { + for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level + seg = levelSegs[j]; + var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; + var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol; + emptyCellsUntil(leftCol); + // create a container that occupies or more columns. append the event element. + td = createElement('td', { className: 'fc-event-container' }, seg.el); + if (leftCol !== rightCol) { + td.colSpan = rightCol - leftCol + 1; + } + else { // a single-column segment + loneCellMatrix[i][col] = td; + } + while (col <= rightCol) { + cellMatrix[i][col] = td; + segMatrix[i][col] = seg; + col++; + } + tr.appendChild(td); + } + } + emptyCellsUntil(colCnt); // finish off the row + var introHtml = dayGrid.renderProps.renderIntroHtml(); + if (introHtml) { + if (isRtl) { + appendToElement(tr, introHtml); + } + else { + prependToElement(tr, introHtml); + } + } + tbody.appendChild(tr); + } + return { + row: row, + tbodyEl: tbody, + cellMatrix: cellMatrix, + segMatrix: segMatrix, + segLevels: segLevels, + segs: rowSegs + }; + }; + // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels. + // NOTE: modifies segs + DayGridEventRenderer.prototype.buildSegLevels = function (segs) { + var isRtl = this.context.isRtl; + var colCnt = this.dayGrid.colCnt; + var levels = []; + var i; + var seg; + var j; + // Give preference to elements with certain criteria, so they have + // a chance to be closer to the top. + segs = this.sortEventSegs(segs); + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + // loop through levels, starting with the topmost, until the segment doesn't collide with other segments + for (j = 0; j < levels.length; j++) { + if (!isDaySegCollision(seg, levels[j])) { + break; + } + } + // `j` now holds the desired subrow index + seg.level = j; + seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only + seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only + ; + (levels[j] || (levels[j] = [])).push(seg); + } + // order segments left-to-right. very important if calendar is RTL + for (j = 0; j < levels.length; j++) { + levels[j].sort(compareDaySegCols); + } + return levels; + }; + // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row + DayGridEventRenderer.prototype.groupSegRows = function (segs) { + var segRows = []; + var i; + for (i = 0; i < this.dayGrid.rowCnt; i++) { + segRows.push([]); + } + for (i = 0; i < segs.length; i++) { + segRows[segs[i].row].push(segs[i]); + } + return segRows; + }; + // Computes a default `displayEventEnd` value if one is not expliclty defined + DayGridEventRenderer.prototype.computeDisplayEventEnd = function () { + return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day + }; + return DayGridEventRenderer; +}(SimpleDayGridEventRenderer)); +// Computes whether two segments' columns collide. They are assumed to be in the same row. +function isDaySegCollision(seg, otherSegs) { + var i; + var otherSeg; + for (i = 0; i < otherSegs.length; i++) { + otherSeg = otherSegs[i]; + if (otherSeg.firstCol <= seg.lastCol && + otherSeg.lastCol >= seg.firstCol) { + return true; + } + } + return false; +} +// A cmp function for determining the leftmost event +function compareDaySegCols(a, b) { + return a.leftCol - b.leftCol; +} + +var DayGridMirrorRenderer = /** @class */ (function (_super) { + __extends(DayGridMirrorRenderer, _super); + function DayGridMirrorRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) { + var sourceSeg = mirrorInfo.sourceSeg; + var rowStructs = this.rowStructs = this.renderSegRows(segs); + // inject each new event skeleton into each associated row + this.dayGrid.rowEls.forEach(function (rowNode, row) { + var skeletonEl = htmlToElement('
'); // will be absolutely positioned + var skeletonTopEl; + var skeletonTop; + // If there is an original segment, match the top position. Otherwise, put it at the row's top level + if (sourceSeg && sourceSeg.row === row) { + skeletonTopEl = sourceSeg.el; + } + else { + skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody'); + if (!skeletonTopEl) { // when no events + skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table'); + } + } + skeletonTop = skeletonTopEl.getBoundingClientRect().top - + rowNode.getBoundingClientRect().top; // the offsetParent origin + skeletonEl.style.top = skeletonTop + 'px'; + skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl); + rowNode.appendChild(skeletonEl); + }); + }; + return DayGridMirrorRenderer; +}(DayGridEventRenderer)); + +var EMPTY_CELL_HTML = ''; +var DayGridFillRenderer = /** @class */ (function (_super) { + __extends(DayGridFillRenderer, _super); + function DayGridFillRenderer(dayGrid) { + var _this = _super.call(this) || this; + _this.fillSegTag = 'td'; // override the default tag name + _this.dayGrid = dayGrid; + return _this; + } + DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) { + // don't render timed background events + if (type === 'bgEvent') { + segs = segs.filter(function (seg) { + return seg.eventRange.def.allDay; + }); + } + _super.prototype.renderSegs.call(this, type, context, segs); + }; + DayGridFillRenderer.prototype.attachSegs = function (type, segs) { + var els = []; + var i; + var seg; + var skeletonEl; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + skeletonEl = this.renderFillRow(type, seg); + this.dayGrid.rowEls[seg.row].appendChild(skeletonEl); + els.push(skeletonEl); + } + return els; + }; + // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered. + DayGridFillRenderer.prototype.renderFillRow = function (type, seg) { + var dayGrid = this.dayGrid; + var isRtl = this.context.isRtl; + var colCnt = dayGrid.colCnt; + var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; + var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol; + var startCol = leftCol; + var endCol = rightCol + 1; + var className; + var skeletonEl; + var trEl; + if (type === 'businessHours') { + className = 'bgevent'; + } + else { + className = type.toLowerCase(); + } + skeletonEl = htmlToElement('
' + + '
' + + '
'); + trEl = skeletonEl.getElementsByTagName('tr')[0]; + if (startCol > 0) { + appendToElement(trEl, + // will create (startCol + 1) td's + new Array(startCol + 1).join(EMPTY_CELL_HTML)); + } + seg.el.colSpan = endCol - startCol; + trEl.appendChild(seg.el); + if (endCol < colCnt) { + appendToElement(trEl, + // will create (colCnt - endCol) td's + new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML)); + } + var introHtml = dayGrid.renderProps.renderIntroHtml(); + if (introHtml) { + if (isRtl) { + appendToElement(trEl, introHtml); + } + else { + prependToElement(trEl, introHtml); + } + } + return skeletonEl; + }; + return DayGridFillRenderer; +}(FillRenderer)); + +var DayTile = /** @class */ (function (_super) { + __extends(DayTile, _super); + function DayTile(el) { + var _this = _super.call(this, el) || this; + var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this); + var renderFrame = _this.renderFrame = memoizeRendering(_this._renderFrame); + _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]); + _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]); + _this.renderEventDrag = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]); + _this.renderEventResize = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]); + return _this; + } + DayTile.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { + el: this.el, + useEventCenter: false + }); + }; + DayTile.prototype.render = function (props, context) { + this.renderFrame(props.date); + this.renderFgEvents(context, props.fgSegs); + this.renderEventSelection(props.eventSelection); + this.renderEventDrag(props.eventDragInstances); + this.renderEventResize(props.eventResizeInstances); + }; + DayTile.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderFrame.unrender(); // should unrender everything else + this.context.calendar.unregisterInteractiveComponent(this); + }; + DayTile.prototype._renderFrame = function (date) { + var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options; + var title = dateEnv.format(date, createFormatter(options.dayPopoverFormat) // TODO: cache + ); + this.el.innerHTML = + '
' + + '' + + htmlEscape(title) + + '' + + '' + + '
' + + '
' + + '
' + + '
'; + this.segContainerEl = this.el.querySelector('.fc-event-container'); + }; + DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) { + var date = this.props.date; // HACK + if (positionLeft < elWidth && positionTop < elHeight) { + return { + component: this, + dateSpan: { + allDay: true, + range: { start: date, end: addDays(date, 1) } + }, + dayEl: this.el, + rect: { + left: 0, + top: 0, + right: elWidth, + bottom: elHeight + }, + layer: 1 + }; + } + }; + return DayTile; +}(DateComponent)); +var DayTileEventRenderer = /** @class */ (function (_super) { + __extends(DayTileEventRenderer, _super); + function DayTileEventRenderer(dayTile) { + var _this = _super.call(this) || this; + _this.dayTile = dayTile; + return _this; + } + DayTileEventRenderer.prototype.attachSegs = function (segs) { + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + this.dayTile.segContainerEl.appendChild(seg.el); + } + }; + DayTileEventRenderer.prototype.detachSegs = function (segs) { + for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) { + var seg = segs_2[_i]; + removeElement(seg.el); + } + }; + return DayTileEventRenderer; +}(SimpleDayGridEventRenderer)); + +var DayBgRow = /** @class */ (function () { + function DayBgRow(context) { + this.context = context; + } + DayBgRow.prototype.renderHtml = function (props) { + var parts = []; + if (props.renderIntroHtml) { + parts.push(props.renderIntroHtml()); + } + for (var _i = 0, _a = props.cells; _i < _a.length; _i++) { + var cell = _a[_i]; + parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs)); + } + if (!props.cells.length) { + parts.push(''); + } + if (this.context.options.dir === 'rtl') { + parts.reverse(); + } + return '' + parts.join('') + ''; + }; + return DayBgRow; +}()); +function renderCellHtml(date, dateProfile, context, otherAttrs) { + var dateEnv = context.dateEnv, theme = context.theme; + var isDateValid = rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow. + var classes = getDayClasses(date, dateProfile, context); + classes.unshift('fc-day', theme.getClass('widgetContent')); + return ''; +} + +var DAY_NUM_FORMAT = createFormatter({ day: 'numeric' }); +var WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' }); +var DayGrid = /** @class */ (function (_super) { + __extends(DayGrid, _super); + function DayGrid(el, renderProps) { + var _this = _super.call(this, el) || this; + _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid + _this.isCellSizesDirty = false; + _this.renderProps = renderProps; + var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this); + var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this); + _this.mirrorRenderer = new DayGridMirrorRenderer(_this); + var renderCells = _this.renderCells = memoizeRendering(_this._renderCells, _this._unrenderCells); + _this.renderBusinessHours = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]); + _this.renderDateSelection = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]); + _this.renderBgEvents = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]); + _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]); + _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]); + _this.renderEventDrag = memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]); + _this.renderEventResize = memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]); + return _this; + } + DayGrid.prototype.render = function (props, context) { + var cells = props.cells; + this.rowCnt = cells.length; + this.colCnt = cells[0].length; + this.renderCells(cells, props.isRigid); + this.renderBusinessHours(context, props.businessHourSegs); + this.renderDateSelection(context, props.dateSelectionSegs); + this.renderBgEvents(context, props.bgEventSegs); + this.renderFgEvents(context, props.fgEventSegs); + this.renderEventSelection(props.eventSelection); + this.renderEventDrag(props.eventDrag); + this.renderEventResize(props.eventResize); + if (this.segPopoverTile) { + this.updateSegPopoverTile(); + } + }; + DayGrid.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderCells.unrender(); // will unrender everything else + }; + DayGrid.prototype.getCellRange = function (row, col) { + var start = this.props.cells[row][col].date; + var end = addDays(start, 1); + return { start: start, end: end }; + }; + DayGrid.prototype.updateSegPopoverTile = function (date, segs) { + var ownProps = this.props; + this.segPopoverTile.receiveProps({ + date: date || this.segPopoverTile.props.date, + fgSegs: segs || this.segPopoverTile.props.fgSegs, + eventSelection: ownProps.eventSelection, + eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null, + eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null + }, this.context); + }; + /* Date Rendering + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype._renderCells = function (cells, isRigid) { + var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv; + var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt; + var html = ''; + var row; + var col; + for (row = 0; row < rowCnt; row++) { + html += this.renderDayRowHtml(row, isRigid); + } + this.el.innerHTML = html; + this.rowEls = findElements(this.el, '.fc-row'); + this.cellEls = findElements(this.el, '.fc-day, .fc-disabled-day'); + if (isRtl) { + this.cellEls.reverse(); + } + this.rowPositions = new PositionCache(this.el, this.rowEls, false, true // vertical + ); + this.colPositions = new PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row + true, false // horizontal + ); + // trigger dayRender with each cell's element + for (row = 0; row < rowCnt; row++) { + for (col = 0; col < colCnt; col++) { + calendar.publiclyTrigger('dayRender', [ + { + date: dateEnv.toDate(cells[row][col].date), + el: this.getCellEl(row, col), + view: view + } + ]); + } + } + this.isCellSizesDirty = true; + }; + DayGrid.prototype._unrenderCells = function () { + this.removeSegPopover(); + }; + // Generates the HTML for a single row, which is a div that wraps a table. + // `row` is the row number. + DayGrid.prototype.renderDayRowHtml = function (row, isRigid) { + var theme = this.context.theme; + var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')]; + if (isRigid) { + classes.push('fc-rigid'); + } + var bgRow = new DayBgRow(this.context); + return '' + + '
' + + '
' + + '' + + bgRow.renderHtml({ + cells: this.props.cells[row], + dateProfile: this.props.dateProfile, + renderIntroHtml: this.renderProps.renderBgIntroHtml + }) + + '
' + + '
' + + '
' + + '' + + (this.getIsNumbersVisible() ? + '' + + this.renderNumberTrHtml(row) + + '' : + '') + + '
' + + '
' + + '
'; + }; + DayGrid.prototype.getIsNumbersVisible = function () { + return this.getIsDayNumbersVisible() || + this.renderProps.cellWeekNumbersVisible || + this.renderProps.colWeekNumbersVisible; + }; + DayGrid.prototype.getIsDayNumbersVisible = function () { + return this.rowCnt > 1; + }; + /* Grid Number Rendering + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.renderNumberTrHtml = function (row) { + var isRtl = this.context.isRtl; + var intro = this.renderProps.renderNumberIntroHtml(row, this); + return '' + + '' + + (isRtl ? '' : intro) + + this.renderNumberCellsHtml(row) + + (isRtl ? intro : '') + + ''; + }; + DayGrid.prototype.renderNumberCellsHtml = function (row) { + var htmls = []; + var col; + var date; + for (col = 0; col < this.colCnt; col++) { + date = this.props.cells[row][col].date; + htmls.push(this.renderNumberCellHtml(date)); + } + if (this.context.isRtl) { + htmls.reverse(); + } + return htmls.join(''); + }; + // Generates the HTML for the s of the "number" row in the DayGrid's content skeleton. + // The number row will only exist if either day numbers or week numbers are turned on. + DayGrid.prototype.renderNumberCellHtml = function (date) { + var _a = this.context, dateEnv = _a.dateEnv, options = _a.options; + var html = ''; + var isDateValid = rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow. + var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid; + var classes; + var weekCalcFirstDow; + if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) { + // no numbers in day cell (week number must be along the side) + return ''; // will create an empty space above events :( + } + classes = getDayClasses(date, this.props.dateProfile, this.context); + classes.unshift('fc-day-top'); + if (this.renderProps.cellWeekNumbersVisible) { + weekCalcFirstDow = dateEnv.weekDow; + } + html += ''; + if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) { + html += buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML + ); + } + if (isDayNumberVisible) { + html += buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML + ); + } + html += ''; + return html; + }; + /* Sizing + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.updateSize = function (isResize) { + var calendar = this.context.calendar; + var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer; + if (isResize || + this.isCellSizesDirty || + calendar.isEventsUpdated // hack + ) { + this.buildPositionCaches(); + this.isCellSizesDirty = false; + } + fillRenderer.computeSizes(isResize); + eventRenderer.computeSizes(isResize); + mirrorRenderer.computeSizes(isResize); + fillRenderer.assignSizes(isResize); + eventRenderer.assignSizes(isResize); + mirrorRenderer.assignSizes(isResize); + }; + DayGrid.prototype.buildPositionCaches = function () { + this.buildColPositions(); + this.buildRowPositions(); + }; + DayGrid.prototype.buildColPositions = function () { + this.colPositions.build(); + }; + DayGrid.prototype.buildRowPositions = function () { + this.rowPositions.build(); + this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack + }; + /* Hit System + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.positionToHit = function (leftPosition, topPosition) { + var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions; + var col = colPositions.leftToIndex(leftPosition); + var row = rowPositions.topToIndex(topPosition); + if (row != null && col != null) { + return { + row: row, + col: col, + dateSpan: { + range: this.getCellRange(row, col), + allDay: true + }, + dayEl: this.getCellEl(row, col), + relativeRect: { + left: colPositions.lefts[col], + right: colPositions.rights[col], + top: rowPositions.tops[row], + bottom: rowPositions.bottoms[row] + } + }; + } + }; + /* Cell System + ------------------------------------------------------------------------------------------------------------------*/ + // FYI: the first column is the leftmost column, regardless of date + DayGrid.prototype.getCellEl = function (row, col) { + return this.cellEls[row * this.colCnt + col]; + }; + /* Event Drag Visualization + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype._renderEventDrag = function (state) { + if (state) { + this.eventRenderer.hideByHash(state.affectedInstances); + this.fillRenderer.renderSegs('highlight', this.context, state.segs); + } + }; + DayGrid.prototype._unrenderEventDrag = function (state) { + if (state) { + this.eventRenderer.showByHash(state.affectedInstances); + this.fillRenderer.unrender('highlight', this.context); + } + }; + /* Event Resize Visualization + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype._renderEventResize = function (state) { + if (state) { + this.eventRenderer.hideByHash(state.affectedInstances); + this.fillRenderer.renderSegs('highlight', this.context, state.segs); + this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg }); + } + }; + DayGrid.prototype._unrenderEventResize = function (state) { + if (state) { + this.eventRenderer.showByHash(state.affectedInstances); + this.fillRenderer.unrender('highlight', this.context); + this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg }); + } + }; + /* More+ Link Popover + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.removeSegPopover = function () { + if (this.segPopover) { + this.segPopover.hide(); // in handler, will call segPopover's removeElement + } + }; + // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid. + // `levelLimit` can be false (don't limit), a number, or true (should be computed). + DayGrid.prototype.limitRows = function (levelLimit) { + var rowStructs = this.eventRenderer.rowStructs || []; + var row; // row # + var rowLevelLimit; + for (row = 0; row < rowStructs.length; row++) { + this.unlimitRow(row); + if (!levelLimit) { + rowLevelLimit = false; + } + else if (typeof levelLimit === 'number') { + rowLevelLimit = levelLimit; + } + else { + rowLevelLimit = this.computeRowLevelLimit(row); + } + if (rowLevelLimit !== false) { + this.limitRow(row, rowLevelLimit); + } + } + }; + // Computes the number of levels a row will accomodate without going outside its bounds. + // Assumes the row is "rigid" (maintains a constant height regardless of what is inside). + // `row` is the row number. + DayGrid.prototype.computeRowLevelLimit = function (row) { + var rowEl = this.rowEls[row]; // the containing "fake" row div + var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport! + var trEls = findChildren(this.eventRenderer.rowStructs[row].tbodyEl); + var i; + var trEl; + // Reveal one level at a time and stop when we find one out of bounds + for (i = 0; i < trEls.length; i++) { + trEl = trEls[i]; + trEl.classList.remove('fc-limited'); // reset to original state (reveal) + if (trEl.getBoundingClientRect().bottom > rowBottom) { + return i; + } + } + return false; // should not limit at all + }; + // Limits the given grid row to the maximum number of levels and injects "more" links if necessary. + // `row` is the row number. + // `levelLimit` is a number for the maximum (inclusive) number of levels allowed. + DayGrid.prototype.limitRow = function (row, levelLimit) { + var _this = this; + var colCnt = this.colCnt; + var isRtl = this.context.isRtl; + var rowStruct = this.eventRenderer.rowStructs[row]; + var moreNodes = []; // array of "more" links and DOM nodes + var col = 0; // col #, left-to-right (not chronologically) + var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right + var cellMatrix; // a matrix (by level, then column) of all elements in the row + var limitedNodes; // array of temporarily hidden level and segment DOM nodes + var i; + var seg; + var segsBelow; // array of segment objects below `seg` in the current `col` + var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies + var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column) + var td; + var rowSpan; + var segMoreNodes; // array of "more" cells that will stand-in for the current seg's cell + var j; + var moreTd; + var moreWrap; + var moreLink; + // Iterates through empty level cells and places "more" links inside if need be + var emptyCellsUntil = function (endCol) { + while (col < endCol) { + segsBelow = _this.getCellSegs(row, col, levelLimit); + if (segsBelow.length) { + td = cellMatrix[levelLimit - 1][col]; + moreLink = _this.renderMoreLink(row, col, segsBelow); + moreWrap = createElement('div', null, moreLink); + td.appendChild(moreWrap); + moreNodes.push(moreWrap); + } + col++; + } + }; + if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit? + levelSegs = rowStruct.segLevels[levelLimit - 1]; + cellMatrix = rowStruct.cellMatrix; + limitedNodes = findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level elements past the limit + limitedNodes.forEach(function (node) { + node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array + }); + // iterate though segments in the last allowable level + for (i = 0; i < levelSegs.length; i++) { + seg = levelSegs[i]; + var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; + var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol; + emptyCellsUntil(leftCol); // process empty cells before the segment + // determine *all* segments below `seg` that occupy the same columns + colSegsBelow = []; + totalSegsBelow = 0; + while (col <= rightCol) { + segsBelow = this.getCellSegs(row, col, levelLimit); + colSegsBelow.push(segsBelow); + totalSegsBelow += segsBelow.length; + col++; + } + if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links? + td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell + rowSpan = td.rowSpan || 1; + segMoreNodes = []; + // make a replacement for each column the segment occupies. will be one for each colspan + for (j = 0; j < colSegsBelow.length; j++) { + moreTd = createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan }); + segsBelow = colSegsBelow[j]; + moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too + ); + moreWrap = createElement('div', null, moreLink); + moreTd.appendChild(moreWrap); + segMoreNodes.push(moreTd); + moreNodes.push(moreTd); + } + td.classList.add('fc-limited'); + insertAfterElement(td, segMoreNodes); + limitedNodes.push(td); + } + } + emptyCellsUntil(this.colCnt); // finish off the level + rowStruct.moreEls = moreNodes; // for easy undoing later + rowStruct.limitedEls = limitedNodes; // for easy undoing later + } + }; + // Reveals all levels and removes all "more"-related elements for a grid's row. + // `row` is a row number. + DayGrid.prototype.unlimitRow = function (row) { + var rowStruct = this.eventRenderer.rowStructs[row]; + if (rowStruct.moreEls) { + rowStruct.moreEls.forEach(removeElement); + rowStruct.moreEls = null; + } + if (rowStruct.limitedEls) { + rowStruct.limitedEls.forEach(function (limitedEl) { + limitedEl.classList.remove('fc-limited'); + }); + rowStruct.limitedEls = null; + } + }; + // Renders an element that represents hidden event element for a cell. + // Responsible for attaching click handler as well. + DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) { + var _this = this; + var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl; + var a = createElement('a', { className: 'fc-more' }); + a.innerText = this.getMoreLinkText(hiddenSegs.length); + a.addEventListener('click', function (ev) { + var clickOption = options.eventLimitClick; + var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system? + var date = _this.props.cells[row][_col].date; + var moreEl = ev.currentTarget; + var dayEl = _this.getCellEl(row, col); + var allSegs = _this.getCellSegs(row, col); + // rescope the segments to be within the cell's date + var reslicedAllSegs = _this.resliceDaySegs(allSegs, date); + var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date); + if (typeof clickOption === 'function') { + // the returned value can be an atomic option + clickOption = calendar.publiclyTrigger('eventLimitClick', [ + { + date: dateEnv.toDate(date), + allDay: true, + dayEl: dayEl, + moreEl: moreEl, + segs: reslicedAllSegs, + hiddenSegs: reslicedHiddenSegs, + jsEvent: ev, + view: view + } + ]); + } + if (clickOption === 'popover') { + _this.showSegPopover(row, col, moreEl, reslicedAllSegs); + } + else if (typeof clickOption === 'string') { // a view name + calendar.zoomTo(date, clickOption); + } + }); + return a; + }; + // Reveals the popover that displays all events within a cell + DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) { + var _this = this; + var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl; + var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system? + var moreWrap = moreLink.parentNode; // the
wrapper around the + var topEl; // the element we want to match the top coordinate of + var options; + if (this.rowCnt === 1) { + topEl = view.el; // will cause the popover to cover any sort of header + } + else { + topEl = this.rowEls[row]; // will align with top of row + } + options = { + className: 'fc-more-popover ' + theme.getClass('popover'), + parentEl: view.el, + top: computeRect(topEl).top, + autoHide: true, + content: function (el) { + _this.segPopoverTile = new DayTile(el); + _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs); + }, + hide: function () { + _this.segPopoverTile.destroy(); + _this.segPopoverTile = null; + _this.segPopover.destroy(); + _this.segPopover = null; + } + }; + // Determine horizontal coordinate. + // We use the moreWrap instead of the to avoid border confusion. + if (isRtl) { + options.right = computeRect(moreWrap).right + 1; // +1 to be over cell border + } + else { + options.left = computeRect(moreWrap).left - 1; // -1 to be over cell border + } + this.segPopover = new Popover(options); + this.segPopover.show(); + calendar.releaseAfterSizingTriggers(); // hack for eventPositioned + }; + // Given the events within an array of segment objects, reslice them to be in a single day + DayGrid.prototype.resliceDaySegs = function (segs, dayDate) { + var dayStart = dayDate; + var dayEnd = addDays(dayStart, 1); + var dayRange = { start: dayStart, end: dayEnd }; + var newSegs = []; + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + var eventRange = seg.eventRange; + var origRange = eventRange.range; + var slicedRange = intersectRanges(origRange, dayRange); + if (slicedRange) { + newSegs.push(__assign({}, seg, { eventRange: { + def: eventRange.def, + ui: __assign({}, eventRange.ui, { durationEditable: false }), + instance: eventRange.instance, + range: slicedRange + }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() })); + } + } + return newSegs; + }; + // Generates the text that should be inside a "more" link, given the number of events it represents + DayGrid.prototype.getMoreLinkText = function (num) { + var opt = this.context.options.eventLimitText; + if (typeof opt === 'function') { + return opt(num); + } + else { + return '+' + num + ' ' + opt; + } + }; + // Returns segments within a given cell. + // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs. + DayGrid.prototype.getCellSegs = function (row, col, startLevel) { + var segMatrix = this.eventRenderer.rowStructs[row].segMatrix; + var level = startLevel || 0; + var segs = []; + var seg; + while (level < segMatrix.length) { + seg = segMatrix[level][col]; + if (seg) { + segs.push(seg); + } + level++; + } + return segs; + }; + return DayGrid; +}(DateComponent)); + +var WEEK_NUM_FORMAT$1 = createFormatter({ week: 'numeric' }); +/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells. +----------------------------------------------------------------------------------------------------------------------*/ +// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting. +// It is responsible for managing width/height. +var AbstractDayGridView = /** @class */ (function (_super) { + __extends(AbstractDayGridView, _super); + function AbstractDayGridView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.processOptions = memoize(_this._processOptions); + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + /* Header Rendering + ------------------------------------------------------------------------------------------------------------------*/ + // Generates the HTML that will go before the day-of week header cells + _this.renderHeadIntroHtml = function () { + var _a = _this.context, theme = _a.theme, options = _a.options; + if (_this.colWeekNumbersVisible) { + return '' + + '' + + '' + // needed for matchCellWidths + htmlEscape(options.weekLabel) + + '' + + ''; + } + return ''; + }; + /* Day Grid Rendering + ------------------------------------------------------------------------------------------------------------------*/ + // Generates the HTML that will go before content-skeleton cells that display the day/week numbers + _this.renderDayGridNumberIntroHtml = function (row, dayGrid) { + var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv; + var weekStart = dayGrid.props.cells[row][0].date; + if (_this.colWeekNumbersVisible) { + return '' + + '' + + buildGotoAnchorHtml(// aside from link, important for matchCellWidths + options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML + ) + + ''; + } + return ''; + }; + // Generates the HTML that goes before the day bg cells for each day-row + _this.renderDayGridBgIntroHtml = function () { + var theme = _this.context.theme; + if (_this.colWeekNumbersVisible) { + return ''; + } + return ''; + }; + // Generates the HTML that goes before every other type of row generated by DayGrid. + // Affects mirror-skeleton and highlight-skeleton rows. + _this.renderDayGridIntroHtml = function () { + if (_this.colWeekNumbersVisible) { + return ''; + } + return ''; + }; + return _this; + } + AbstractDayGridView.prototype._processOptions = function (options) { + if (options.weekNumbers) { + if (options.weekNumbersWithinDays) { + this.cellWeekNumbersVisible = true; + this.colWeekNumbersVisible = false; + } + else { + this.cellWeekNumbersVisible = false; + this.colWeekNumbersVisible = true; + } + } + else { + this.colWeekNumbersVisible = false; + this.cellWeekNumbersVisible = false; + } + }; + AbstractDayGridView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); + this.processOptions(context.options); + this.renderSkeleton(context); + }; + AbstractDayGridView.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + }; + AbstractDayGridView.prototype._renderSkeleton = function (context) { + this.el.classList.add('fc-dayGrid-view'); + this.el.innerHTML = this.renderSkeletonHtml(); + this.scroller = new ScrollComponent('hidden', // overflow x + 'auto' // overflow y + ); + var dayGridContainerEl = this.scroller.el; + this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl); + dayGridContainerEl.classList.add('fc-day-grid-container'); + var dayGridEl = createElement('div', { className: 'fc-day-grid' }); + dayGridContainerEl.appendChild(dayGridEl); + this.dayGrid = new DayGrid(dayGridEl, { + renderNumberIntroHtml: this.renderDayGridNumberIntroHtml, + renderBgIntroHtml: this.renderDayGridBgIntroHtml, + renderIntroHtml: this.renderDayGridIntroHtml, + colWeekNumbersVisible: this.colWeekNumbersVisible, + cellWeekNumbersVisible: this.cellWeekNumbersVisible + }); + }; + AbstractDayGridView.prototype._unrenderSkeleton = function () { + this.el.classList.remove('fc-dayGrid-view'); + this.dayGrid.destroy(); + this.scroller.destroy(); + }; + // Builds the HTML skeleton for the view. + // The day-grid component will render inside of a container defined by this HTML. + AbstractDayGridView.prototype.renderSkeletonHtml = function () { + var _a = this.context, theme = _a.theme, options = _a.options; + return '' + + '' + + (options.columnHeader ? + '' + + '' + + '' + + '' + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + '
 
'; + }; + // Generates an HTML attribute string for setting the width of the week number column, if it is known + AbstractDayGridView.prototype.weekNumberStyleAttr = function () { + if (this.weekNumberWidth != null) { + return 'style="width:' + this.weekNumberWidth + 'px"'; + } + return ''; + }; + // Determines whether each row should have a constant height + AbstractDayGridView.prototype.hasRigidRows = function () { + var eventLimit = this.context.options.eventLimit; + return eventLimit && typeof eventLimit !== 'number'; + }; + /* Dimensions + ------------------------------------------------------------------------------------------------------------------*/ + AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) { + _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first + this.dayGrid.updateSize(isResize); + }; + // Refreshes the horizontal dimensions of the view + AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) { + var dayGrid = this.dayGrid; + var eventLimit = this.context.options.eventLimit; + var headRowEl = this.header ? this.header.el : null; // HACK + var scrollerHeight; + var scrollbarWidths; + // hack to give the view some height prior to dayGrid's columns being rendered + // TODO: separate setting height from scroller VS dayGrid. + if (!dayGrid.rowEls) { + if (!isAuto) { + scrollerHeight = this.computeScrollerHeight(viewHeight); + this.scroller.setHeight(scrollerHeight); + } + return; + } + if (this.colWeekNumbersVisible) { + // Make sure all week number cells running down the side have the same width. + this.weekNumberWidth = matchCellWidths(findElements(this.el, '.fc-week-number')); + } + // reset all heights to be natural + this.scroller.clear(); + if (headRowEl) { + uncompensateScroll(headRowEl); + } + dayGrid.removeSegPopover(); // kill the "more" popover if displayed + // is the event limit a constant level number? + if (eventLimit && typeof eventLimit === 'number') { + dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after + } + // distribute the height to the rows + // (viewHeight is a "recommended" value if isAuto) + scrollerHeight = this.computeScrollerHeight(viewHeight); + this.setGridHeight(scrollerHeight, isAuto); + // is the event limit dynamically calculated? + if (eventLimit && typeof eventLimit !== 'number') { + dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set + } + if (!isAuto) { // should we force dimensions of the scroll container? + this.scroller.setHeight(scrollerHeight); + scrollbarWidths = this.scroller.getScrollbarWidths(); + if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars? + if (headRowEl) { + compensateScroll(headRowEl, scrollbarWidths); + } + // doing the scrollbar compensation might have created text overflow which created more height. redo + scrollerHeight = this.computeScrollerHeight(viewHeight); + this.scroller.setHeight(scrollerHeight); + } + // guarantees the same scrollbar widths + this.scroller.lockOverflow(scrollbarWidths); + } + }; + // given a desired total height of the view, returns what the height of the scroller should be + AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) { + return viewHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }; + // Sets the height of just the DayGrid component in this view + AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) { + if (this.context.options.monthMode) { + // if auto, make the height of each row the height that it would be if there were 6 weeks + if (isAuto) { + height *= this.dayGrid.rowCnt / 6; + } + distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows + } + else { + if (isAuto) { + undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding + } + else { + distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows + } + } + }; + /* Scroll + ------------------------------------------------------------------------------------------------------------------*/ + AbstractDayGridView.prototype.computeDateScroll = function (duration) { + return { top: 0 }; + }; + AbstractDayGridView.prototype.queryDateScroll = function () { + return { top: this.scroller.getScrollTop() }; + }; + AbstractDayGridView.prototype.applyDateScroll = function (scroll) { + if (scroll.top !== undefined) { + this.scroller.setScrollTop(scroll.top); + } + }; + return AbstractDayGridView; +}(View)); +AbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator; + +var SimpleDayGrid = /** @class */ (function (_super) { + __extends(SimpleDayGrid, _super); + function SimpleDayGrid(dayGrid) { + var _this = _super.call(this, dayGrid.el) || this; + _this.slicer = new DayGridSlicer(); + _this.dayGrid = dayGrid; + return _this; + } + SimpleDayGrid.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el }); + }; + SimpleDayGrid.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.context.calendar.unregisterInteractiveComponent(this); + }; + SimpleDayGrid.prototype.render = function (props, context) { + var dayGrid = this.dayGrid; + var dateProfile = props.dateProfile, dayTable = props.dayTable; + dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context); + }; + SimpleDayGrid.prototype.buildPositionCaches = function () { + this.dayGrid.buildPositionCaches(); + }; + SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) { + var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop); + if (rawHit) { + return { + component: this.dayGrid, + dateSpan: rawHit.dateSpan, + dayEl: rawHit.dayEl, + rect: { + left: rawHit.relativeRect.left, + right: rawHit.relativeRect.right, + top: rawHit.relativeRect.top, + bottom: rawHit.relativeRect.bottom + }, + layer: 0 + }; + } + }; + return SimpleDayGrid; +}(DateComponent)); +var DayGridSlicer = /** @class */ (function (_super) { + __extends(DayGridSlicer, _super); + function DayGridSlicer() { + return _super !== null && _super.apply(this, arguments) || this; + } + DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) { + return dayTable.sliceRange(dateRange); + }; + return DayGridSlicer; +}(Slicer)); + +var DayGridView = /** @class */ (function (_super) { + __extends(DayGridView, _super); + function DayGridView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.buildDayTable = memoize(buildDayTable); + return _this; + } + DayGridView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton + var dateProfile = this.props.dateProfile; + var dayTable = this.dayTable = + this.buildDayTable(dateProfile, props.dateProfileGenerator); + if (this.header) { + this.header.receiveProps({ + dateProfile: dateProfile, + dates: dayTable.headerDates, + datesRepDistinctDays: dayTable.rowCnt === 1, + renderIntroHtml: this.renderHeadIntroHtml + }, context); + } + this.simpleDayGrid.receiveProps({ + dateProfile: dateProfile, + dayTable: dayTable, + businessHours: props.businessHours, + dateSelection: props.dateSelection, + eventStore: props.eventStore, + eventUiBases: props.eventUiBases, + eventSelection: props.eventSelection, + eventDrag: props.eventDrag, + eventResize: props.eventResize, + isRigid: this.hasRigidRows(), + nextDayThreshold: this.context.nextDayThreshold + }, context); + }; + DayGridView.prototype._renderSkeleton = function (context) { + _super.prototype._renderSkeleton.call(this, context); + if (context.options.columnHeader) { + this.header = new DayHeader(this.el.querySelector('.fc-head-container')); + } + this.simpleDayGrid = new SimpleDayGrid(this.dayGrid); + }; + DayGridView.prototype._unrenderSkeleton = function () { + _super.prototype._unrenderSkeleton.call(this); + if (this.header) { + this.header.destroy(); + } + this.simpleDayGrid.destroy(); + }; + return DayGridView; +}(AbstractDayGridView)); +function buildDayTable(dateProfile, dateProfileGenerator) { + var daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator); + return new DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit)); +} + +var main = createPlugin({ + defaultView: 'dayGridMonth', + views: { + dayGrid: DayGridView, + dayGridDay: { + type: 'dayGrid', + duration: { days: 1 } + }, + dayGridWeek: { + type: 'dayGrid', + duration: { weeks: 1 } + }, + dayGridMonth: { + type: 'dayGrid', + duration: { months: 1 }, + monthMode: true, + fixedWeekCount: true + } + } +}); + +export default main; +export { AbstractDayGridView, DayBgRow, DayGrid, DayGridSlicer, DayGridView, SimpleDayGrid, buildDayTable as buildBasicDayTable }; diff --git a/src/main/resources/static/packages/daygrid/main.js b/src/main/resources/static/packages/daygrid/main.js new file mode 100644 index 00000000..17344e14 --- /dev/null +++ b/src/main/resources/static/packages/daygrid/main.js @@ -0,0 +1,1668 @@ +/*! +FullCalendar Day Grid Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : + typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) : + (global = global || self, factory(global.FullCalendarDayGrid = {}, global.FullCalendar)); +}(this, function (exports, core) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + var DayGridDateProfileGenerator = /** @class */ (function (_super) { + __extends(DayGridDateProfileGenerator, _super); + function DayGridDateProfileGenerator() { + return _super !== null && _super.apply(this, arguments) || this; + } + // Computes the date range that will be rendered. + DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) { + var dateEnv = this.dateEnv; + var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay); + var start = renderRange.start; + var end = renderRange.end; + var endOfWeek; + // year and month views should be aligned with weeks. this is already done for week + if (/^(year|month)$/.test(currentRangeUnit)) { + start = dateEnv.startOfWeek(start); + // make end-of-week if not already + endOfWeek = dateEnv.startOfWeek(end); + if (endOfWeek.valueOf() !== end.valueOf()) { + end = core.addWeeks(endOfWeek, 1); + } + } + // ensure 6 weeks + if (this.options.monthMode && + this.options.fixedWeekCount) { + var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays + core.diffWeeks(start, end)); + end = core.addWeeks(end, 6 - rowCnt); + } + return { start: start, end: end }; + }; + return DayGridDateProfileGenerator; + }(core.DateProfileGenerator)); + + /* A rectangular panel that is absolutely positioned over other content + ------------------------------------------------------------------------------------------------------------------------ + Options: + - className (string) + - content (HTML string, element, or element array) + - parentEl + - top + - left + - right (the x coord of where the right edge should be. not a "CSS" right) + - autoHide (boolean) + - show (callback) + - hide (callback) + */ + var Popover = /** @class */ (function () { + function Popover(options) { + var _this = this; + this.isHidden = true; + this.margin = 10; // the space required between the popover and the edges of the scroll container + // Triggered when the user clicks *anywhere* in the document, for the autoHide feature + this.documentMousedown = function (ev) { + // only hide the popover if the click happened outside the popover + if (_this.el && !_this.el.contains(ev.target)) { + _this.hide(); + } + }; + this.options = options; + } + // Shows the popover on the specified position. Renders it if not already + Popover.prototype.show = function () { + if (this.isHidden) { + if (!this.el) { + this.render(); + } + this.el.style.display = ''; + this.position(); + this.isHidden = false; + this.trigger('show'); + } + }; + // Hides the popover, through CSS, but does not remove it from the DOM + Popover.prototype.hide = function () { + if (!this.isHidden) { + this.el.style.display = 'none'; + this.isHidden = true; + this.trigger('hide'); + } + }; + // Creates `this.el` and renders content inside of it + Popover.prototype.render = function () { + var _this = this; + var options = this.options; + var el = this.el = core.createElement('div', { + className: 'fc-popover ' + (options.className || ''), + style: { + top: '0', + left: '0' + } + }); + if (typeof options.content === 'function') { + options.content(el); + } + options.parentEl.appendChild(el); + // when a click happens on anything inside with a 'fc-close' className, hide the popover + core.listenBySelector(el, 'click', '.fc-close', function (ev) { + _this.hide(); + }); + if (options.autoHide) { + document.addEventListener('mousedown', this.documentMousedown); + } + }; + // Hides and unregisters any handlers + Popover.prototype.destroy = function () { + this.hide(); + if (this.el) { + core.removeElement(this.el); + this.el = null; + } + document.removeEventListener('mousedown', this.documentMousedown); + }; + // Positions the popover optimally, using the top/left/right options + Popover.prototype.position = function () { + var options = this.options; + var el = this.el; + var elDims = el.getBoundingClientRect(); // only used for width,height + var origin = core.computeRect(el.offsetParent); + var clippingRect = core.computeClippingRect(options.parentEl); + var top; // the "position" (not "offset") values for the popover + var left; // + // compute top and left + top = options.top || 0; + if (options.left !== undefined) { + left = options.left; + } + else if (options.right !== undefined) { + left = options.right - elDims.width; // derive the left value from the right value + } + else { + left = 0; + } + // constrain to the view port. if constrained by two edges, give precedence to top/left + top = Math.min(top, clippingRect.bottom - elDims.height - this.margin); + top = Math.max(top, clippingRect.top + this.margin); + left = Math.min(left, clippingRect.right - elDims.width - this.margin); + left = Math.max(left, clippingRect.left + this.margin); + core.applyStyle(el, { + top: top - origin.top, + left: left - origin.left + }); + }; + // Triggers a callback. Calls a function in the option hash of the same name. + // Arguments beyond the first `name` are forwarded on. + // TODO: better code reuse for this. Repeat code + // can kill this??? + Popover.prototype.trigger = function (name) { + if (this.options[name]) { + this.options[name].apply(this, Array.prototype.slice.call(arguments, 1)); + } + }; + return Popover; + }()); + + /* Event-rendering methods for the DayGrid class + ----------------------------------------------------------------------------------------------------------------------*/ + // "Simple" is bad a name. has nothing to do with SimpleDayGrid + var SimpleDayGridEventRenderer = /** @class */ (function (_super) { + __extends(SimpleDayGridEventRenderer, _super); + function SimpleDayGridEventRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + // Builds the HTML to be used for the default element for an individual segment + SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) { + var context = this.context; + var eventRange = seg.eventRange; + var eventDef = eventRange.def; + var eventUi = eventRange.ui; + var allDay = eventDef.allDay; + var isDraggable = core.computeEventDraggable(context, eventDef, eventUi); + var isResizableFromStart = allDay && seg.isStart && core.computeEventStartResizable(context, eventDef, eventUi); + var isResizableFromEnd = allDay && seg.isEnd && core.computeEventEndResizable(context, eventDef, eventUi); + var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo); + var skinCss = core.cssToStr(this.getSkinCss(eventUi)); + var timeHtml = ''; + var timeText; + var titleHtml; + classes.unshift('fc-day-grid-event', 'fc-h-event'); + // Only display a timed events time if it is the starting segment + if (seg.isStart) { + timeText = this.getTimeText(eventRange); + if (timeText) { + timeHtml = '' + core.htmlEscape(timeText) + ''; + } + } + titleHtml = + '' + + (core.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height + ''; + return '
' + + '
' + + (context.options.dir === 'rtl' ? + titleHtml + ' ' + timeHtml : // put a natural space in between + timeHtml + ' ' + titleHtml // + ) + + '
' + + (isResizableFromStart ? + '
' : + '') + + (isResizableFromEnd ? + '
' : + '') + + '
'; + }; + // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined + SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () { + return { + hour: 'numeric', + minute: '2-digit', + omitZeroMinute: true, + meridiem: 'narrow' + }; + }; + SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () { + return false; // TODO: somehow consider the originating DayGrid's column count + }; + return SimpleDayGridEventRenderer; + }(core.FgEventRenderer)); + + /* Event-rendering methods for the DayGrid class + ----------------------------------------------------------------------------------------------------------------------*/ + var DayGridEventRenderer = /** @class */ (function (_super) { + __extends(DayGridEventRenderer, _super); + function DayGridEventRenderer(dayGrid) { + var _this = _super.call(this) || this; + _this.dayGrid = dayGrid; + return _this; + } + // Renders the given foreground event segments onto the grid + DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) { + var rowStructs = this.rowStructs = this.renderSegRows(segs); + // append to each row's content skeleton + this.dayGrid.rowEls.forEach(function (rowNode, i) { + rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl); + }); + // removes the "more.." events popover + if (!mirrorInfo) { + this.dayGrid.removeSegPopover(); + } + }; + // Unrenders all currently rendered foreground event segments + DayGridEventRenderer.prototype.detachSegs = function () { + var rowStructs = this.rowStructs || []; + var rowStruct; + while ((rowStruct = rowStructs.pop())) { + core.removeElement(rowStruct.tbodyEl); + } + this.rowStructs = null; + }; + // Uses the given events array to generate elements that should be appended to each row's content skeleton. + // Returns an array of rowStruct objects (see the bottom of `renderSegRow`). + // PRECONDITION: each segment shoud already have a rendered and assigned `.el` + DayGridEventRenderer.prototype.renderSegRows = function (segs) { + var rowStructs = []; + var segRows; + var row; + segRows = this.groupSegRows(segs); // group into nested arrays + // iterate each row of segment groupings + for (row = 0; row < segRows.length; row++) { + rowStructs.push(this.renderSegRow(row, segRows[row])); + } + return rowStructs; + }; + // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains + // the segments. Returns object with a bunch of internal data about how the render was calculated. + // NOTE: modifies rowSegs + DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) { + var isRtl = this.context.isRtl; + var dayGrid = this.dayGrid; + var colCnt = dayGrid.colCnt; + var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels + var levelCnt = Math.max(1, segLevels.length); // ensure at least one level + var tbody = document.createElement('tbody'); + var segMatrix = []; // lookup for which segments are rendered into which level+col cells + var cellMatrix = []; // lookup for all elements of the level+col matrix + var loneCellMatrix = []; // lookup for elements that only take up a single column + var i; + var levelSegs; + var col; + var tr; + var j; + var seg; + var td; + // populates empty cells from the current column (`col`) to `endCol` + function emptyCellsUntil(endCol) { + while (col < endCol) { + // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell + td = (loneCellMatrix[i - 1] || [])[col]; + if (td) { + td.rowSpan = (td.rowSpan || 1) + 1; + } + else { + td = document.createElement('td'); + tr.appendChild(td); + } + cellMatrix[i][col] = td; + loneCellMatrix[i][col] = td; + col++; + } + } + for (i = 0; i < levelCnt; i++) { // iterate through all levels + levelSegs = segLevels[i]; + col = 0; + tr = document.createElement('tr'); + segMatrix.push([]); + cellMatrix.push([]); + loneCellMatrix.push([]); + // levelCnt might be 1 even though there are no actual levels. protect against this. + // this single empty row is useful for styling. + if (levelSegs) { + for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level + seg = levelSegs[j]; + var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; + var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol; + emptyCellsUntil(leftCol); + // create a container that occupies or more columns. append the event element. + td = core.createElement('td', { className: 'fc-event-container' }, seg.el); + if (leftCol !== rightCol) { + td.colSpan = rightCol - leftCol + 1; + } + else { // a single-column segment + loneCellMatrix[i][col] = td; + } + while (col <= rightCol) { + cellMatrix[i][col] = td; + segMatrix[i][col] = seg; + col++; + } + tr.appendChild(td); + } + } + emptyCellsUntil(colCnt); // finish off the row + var introHtml = dayGrid.renderProps.renderIntroHtml(); + if (introHtml) { + if (isRtl) { + core.appendToElement(tr, introHtml); + } + else { + core.prependToElement(tr, introHtml); + } + } + tbody.appendChild(tr); + } + return { + row: row, + tbodyEl: tbody, + cellMatrix: cellMatrix, + segMatrix: segMatrix, + segLevels: segLevels, + segs: rowSegs + }; + }; + // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels. + // NOTE: modifies segs + DayGridEventRenderer.prototype.buildSegLevels = function (segs) { + var isRtl = this.context.isRtl; + var colCnt = this.dayGrid.colCnt; + var levels = []; + var i; + var seg; + var j; + // Give preference to elements with certain criteria, so they have + // a chance to be closer to the top. + segs = this.sortEventSegs(segs); + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + // loop through levels, starting with the topmost, until the segment doesn't collide with other segments + for (j = 0; j < levels.length; j++) { + if (!isDaySegCollision(seg, levels[j])) { + break; + } + } + // `j` now holds the desired subrow index + seg.level = j; + seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only + seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only + ; + (levels[j] || (levels[j] = [])).push(seg); + } + // order segments left-to-right. very important if calendar is RTL + for (j = 0; j < levels.length; j++) { + levels[j].sort(compareDaySegCols); + } + return levels; + }; + // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row + DayGridEventRenderer.prototype.groupSegRows = function (segs) { + var segRows = []; + var i; + for (i = 0; i < this.dayGrid.rowCnt; i++) { + segRows.push([]); + } + for (i = 0; i < segs.length; i++) { + segRows[segs[i].row].push(segs[i]); + } + return segRows; + }; + // Computes a default `displayEventEnd` value if one is not expliclty defined + DayGridEventRenderer.prototype.computeDisplayEventEnd = function () { + return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day + }; + return DayGridEventRenderer; + }(SimpleDayGridEventRenderer)); + // Computes whether two segments' columns collide. They are assumed to be in the same row. + function isDaySegCollision(seg, otherSegs) { + var i; + var otherSeg; + for (i = 0; i < otherSegs.length; i++) { + otherSeg = otherSegs[i]; + if (otherSeg.firstCol <= seg.lastCol && + otherSeg.lastCol >= seg.firstCol) { + return true; + } + } + return false; + } + // A cmp function for determining the leftmost event + function compareDaySegCols(a, b) { + return a.leftCol - b.leftCol; + } + + var DayGridMirrorRenderer = /** @class */ (function (_super) { + __extends(DayGridMirrorRenderer, _super); + function DayGridMirrorRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) { + var sourceSeg = mirrorInfo.sourceSeg; + var rowStructs = this.rowStructs = this.renderSegRows(segs); + // inject each new event skeleton into each associated row + this.dayGrid.rowEls.forEach(function (rowNode, row) { + var skeletonEl = core.htmlToElement('
'); // will be absolutely positioned + var skeletonTopEl; + var skeletonTop; + // If there is an original segment, match the top position. Otherwise, put it at the row's top level + if (sourceSeg && sourceSeg.row === row) { + skeletonTopEl = sourceSeg.el; + } + else { + skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody'); + if (!skeletonTopEl) { // when no events + skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table'); + } + } + skeletonTop = skeletonTopEl.getBoundingClientRect().top - + rowNode.getBoundingClientRect().top; // the offsetParent origin + skeletonEl.style.top = skeletonTop + 'px'; + skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl); + rowNode.appendChild(skeletonEl); + }); + }; + return DayGridMirrorRenderer; + }(DayGridEventRenderer)); + + var EMPTY_CELL_HTML = ''; + var DayGridFillRenderer = /** @class */ (function (_super) { + __extends(DayGridFillRenderer, _super); + function DayGridFillRenderer(dayGrid) { + var _this = _super.call(this) || this; + _this.fillSegTag = 'td'; // override the default tag name + _this.dayGrid = dayGrid; + return _this; + } + DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) { + // don't render timed background events + if (type === 'bgEvent') { + segs = segs.filter(function (seg) { + return seg.eventRange.def.allDay; + }); + } + _super.prototype.renderSegs.call(this, type, context, segs); + }; + DayGridFillRenderer.prototype.attachSegs = function (type, segs) { + var els = []; + var i; + var seg; + var skeletonEl; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + skeletonEl = this.renderFillRow(type, seg); + this.dayGrid.rowEls[seg.row].appendChild(skeletonEl); + els.push(skeletonEl); + } + return els; + }; + // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered. + DayGridFillRenderer.prototype.renderFillRow = function (type, seg) { + var dayGrid = this.dayGrid; + var isRtl = this.context.isRtl; + var colCnt = dayGrid.colCnt; + var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; + var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol; + var startCol = leftCol; + var endCol = rightCol + 1; + var className; + var skeletonEl; + var trEl; + if (type === 'businessHours') { + className = 'bgevent'; + } + else { + className = type.toLowerCase(); + } + skeletonEl = core.htmlToElement('
' + + '
' + + '
'); + trEl = skeletonEl.getElementsByTagName('tr')[0]; + if (startCol > 0) { + core.appendToElement(trEl, + // will create (startCol + 1) td's + new Array(startCol + 1).join(EMPTY_CELL_HTML)); + } + seg.el.colSpan = endCol - startCol; + trEl.appendChild(seg.el); + if (endCol < colCnt) { + core.appendToElement(trEl, + // will create (colCnt - endCol) td's + new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML)); + } + var introHtml = dayGrid.renderProps.renderIntroHtml(); + if (introHtml) { + if (isRtl) { + core.appendToElement(trEl, introHtml); + } + else { + core.prependToElement(trEl, introHtml); + } + } + return skeletonEl; + }; + return DayGridFillRenderer; + }(core.FillRenderer)); + + var DayTile = /** @class */ (function (_super) { + __extends(DayTile, _super); + function DayTile(el) { + var _this = _super.call(this, el) || this; + var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this); + var renderFrame = _this.renderFrame = core.memoizeRendering(_this._renderFrame); + _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]); + _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]); + _this.renderEventDrag = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]); + _this.renderEventResize = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]); + return _this; + } + DayTile.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { + el: this.el, + useEventCenter: false + }); + }; + DayTile.prototype.render = function (props, context) { + this.renderFrame(props.date); + this.renderFgEvents(context, props.fgSegs); + this.renderEventSelection(props.eventSelection); + this.renderEventDrag(props.eventDragInstances); + this.renderEventResize(props.eventResizeInstances); + }; + DayTile.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderFrame.unrender(); // should unrender everything else + this.context.calendar.unregisterInteractiveComponent(this); + }; + DayTile.prototype._renderFrame = function (date) { + var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options; + var title = dateEnv.format(date, core.createFormatter(options.dayPopoverFormat) // TODO: cache + ); + this.el.innerHTML = + '
' + + '' + + core.htmlEscape(title) + + '' + + '' + + '
' + + '
' + + '
' + + '
'; + this.segContainerEl = this.el.querySelector('.fc-event-container'); + }; + DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) { + var date = this.props.date; // HACK + if (positionLeft < elWidth && positionTop < elHeight) { + return { + component: this, + dateSpan: { + allDay: true, + range: { start: date, end: core.addDays(date, 1) } + }, + dayEl: this.el, + rect: { + left: 0, + top: 0, + right: elWidth, + bottom: elHeight + }, + layer: 1 + }; + } + }; + return DayTile; + }(core.DateComponent)); + var DayTileEventRenderer = /** @class */ (function (_super) { + __extends(DayTileEventRenderer, _super); + function DayTileEventRenderer(dayTile) { + var _this = _super.call(this) || this; + _this.dayTile = dayTile; + return _this; + } + DayTileEventRenderer.prototype.attachSegs = function (segs) { + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + this.dayTile.segContainerEl.appendChild(seg.el); + } + }; + DayTileEventRenderer.prototype.detachSegs = function (segs) { + for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) { + var seg = segs_2[_i]; + core.removeElement(seg.el); + } + }; + return DayTileEventRenderer; + }(SimpleDayGridEventRenderer)); + + var DayBgRow = /** @class */ (function () { + function DayBgRow(context) { + this.context = context; + } + DayBgRow.prototype.renderHtml = function (props) { + var parts = []; + if (props.renderIntroHtml) { + parts.push(props.renderIntroHtml()); + } + for (var _i = 0, _a = props.cells; _i < _a.length; _i++) { + var cell = _a[_i]; + parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs)); + } + if (!props.cells.length) { + parts.push(''); + } + if (this.context.options.dir === 'rtl') { + parts.reverse(); + } + return '' + parts.join('') + ''; + }; + return DayBgRow; + }()); + function renderCellHtml(date, dateProfile, context, otherAttrs) { + var dateEnv = context.dateEnv, theme = context.theme; + var isDateValid = core.rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow. + var classes = core.getDayClasses(date, dateProfile, context); + classes.unshift('fc-day', theme.getClass('widgetContent')); + return ''; + } + + var DAY_NUM_FORMAT = core.createFormatter({ day: 'numeric' }); + var WEEK_NUM_FORMAT = core.createFormatter({ week: 'numeric' }); + var DayGrid = /** @class */ (function (_super) { + __extends(DayGrid, _super); + function DayGrid(el, renderProps) { + var _this = _super.call(this, el) || this; + _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid + _this.isCellSizesDirty = false; + _this.renderProps = renderProps; + var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this); + var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this); + _this.mirrorRenderer = new DayGridMirrorRenderer(_this); + var renderCells = _this.renderCells = core.memoizeRendering(_this._renderCells, _this._unrenderCells); + _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]); + _this.renderDateSelection = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]); + _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]); + _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]); + _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]); + _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]); + _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]); + return _this; + } + DayGrid.prototype.render = function (props, context) { + var cells = props.cells; + this.rowCnt = cells.length; + this.colCnt = cells[0].length; + this.renderCells(cells, props.isRigid); + this.renderBusinessHours(context, props.businessHourSegs); + this.renderDateSelection(context, props.dateSelectionSegs); + this.renderBgEvents(context, props.bgEventSegs); + this.renderFgEvents(context, props.fgEventSegs); + this.renderEventSelection(props.eventSelection); + this.renderEventDrag(props.eventDrag); + this.renderEventResize(props.eventResize); + if (this.segPopoverTile) { + this.updateSegPopoverTile(); + } + }; + DayGrid.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderCells.unrender(); // will unrender everything else + }; + DayGrid.prototype.getCellRange = function (row, col) { + var start = this.props.cells[row][col].date; + var end = core.addDays(start, 1); + return { start: start, end: end }; + }; + DayGrid.prototype.updateSegPopoverTile = function (date, segs) { + var ownProps = this.props; + this.segPopoverTile.receiveProps({ + date: date || this.segPopoverTile.props.date, + fgSegs: segs || this.segPopoverTile.props.fgSegs, + eventSelection: ownProps.eventSelection, + eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null, + eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null + }, this.context); + }; + /* Date Rendering + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype._renderCells = function (cells, isRigid) { + var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv; + var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt; + var html = ''; + var row; + var col; + for (row = 0; row < rowCnt; row++) { + html += this.renderDayRowHtml(row, isRigid); + } + this.el.innerHTML = html; + this.rowEls = core.findElements(this.el, '.fc-row'); + this.cellEls = core.findElements(this.el, '.fc-day, .fc-disabled-day'); + if (isRtl) { + this.cellEls.reverse(); + } + this.rowPositions = new core.PositionCache(this.el, this.rowEls, false, true // vertical + ); + this.colPositions = new core.PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row + true, false // horizontal + ); + // trigger dayRender with each cell's element + for (row = 0; row < rowCnt; row++) { + for (col = 0; col < colCnt; col++) { + calendar.publiclyTrigger('dayRender', [ + { + date: dateEnv.toDate(cells[row][col].date), + el: this.getCellEl(row, col), + view: view + } + ]); + } + } + this.isCellSizesDirty = true; + }; + DayGrid.prototype._unrenderCells = function () { + this.removeSegPopover(); + }; + // Generates the HTML for a single row, which is a div that wraps a table. + // `row` is the row number. + DayGrid.prototype.renderDayRowHtml = function (row, isRigid) { + var theme = this.context.theme; + var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')]; + if (isRigid) { + classes.push('fc-rigid'); + } + var bgRow = new DayBgRow(this.context); + return '' + + '
' + + '
' + + '' + + bgRow.renderHtml({ + cells: this.props.cells[row], + dateProfile: this.props.dateProfile, + renderIntroHtml: this.renderProps.renderBgIntroHtml + }) + + '
' + + '
' + + '
' + + '' + + (this.getIsNumbersVisible() ? + '' + + this.renderNumberTrHtml(row) + + '' : + '') + + '
' + + '
' + + '
'; + }; + DayGrid.prototype.getIsNumbersVisible = function () { + return this.getIsDayNumbersVisible() || + this.renderProps.cellWeekNumbersVisible || + this.renderProps.colWeekNumbersVisible; + }; + DayGrid.prototype.getIsDayNumbersVisible = function () { + return this.rowCnt > 1; + }; + /* Grid Number Rendering + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.renderNumberTrHtml = function (row) { + var isRtl = this.context.isRtl; + var intro = this.renderProps.renderNumberIntroHtml(row, this); + return '' + + '' + + (isRtl ? '' : intro) + + this.renderNumberCellsHtml(row) + + (isRtl ? intro : '') + + ''; + }; + DayGrid.prototype.renderNumberCellsHtml = function (row) { + var htmls = []; + var col; + var date; + for (col = 0; col < this.colCnt; col++) { + date = this.props.cells[row][col].date; + htmls.push(this.renderNumberCellHtml(date)); + } + if (this.context.isRtl) { + htmls.reverse(); + } + return htmls.join(''); + }; + // Generates the HTML for the s of the "number" row in the DayGrid's content skeleton. + // The number row will only exist if either day numbers or week numbers are turned on. + DayGrid.prototype.renderNumberCellHtml = function (date) { + var _a = this.context, dateEnv = _a.dateEnv, options = _a.options; + var html = ''; + var isDateValid = core.rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow. + var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid; + var classes; + var weekCalcFirstDow; + if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) { + // no numbers in day cell (week number must be along the side) + return ''; // will create an empty space above events :( + } + classes = core.getDayClasses(date, this.props.dateProfile, this.context); + classes.unshift('fc-day-top'); + if (this.renderProps.cellWeekNumbersVisible) { + weekCalcFirstDow = dateEnv.weekDow; + } + html += ''; + if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) { + html += core.buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML + ); + } + if (isDayNumberVisible) { + html += core.buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML + ); + } + html += ''; + return html; + }; + /* Sizing + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.updateSize = function (isResize) { + var calendar = this.context.calendar; + var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer; + if (isResize || + this.isCellSizesDirty || + calendar.isEventsUpdated // hack + ) { + this.buildPositionCaches(); + this.isCellSizesDirty = false; + } + fillRenderer.computeSizes(isResize); + eventRenderer.computeSizes(isResize); + mirrorRenderer.computeSizes(isResize); + fillRenderer.assignSizes(isResize); + eventRenderer.assignSizes(isResize); + mirrorRenderer.assignSizes(isResize); + }; + DayGrid.prototype.buildPositionCaches = function () { + this.buildColPositions(); + this.buildRowPositions(); + }; + DayGrid.prototype.buildColPositions = function () { + this.colPositions.build(); + }; + DayGrid.prototype.buildRowPositions = function () { + this.rowPositions.build(); + this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack + }; + /* Hit System + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.positionToHit = function (leftPosition, topPosition) { + var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions; + var col = colPositions.leftToIndex(leftPosition); + var row = rowPositions.topToIndex(topPosition); + if (row != null && col != null) { + return { + row: row, + col: col, + dateSpan: { + range: this.getCellRange(row, col), + allDay: true + }, + dayEl: this.getCellEl(row, col), + relativeRect: { + left: colPositions.lefts[col], + right: colPositions.rights[col], + top: rowPositions.tops[row], + bottom: rowPositions.bottoms[row] + } + }; + } + }; + /* Cell System + ------------------------------------------------------------------------------------------------------------------*/ + // FYI: the first column is the leftmost column, regardless of date + DayGrid.prototype.getCellEl = function (row, col) { + return this.cellEls[row * this.colCnt + col]; + }; + /* Event Drag Visualization + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype._renderEventDrag = function (state) { + if (state) { + this.eventRenderer.hideByHash(state.affectedInstances); + this.fillRenderer.renderSegs('highlight', this.context, state.segs); + } + }; + DayGrid.prototype._unrenderEventDrag = function (state) { + if (state) { + this.eventRenderer.showByHash(state.affectedInstances); + this.fillRenderer.unrender('highlight', this.context); + } + }; + /* Event Resize Visualization + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype._renderEventResize = function (state) { + if (state) { + this.eventRenderer.hideByHash(state.affectedInstances); + this.fillRenderer.renderSegs('highlight', this.context, state.segs); + this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg }); + } + }; + DayGrid.prototype._unrenderEventResize = function (state) { + if (state) { + this.eventRenderer.showByHash(state.affectedInstances); + this.fillRenderer.unrender('highlight', this.context); + this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg }); + } + }; + /* More+ Link Popover + ------------------------------------------------------------------------------------------------------------------*/ + DayGrid.prototype.removeSegPopover = function () { + if (this.segPopover) { + this.segPopover.hide(); // in handler, will call segPopover's removeElement + } + }; + // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid. + // `levelLimit` can be false (don't limit), a number, or true (should be computed). + DayGrid.prototype.limitRows = function (levelLimit) { + var rowStructs = this.eventRenderer.rowStructs || []; + var row; // row # + var rowLevelLimit; + for (row = 0; row < rowStructs.length; row++) { + this.unlimitRow(row); + if (!levelLimit) { + rowLevelLimit = false; + } + else if (typeof levelLimit === 'number') { + rowLevelLimit = levelLimit; + } + else { + rowLevelLimit = this.computeRowLevelLimit(row); + } + if (rowLevelLimit !== false) { + this.limitRow(row, rowLevelLimit); + } + } + }; + // Computes the number of levels a row will accomodate without going outside its bounds. + // Assumes the row is "rigid" (maintains a constant height regardless of what is inside). + // `row` is the row number. + DayGrid.prototype.computeRowLevelLimit = function (row) { + var rowEl = this.rowEls[row]; // the containing "fake" row div + var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport! + var trEls = core.findChildren(this.eventRenderer.rowStructs[row].tbodyEl); + var i; + var trEl; + // Reveal one level at a time and stop when we find one out of bounds + for (i = 0; i < trEls.length; i++) { + trEl = trEls[i]; + trEl.classList.remove('fc-limited'); // reset to original state (reveal) + if (trEl.getBoundingClientRect().bottom > rowBottom) { + return i; + } + } + return false; // should not limit at all + }; + // Limits the given grid row to the maximum number of levels and injects "more" links if necessary. + // `row` is the row number. + // `levelLimit` is a number for the maximum (inclusive) number of levels allowed. + DayGrid.prototype.limitRow = function (row, levelLimit) { + var _this = this; + var colCnt = this.colCnt; + var isRtl = this.context.isRtl; + var rowStruct = this.eventRenderer.rowStructs[row]; + var moreNodes = []; // array of "more" links and DOM nodes + var col = 0; // col #, left-to-right (not chronologically) + var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right + var cellMatrix; // a matrix (by level, then column) of all elements in the row + var limitedNodes; // array of temporarily hidden level and segment DOM nodes + var i; + var seg; + var segsBelow; // array of segment objects below `seg` in the current `col` + var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies + var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column) + var td; + var rowSpan; + var segMoreNodes; // array of "more" cells that will stand-in for the current seg's cell + var j; + var moreTd; + var moreWrap; + var moreLink; + // Iterates through empty level cells and places "more" links inside if need be + var emptyCellsUntil = function (endCol) { + while (col < endCol) { + segsBelow = _this.getCellSegs(row, col, levelLimit); + if (segsBelow.length) { + td = cellMatrix[levelLimit - 1][col]; + moreLink = _this.renderMoreLink(row, col, segsBelow); + moreWrap = core.createElement('div', null, moreLink); + td.appendChild(moreWrap); + moreNodes.push(moreWrap); + } + col++; + } + }; + if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit? + levelSegs = rowStruct.segLevels[levelLimit - 1]; + cellMatrix = rowStruct.cellMatrix; + limitedNodes = core.findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level elements past the limit + limitedNodes.forEach(function (node) { + node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array + }); + // iterate though segments in the last allowable level + for (i = 0; i < levelSegs.length; i++) { + seg = levelSegs[i]; + var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; + var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol; + emptyCellsUntil(leftCol); // process empty cells before the segment + // determine *all* segments below `seg` that occupy the same columns + colSegsBelow = []; + totalSegsBelow = 0; + while (col <= rightCol) { + segsBelow = this.getCellSegs(row, col, levelLimit); + colSegsBelow.push(segsBelow); + totalSegsBelow += segsBelow.length; + col++; + } + if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links? + td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell + rowSpan = td.rowSpan || 1; + segMoreNodes = []; + // make a replacement for each column the segment occupies. will be one for each colspan + for (j = 0; j < colSegsBelow.length; j++) { + moreTd = core.createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan }); + segsBelow = colSegsBelow[j]; + moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too + ); + moreWrap = core.createElement('div', null, moreLink); + moreTd.appendChild(moreWrap); + segMoreNodes.push(moreTd); + moreNodes.push(moreTd); + } + td.classList.add('fc-limited'); + core.insertAfterElement(td, segMoreNodes); + limitedNodes.push(td); + } + } + emptyCellsUntil(this.colCnt); // finish off the level + rowStruct.moreEls = moreNodes; // for easy undoing later + rowStruct.limitedEls = limitedNodes; // for easy undoing later + } + }; + // Reveals all levels and removes all "more"-related elements for a grid's row. + // `row` is a row number. + DayGrid.prototype.unlimitRow = function (row) { + var rowStruct = this.eventRenderer.rowStructs[row]; + if (rowStruct.moreEls) { + rowStruct.moreEls.forEach(core.removeElement); + rowStruct.moreEls = null; + } + if (rowStruct.limitedEls) { + rowStruct.limitedEls.forEach(function (limitedEl) { + limitedEl.classList.remove('fc-limited'); + }); + rowStruct.limitedEls = null; + } + }; + // Renders an element that represents hidden event element for a cell. + // Responsible for attaching click handler as well. + DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) { + var _this = this; + var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl; + var a = core.createElement('a', { className: 'fc-more' }); + a.innerText = this.getMoreLinkText(hiddenSegs.length); + a.addEventListener('click', function (ev) { + var clickOption = options.eventLimitClick; + var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system? + var date = _this.props.cells[row][_col].date; + var moreEl = ev.currentTarget; + var dayEl = _this.getCellEl(row, col); + var allSegs = _this.getCellSegs(row, col); + // rescope the segments to be within the cell's date + var reslicedAllSegs = _this.resliceDaySegs(allSegs, date); + var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date); + if (typeof clickOption === 'function') { + // the returned value can be an atomic option + clickOption = calendar.publiclyTrigger('eventLimitClick', [ + { + date: dateEnv.toDate(date), + allDay: true, + dayEl: dayEl, + moreEl: moreEl, + segs: reslicedAllSegs, + hiddenSegs: reslicedHiddenSegs, + jsEvent: ev, + view: view + } + ]); + } + if (clickOption === 'popover') { + _this.showSegPopover(row, col, moreEl, reslicedAllSegs); + } + else if (typeof clickOption === 'string') { // a view name + calendar.zoomTo(date, clickOption); + } + }); + return a; + }; + // Reveals the popover that displays all events within a cell + DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) { + var _this = this; + var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl; + var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system? + var moreWrap = moreLink.parentNode; // the
wrapper around the + var topEl; // the element we want to match the top coordinate of + var options; + if (this.rowCnt === 1) { + topEl = view.el; // will cause the popover to cover any sort of header + } + else { + topEl = this.rowEls[row]; // will align with top of row + } + options = { + className: 'fc-more-popover ' + theme.getClass('popover'), + parentEl: view.el, + top: core.computeRect(topEl).top, + autoHide: true, + content: function (el) { + _this.segPopoverTile = new DayTile(el); + _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs); + }, + hide: function () { + _this.segPopoverTile.destroy(); + _this.segPopoverTile = null; + _this.segPopover.destroy(); + _this.segPopover = null; + } + }; + // Determine horizontal coordinate. + // We use the moreWrap instead of the to avoid border confusion. + if (isRtl) { + options.right = core.computeRect(moreWrap).right + 1; // +1 to be over cell border + } + else { + options.left = core.computeRect(moreWrap).left - 1; // -1 to be over cell border + } + this.segPopover = new Popover(options); + this.segPopover.show(); + calendar.releaseAfterSizingTriggers(); // hack for eventPositioned + }; + // Given the events within an array of segment objects, reslice them to be in a single day + DayGrid.prototype.resliceDaySegs = function (segs, dayDate) { + var dayStart = dayDate; + var dayEnd = core.addDays(dayStart, 1); + var dayRange = { start: dayStart, end: dayEnd }; + var newSegs = []; + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + var eventRange = seg.eventRange; + var origRange = eventRange.range; + var slicedRange = core.intersectRanges(origRange, dayRange); + if (slicedRange) { + newSegs.push(__assign({}, seg, { eventRange: { + def: eventRange.def, + ui: __assign({}, eventRange.ui, { durationEditable: false }), + instance: eventRange.instance, + range: slicedRange + }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() })); + } + } + return newSegs; + }; + // Generates the text that should be inside a "more" link, given the number of events it represents + DayGrid.prototype.getMoreLinkText = function (num) { + var opt = this.context.options.eventLimitText; + if (typeof opt === 'function') { + return opt(num); + } + else { + return '+' + num + ' ' + opt; + } + }; + // Returns segments within a given cell. + // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs. + DayGrid.prototype.getCellSegs = function (row, col, startLevel) { + var segMatrix = this.eventRenderer.rowStructs[row].segMatrix; + var level = startLevel || 0; + var segs = []; + var seg; + while (level < segMatrix.length) { + seg = segMatrix[level][col]; + if (seg) { + segs.push(seg); + } + level++; + } + return segs; + }; + return DayGrid; + }(core.DateComponent)); + + var WEEK_NUM_FORMAT$1 = core.createFormatter({ week: 'numeric' }); + /* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells. + ----------------------------------------------------------------------------------------------------------------------*/ + // It is a manager for a DayGrid subcomponent, which does most of the heavy lifting. + // It is responsible for managing width/height. + var AbstractDayGridView = /** @class */ (function (_super) { + __extends(AbstractDayGridView, _super); + function AbstractDayGridView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.processOptions = core.memoize(_this._processOptions); + _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + /* Header Rendering + ------------------------------------------------------------------------------------------------------------------*/ + // Generates the HTML that will go before the day-of week header cells + _this.renderHeadIntroHtml = function () { + var _a = _this.context, theme = _a.theme, options = _a.options; + if (_this.colWeekNumbersVisible) { + return '' + + '' + + '' + // needed for matchCellWidths + core.htmlEscape(options.weekLabel) + + '' + + ''; + } + return ''; + }; + /* Day Grid Rendering + ------------------------------------------------------------------------------------------------------------------*/ + // Generates the HTML that will go before content-skeleton cells that display the day/week numbers + _this.renderDayGridNumberIntroHtml = function (row, dayGrid) { + var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv; + var weekStart = dayGrid.props.cells[row][0].date; + if (_this.colWeekNumbersVisible) { + return '' + + '' + + core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths + options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML + ) + + ''; + } + return ''; + }; + // Generates the HTML that goes before the day bg cells for each day-row + _this.renderDayGridBgIntroHtml = function () { + var theme = _this.context.theme; + if (_this.colWeekNumbersVisible) { + return ''; + } + return ''; + }; + // Generates the HTML that goes before every other type of row generated by DayGrid. + // Affects mirror-skeleton and highlight-skeleton rows. + _this.renderDayGridIntroHtml = function () { + if (_this.colWeekNumbersVisible) { + return ''; + } + return ''; + }; + return _this; + } + AbstractDayGridView.prototype._processOptions = function (options) { + if (options.weekNumbers) { + if (options.weekNumbersWithinDays) { + this.cellWeekNumbersVisible = true; + this.colWeekNumbersVisible = false; + } + else { + this.cellWeekNumbersVisible = false; + this.colWeekNumbersVisible = true; + } + } + else { + this.colWeekNumbersVisible = false; + this.cellWeekNumbersVisible = false; + } + }; + AbstractDayGridView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); + this.processOptions(context.options); + this.renderSkeleton(context); + }; + AbstractDayGridView.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + }; + AbstractDayGridView.prototype._renderSkeleton = function (context) { + this.el.classList.add('fc-dayGrid-view'); + this.el.innerHTML = this.renderSkeletonHtml(); + this.scroller = new core.ScrollComponent('hidden', // overflow x + 'auto' // overflow y + ); + var dayGridContainerEl = this.scroller.el; + this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl); + dayGridContainerEl.classList.add('fc-day-grid-container'); + var dayGridEl = core.createElement('div', { className: 'fc-day-grid' }); + dayGridContainerEl.appendChild(dayGridEl); + this.dayGrid = new DayGrid(dayGridEl, { + renderNumberIntroHtml: this.renderDayGridNumberIntroHtml, + renderBgIntroHtml: this.renderDayGridBgIntroHtml, + renderIntroHtml: this.renderDayGridIntroHtml, + colWeekNumbersVisible: this.colWeekNumbersVisible, + cellWeekNumbersVisible: this.cellWeekNumbersVisible + }); + }; + AbstractDayGridView.prototype._unrenderSkeleton = function () { + this.el.classList.remove('fc-dayGrid-view'); + this.dayGrid.destroy(); + this.scroller.destroy(); + }; + // Builds the HTML skeleton for the view. + // The day-grid component will render inside of a container defined by this HTML. + AbstractDayGridView.prototype.renderSkeletonHtml = function () { + var _a = this.context, theme = _a.theme, options = _a.options; + return '' + + '' + + (options.columnHeader ? + '' + + '' + + '' + + '' + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + '
 
'; + }; + // Generates an HTML attribute string for setting the width of the week number column, if it is known + AbstractDayGridView.prototype.weekNumberStyleAttr = function () { + if (this.weekNumberWidth != null) { + return 'style="width:' + this.weekNumberWidth + 'px"'; + } + return ''; + }; + // Determines whether each row should have a constant height + AbstractDayGridView.prototype.hasRigidRows = function () { + var eventLimit = this.context.options.eventLimit; + return eventLimit && typeof eventLimit !== 'number'; + }; + /* Dimensions + ------------------------------------------------------------------------------------------------------------------*/ + AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) { + _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first + this.dayGrid.updateSize(isResize); + }; + // Refreshes the horizontal dimensions of the view + AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) { + var dayGrid = this.dayGrid; + var eventLimit = this.context.options.eventLimit; + var headRowEl = this.header ? this.header.el : null; // HACK + var scrollerHeight; + var scrollbarWidths; + // hack to give the view some height prior to dayGrid's columns being rendered + // TODO: separate setting height from scroller VS dayGrid. + if (!dayGrid.rowEls) { + if (!isAuto) { + scrollerHeight = this.computeScrollerHeight(viewHeight); + this.scroller.setHeight(scrollerHeight); + } + return; + } + if (this.colWeekNumbersVisible) { + // Make sure all week number cells running down the side have the same width. + this.weekNumberWidth = core.matchCellWidths(core.findElements(this.el, '.fc-week-number')); + } + // reset all heights to be natural + this.scroller.clear(); + if (headRowEl) { + core.uncompensateScroll(headRowEl); + } + dayGrid.removeSegPopover(); // kill the "more" popover if displayed + // is the event limit a constant level number? + if (eventLimit && typeof eventLimit === 'number') { + dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after + } + // distribute the height to the rows + // (viewHeight is a "recommended" value if isAuto) + scrollerHeight = this.computeScrollerHeight(viewHeight); + this.setGridHeight(scrollerHeight, isAuto); + // is the event limit dynamically calculated? + if (eventLimit && typeof eventLimit !== 'number') { + dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set + } + if (!isAuto) { // should we force dimensions of the scroll container? + this.scroller.setHeight(scrollerHeight); + scrollbarWidths = this.scroller.getScrollbarWidths(); + if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars? + if (headRowEl) { + core.compensateScroll(headRowEl, scrollbarWidths); + } + // doing the scrollbar compensation might have created text overflow which created more height. redo + scrollerHeight = this.computeScrollerHeight(viewHeight); + this.scroller.setHeight(scrollerHeight); + } + // guarantees the same scrollbar widths + this.scroller.lockOverflow(scrollbarWidths); + } + }; + // given a desired total height of the view, returns what the height of the scroller should be + AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) { + return viewHeight - + core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }; + // Sets the height of just the DayGrid component in this view + AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) { + if (this.context.options.monthMode) { + // if auto, make the height of each row the height that it would be if there were 6 weeks + if (isAuto) { + height *= this.dayGrid.rowCnt / 6; + } + core.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows + } + else { + if (isAuto) { + core.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding + } + else { + core.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows + } + } + }; + /* Scroll + ------------------------------------------------------------------------------------------------------------------*/ + AbstractDayGridView.prototype.computeDateScroll = function (duration) { + return { top: 0 }; + }; + AbstractDayGridView.prototype.queryDateScroll = function () { + return { top: this.scroller.getScrollTop() }; + }; + AbstractDayGridView.prototype.applyDateScroll = function (scroll) { + if (scroll.top !== undefined) { + this.scroller.setScrollTop(scroll.top); + } + }; + return AbstractDayGridView; + }(core.View)); + AbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator; + + var SimpleDayGrid = /** @class */ (function (_super) { + __extends(SimpleDayGrid, _super); + function SimpleDayGrid(dayGrid) { + var _this = _super.call(this, dayGrid.el) || this; + _this.slicer = new DayGridSlicer(); + _this.dayGrid = dayGrid; + return _this; + } + SimpleDayGrid.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el }); + }; + SimpleDayGrid.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.context.calendar.unregisterInteractiveComponent(this); + }; + SimpleDayGrid.prototype.render = function (props, context) { + var dayGrid = this.dayGrid; + var dateProfile = props.dateProfile, dayTable = props.dayTable; + dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context); + }; + SimpleDayGrid.prototype.buildPositionCaches = function () { + this.dayGrid.buildPositionCaches(); + }; + SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) { + var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop); + if (rawHit) { + return { + component: this.dayGrid, + dateSpan: rawHit.dateSpan, + dayEl: rawHit.dayEl, + rect: { + left: rawHit.relativeRect.left, + right: rawHit.relativeRect.right, + top: rawHit.relativeRect.top, + bottom: rawHit.relativeRect.bottom + }, + layer: 0 + }; + } + }; + return SimpleDayGrid; + }(core.DateComponent)); + var DayGridSlicer = /** @class */ (function (_super) { + __extends(DayGridSlicer, _super); + function DayGridSlicer() { + return _super !== null && _super.apply(this, arguments) || this; + } + DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) { + return dayTable.sliceRange(dateRange); + }; + return DayGridSlicer; + }(core.Slicer)); + + var DayGridView = /** @class */ (function (_super) { + __extends(DayGridView, _super); + function DayGridView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.buildDayTable = core.memoize(buildDayTable); + return _this; + } + DayGridView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton + var dateProfile = this.props.dateProfile; + var dayTable = this.dayTable = + this.buildDayTable(dateProfile, props.dateProfileGenerator); + if (this.header) { + this.header.receiveProps({ + dateProfile: dateProfile, + dates: dayTable.headerDates, + datesRepDistinctDays: dayTable.rowCnt === 1, + renderIntroHtml: this.renderHeadIntroHtml + }, context); + } + this.simpleDayGrid.receiveProps({ + dateProfile: dateProfile, + dayTable: dayTable, + businessHours: props.businessHours, + dateSelection: props.dateSelection, + eventStore: props.eventStore, + eventUiBases: props.eventUiBases, + eventSelection: props.eventSelection, + eventDrag: props.eventDrag, + eventResize: props.eventResize, + isRigid: this.hasRigidRows(), + nextDayThreshold: this.context.nextDayThreshold + }, context); + }; + DayGridView.prototype._renderSkeleton = function (context) { + _super.prototype._renderSkeleton.call(this, context); + if (context.options.columnHeader) { + this.header = new core.DayHeader(this.el.querySelector('.fc-head-container')); + } + this.simpleDayGrid = new SimpleDayGrid(this.dayGrid); + }; + DayGridView.prototype._unrenderSkeleton = function () { + _super.prototype._unrenderSkeleton.call(this); + if (this.header) { + this.header.destroy(); + } + this.simpleDayGrid.destroy(); + }; + return DayGridView; + }(AbstractDayGridView)); + function buildDayTable(dateProfile, dateProfileGenerator) { + var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator); + return new core.DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit)); + } + + var main = core.createPlugin({ + defaultView: 'dayGridMonth', + views: { + dayGrid: DayGridView, + dayGridDay: { + type: 'dayGrid', + duration: { days: 1 } + }, + dayGridWeek: { + type: 'dayGrid', + duration: { weeks: 1 } + }, + dayGridMonth: { + type: 'dayGrid', + duration: { months: 1 }, + monthMode: true, + fixedWeekCount: true + } + } + }); + + exports.AbstractDayGridView = AbstractDayGridView; + exports.DayBgRow = DayBgRow; + exports.DayGrid = DayGrid; + exports.DayGridSlicer = DayGridSlicer; + exports.DayGridView = DayGridView; + exports.SimpleDayGrid = SimpleDayGrid; + exports.buildBasicDayTable = buildDayTable; + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/main/resources/static/packages/daygrid/main.js.map b/src/main/resources/static/packages/daygrid/main.js.map new file mode 100644 index 00000000..d89b7e7d --- /dev/null +++ b/src/main/resources/static/packages/daygrid/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sources":["../../../tmp/tsc-output/packages/daygrid/src/DayGridDateProfileGenerator.js","../../../tmp/tsc-output/packages/daygrid/src/Popover.js","../../../tmp/tsc-output/packages/daygrid/src/SimpleDayGridEventRenderer.js","../../../tmp/tsc-output/packages/daygrid/src/DayGridEventRenderer.js","../../../tmp/tsc-output/packages/daygrid/src/DayGridMirrorRenderer.js","../../../tmp/tsc-output/packages/daygrid/src/DayGridFillRenderer.js","../../../tmp/tsc-output/packages/daygrid/src/DayTile.js","../../../tmp/tsc-output/packages/daygrid/src/DayBgRow.js","../../../tmp/tsc-output/packages/daygrid/src/DayGrid.js","../../../tmp/tsc-output/packages/daygrid/src/AbstractDayGridView.js","../../../tmp/tsc-output/packages/daygrid/src/SimpleDayGrid.js","../../../tmp/tsc-output/packages/daygrid/src/DayGridView.js","../../../tmp/tsc-output/packages/daygrid/src/main.js"],"sourcesContent":["import * as tslib_1 from \"tslib\";\nimport { DateProfileGenerator, addWeeks, diffWeeks } from '@fullcalendar/core';\nvar DayGridDateProfileGenerator = /** @class */ (function (_super) {\n tslib_1.__extends(DayGridDateProfileGenerator, _super);\n function DayGridDateProfileGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // Computes the date range that will be rendered.\n DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {\n var dateEnv = this.dateEnv;\n var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);\n var start = renderRange.start;\n var end = renderRange.end;\n var endOfWeek;\n // year and month views should be aligned with weeks. this is already done for week\n if (/^(year|month)$/.test(currentRangeUnit)) {\n start = dateEnv.startOfWeek(start);\n // make end-of-week if not already\n endOfWeek = dateEnv.startOfWeek(end);\n if (endOfWeek.valueOf() !== end.valueOf()) {\n end = addWeeks(endOfWeek, 1);\n }\n }\n // ensure 6 weeks\n if (this.options.monthMode &&\n this.options.fixedWeekCount) {\n var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\n diffWeeks(start, end));\n end = addWeeks(end, 6 - rowCnt);\n }\n return { start: start, end: end };\n };\n return DayGridDateProfileGenerator;\n}(DateProfileGenerator));\nexport default DayGridDateProfileGenerator;\n","/* A rectangular panel that is absolutely positioned over other content\n------------------------------------------------------------------------------------------------------------------------\nOptions:\n - className (string)\n - content (HTML string, element, or element array)\n - parentEl\n - top\n - left\n - right (the x coord of where the right edge should be. not a \"CSS\" right)\n - autoHide (boolean)\n - show (callback)\n - hide (callback)\n*/\nimport { removeElement, createElement, applyStyle, listenBySelector, computeClippingRect, computeRect } from '@fullcalendar/core';\nvar Popover = /** @class */ (function () {\n function Popover(options) {\n var _this = this;\n this.isHidden = true;\n this.margin = 10; // the space required between the popover and the edges of the scroll container\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n this.documentMousedown = function (ev) {\n // only hide the popover if the click happened outside the popover\n if (_this.el && !_this.el.contains(ev.target)) {\n _this.hide();\n }\n };\n this.options = options;\n }\n // Shows the popover on the specified position. Renders it if not already\n Popover.prototype.show = function () {\n if (this.isHidden) {\n if (!this.el) {\n this.render();\n }\n this.el.style.display = '';\n this.position();\n this.isHidden = false;\n this.trigger('show');\n }\n };\n // Hides the popover, through CSS, but does not remove it from the DOM\n Popover.prototype.hide = function () {\n if (!this.isHidden) {\n this.el.style.display = 'none';\n this.isHidden = true;\n this.trigger('hide');\n }\n };\n // Creates `this.el` and renders content inside of it\n Popover.prototype.render = function () {\n var _this = this;\n var options = this.options;\n var el = this.el = createElement('div', {\n className: 'fc-popover ' + (options.className || ''),\n style: {\n top: '0',\n left: '0'\n }\n });\n if (typeof options.content === 'function') {\n options.content(el);\n }\n options.parentEl.appendChild(el);\n // when a click happens on anything inside with a 'fc-close' className, hide the popover\n listenBySelector(el, 'click', '.fc-close', function (ev) {\n _this.hide();\n });\n if (options.autoHide) {\n document.addEventListener('mousedown', this.documentMousedown);\n }\n };\n // Hides and unregisters any handlers\n Popover.prototype.destroy = function () {\n this.hide();\n if (this.el) {\n removeElement(this.el);\n this.el = null;\n }\n document.removeEventListener('mousedown', this.documentMousedown);\n };\n // Positions the popover optimally, using the top/left/right options\n Popover.prototype.position = function () {\n var options = this.options;\n var el = this.el;\n var elDims = el.getBoundingClientRect(); // only used for width,height\n var origin = computeRect(el.offsetParent);\n var clippingRect = computeClippingRect(options.parentEl);\n var top; // the \"position\" (not \"offset\") values for the popover\n var left; //\n // compute top and left\n top = options.top || 0;\n if (options.left !== undefined) {\n left = options.left;\n }\n else if (options.right !== undefined) {\n left = options.right - elDims.width; // derive the left value from the right value\n }\n else {\n left = 0;\n }\n // constrain to the view port. if constrained by two edges, give precedence to top/left\n top = Math.min(top, clippingRect.bottom - elDims.height - this.margin);\n top = Math.max(top, clippingRect.top + this.margin);\n left = Math.min(left, clippingRect.right - elDims.width - this.margin);\n left = Math.max(left, clippingRect.left + this.margin);\n applyStyle(el, {\n top: top - origin.top,\n left: left - origin.left\n });\n };\n // Triggers a callback. Calls a function in the option hash of the same name.\n // Arguments beyond the first `name` are forwarded on.\n // TODO: better code reuse for this. Repeat code\n // can kill this???\n Popover.prototype.trigger = function (name) {\n if (this.options[name]) {\n this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n };\n return Popover;\n}());\nexport default Popover;\n","import * as tslib_1 from \"tslib\";\nimport { htmlEscape, cssToStr, FgEventRenderer, computeEventDraggable, computeEventStartResizable, computeEventEndResizable } from '@fullcalendar/core';\n/* Event-rendering methods for the DayGrid class\n----------------------------------------------------------------------------------------------------------------------*/\n// \"Simple\" is bad a name. has nothing to do with SimpleDayGrid\nvar SimpleDayGridEventRenderer = /** @class */ (function (_super) {\n tslib_1.__extends(SimpleDayGridEventRenderer, _super);\n function SimpleDayGridEventRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // Builds the HTML to be used for the default element for an individual segment\n SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {\n var context = this.context;\n var eventRange = seg.eventRange;\n var eventDef = eventRange.def;\n var eventUi = eventRange.ui;\n var allDay = eventDef.allDay;\n var isDraggable = computeEventDraggable(context, eventDef, eventUi);\n var isResizableFromStart = allDay && seg.isStart && computeEventStartResizable(context, eventDef, eventUi);\n var isResizableFromEnd = allDay && seg.isEnd && computeEventEndResizable(context, eventDef, eventUi);\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);\n var skinCss = cssToStr(this.getSkinCss(eventUi));\n var timeHtml = '';\n var timeText;\n var titleHtml;\n classes.unshift('fc-day-grid-event', 'fc-h-event');\n // Only display a timed events time if it is the starting segment\n if (seg.isStart) {\n timeText = this.getTimeText(eventRange);\n if (timeText) {\n timeHtml = '' + htmlEscape(timeText) + '';\n }\n }\n titleHtml =\n '' +\n (htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height\n '';\n return '
' +\n '
' +\n (context.options.dir === 'rtl' ?\n titleHtml + ' ' + timeHtml : // put a natural space in between\n timeHtml + ' ' + titleHtml //\n ) +\n '
' +\n (isResizableFromStart ?\n '
' :\n '') +\n (isResizableFromEnd ?\n '
' :\n '') +\n '
';\n };\n // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined\n SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () {\n return {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'narrow'\n };\n };\n SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n return false; // TODO: somehow consider the originating DayGrid's column count\n };\n return SimpleDayGridEventRenderer;\n}(FgEventRenderer));\nexport default SimpleDayGridEventRenderer;\n","import * as tslib_1 from \"tslib\";\nimport { createElement, removeElement, appendToElement, prependToElement } from '@fullcalendar/core';\nimport SimpleDayGridEventRenderer from './SimpleDayGridEventRenderer';\n/* Event-rendering methods for the DayGrid class\n----------------------------------------------------------------------------------------------------------------------*/\nvar DayGridEventRenderer = /** @class */ (function (_super) {\n tslib_1.__extends(DayGridEventRenderer, _super);\n function DayGridEventRenderer(dayGrid) {\n var _this = _super.call(this) || this;\n _this.dayGrid = dayGrid;\n return _this;\n }\n // Renders the given foreground event segments onto the grid\n DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {\n var rowStructs = this.rowStructs = this.renderSegRows(segs);\n // append to each row's content skeleton\n this.dayGrid.rowEls.forEach(function (rowNode, i) {\n rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl);\n });\n // removes the \"more..\" events popover\n if (!mirrorInfo) {\n this.dayGrid.removeSegPopover();\n }\n };\n // Unrenders all currently rendered foreground event segments\n DayGridEventRenderer.prototype.detachSegs = function () {\n var rowStructs = this.rowStructs || [];\n var rowStruct;\n while ((rowStruct = rowStructs.pop())) {\n removeElement(rowStruct.tbodyEl);\n }\n this.rowStructs = null;\n };\n // Uses the given events array to generate elements that should be appended to each row's content skeleton.\n // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\n // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\n DayGridEventRenderer.prototype.renderSegRows = function (segs) {\n var rowStructs = [];\n var segRows;\n var row;\n segRows = this.groupSegRows(segs); // group into nested arrays\n // iterate each row of segment groupings\n for (row = 0; row < segRows.length; row++) {\n rowStructs.push(this.renderSegRow(row, segRows[row]));\n }\n return rowStructs;\n };\n // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains\n // the segments. Returns object with a bunch of internal data about how the render was calculated.\n // NOTE: modifies rowSegs\n DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\n var isRtl = this.context.isRtl;\n var dayGrid = this.dayGrid;\n var colCnt = dayGrid.colCnt;\n var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\n var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\n var tbody = document.createElement('tbody');\n var segMatrix = []; // lookup for which segments are rendered into which level+col cells\n var cellMatrix = []; // lookup for all elements of the level+col matrix\n var loneCellMatrix = []; // lookup for elements that only take up a single column\n var i;\n var levelSegs;\n var col;\n var tr;\n var j;\n var seg;\n var td;\n // populates empty cells from the current column (`col`) to `endCol`\n function emptyCellsUntil(endCol) {\n while (col < endCol) {\n // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\n td = (loneCellMatrix[i - 1] || [])[col];\n if (td) {\n td.rowSpan = (td.rowSpan || 1) + 1;\n }\n else {\n td = document.createElement('td');\n tr.appendChild(td);\n }\n cellMatrix[i][col] = td;\n loneCellMatrix[i][col] = td;\n col++;\n }\n }\n for (i = 0; i < levelCnt; i++) { // iterate through all levels\n levelSegs = segLevels[i];\n col = 0;\n tr = document.createElement('tr');\n segMatrix.push([]);\n cellMatrix.push([]);\n loneCellMatrix.push([]);\n // levelCnt might be 1 even though there are no actual levels. protect against this.\n // this single empty row is useful for styling.\n if (levelSegs) {\n for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\n seg = levelSegs[j];\n var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;\n var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;\n emptyCellsUntil(leftCol);\n // create a container that occupies or more columns. append the event element.\n td = createElement('td', { className: 'fc-event-container' }, seg.el);\n if (leftCol !== rightCol) {\n td.colSpan = rightCol - leftCol + 1;\n }\n else { // a single-column segment\n loneCellMatrix[i][col] = td;\n }\n while (col <= rightCol) {\n cellMatrix[i][col] = td;\n segMatrix[i][col] = seg;\n col++;\n }\n tr.appendChild(td);\n }\n }\n emptyCellsUntil(colCnt); // finish off the row\n var introHtml = dayGrid.renderProps.renderIntroHtml();\n if (introHtml) {\n if (isRtl) {\n appendToElement(tr, introHtml);\n }\n else {\n prependToElement(tr, introHtml);\n }\n }\n tbody.appendChild(tr);\n }\n return {\n row: row,\n tbodyEl: tbody,\n cellMatrix: cellMatrix,\n segMatrix: segMatrix,\n segLevels: segLevels,\n segs: rowSegs\n };\n };\n // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\n // NOTE: modifies segs\n DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\n var isRtl = this.context.isRtl;\n var colCnt = this.dayGrid.colCnt;\n var levels = [];\n var i;\n var seg;\n var j;\n // Give preference to elements with certain criteria, so they have\n // a chance to be closer to the top.\n segs = this.sortEventSegs(segs);\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\n for (j = 0; j < levels.length; j++) {\n if (!isDaySegCollision(seg, levels[j])) {\n break;\n }\n }\n // `j` now holds the desired subrow index\n seg.level = j;\n seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only\n seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only\n ;\n (levels[j] || (levels[j] = [])).push(seg);\n }\n // order segments left-to-right. very important if calendar is RTL\n for (j = 0; j < levels.length; j++) {\n levels[j].sort(compareDaySegCols);\n }\n return levels;\n };\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\n DayGridEventRenderer.prototype.groupSegRows = function (segs) {\n var segRows = [];\n var i;\n for (i = 0; i < this.dayGrid.rowCnt; i++) {\n segRows.push([]);\n }\n for (i = 0; i < segs.length; i++) {\n segRows[segs[i].row].push(segs[i]);\n }\n return segRows;\n };\n // Computes a default `displayEventEnd` value if one is not expliclty defined\n DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\n };\n return DayGridEventRenderer;\n}(SimpleDayGridEventRenderer));\nexport default DayGridEventRenderer;\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\nfunction isDaySegCollision(seg, otherSegs) {\n var i;\n var otherSeg;\n for (i = 0; i < otherSegs.length; i++) {\n otherSeg = otherSegs[i];\n if (otherSeg.firstCol <= seg.lastCol &&\n otherSeg.lastCol >= seg.firstCol) {\n return true;\n }\n }\n return false;\n}\n// A cmp function for determining the leftmost event\nfunction compareDaySegCols(a, b) {\n return a.leftCol - b.leftCol;\n}\n","import * as tslib_1 from \"tslib\";\nimport { htmlToElement } from '@fullcalendar/core';\nimport DayGridEventRenderer from './DayGridEventRenderer';\nvar DayGridMirrorRenderer = /** @class */ (function (_super) {\n tslib_1.__extends(DayGridMirrorRenderer, _super);\n function DayGridMirrorRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {\n var sourceSeg = mirrorInfo.sourceSeg;\n var rowStructs = this.rowStructs = this.renderSegRows(segs);\n // inject each new event skeleton into each associated row\n this.dayGrid.rowEls.forEach(function (rowNode, row) {\n var skeletonEl = htmlToElement('
'); // will be absolutely positioned\n var skeletonTopEl;\n var skeletonTop;\n // If there is an original segment, match the top position. Otherwise, put it at the row's top level\n if (sourceSeg && sourceSeg.row === row) {\n skeletonTopEl = sourceSeg.el;\n }\n else {\n skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody');\n if (!skeletonTopEl) { // when no events\n skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table');\n }\n }\n skeletonTop = skeletonTopEl.getBoundingClientRect().top -\n rowNode.getBoundingClientRect().top; // the offsetParent origin\n skeletonEl.style.top = skeletonTop + 'px';\n skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl);\n rowNode.appendChild(skeletonEl);\n });\n };\n return DayGridMirrorRenderer;\n}(DayGridEventRenderer));\nexport default DayGridMirrorRenderer;\n","import * as tslib_1 from \"tslib\";\nimport { htmlToElement, appendToElement, prependToElement, FillRenderer } from '@fullcalendar/core';\nvar EMPTY_CELL_HTML = '';\nvar DayGridFillRenderer = /** @class */ (function (_super) {\n tslib_1.__extends(DayGridFillRenderer, _super);\n function DayGridFillRenderer(dayGrid) {\n var _this = _super.call(this) || this;\n _this.fillSegTag = 'td'; // override the default tag name\n _this.dayGrid = dayGrid;\n return _this;\n }\n DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) {\n // don't render timed background events\n if (type === 'bgEvent') {\n segs = segs.filter(function (seg) {\n return seg.eventRange.def.allDay;\n });\n }\n _super.prototype.renderSegs.call(this, type, context, segs);\n };\n DayGridFillRenderer.prototype.attachSegs = function (type, segs) {\n var els = [];\n var i;\n var seg;\n var skeletonEl;\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n skeletonEl = this.renderFillRow(type, seg);\n this.dayGrid.rowEls[seg.row].appendChild(skeletonEl);\n els.push(skeletonEl);\n }\n return els;\n };\n // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\n DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\n var dayGrid = this.dayGrid;\n var isRtl = this.context.isRtl;\n var colCnt = dayGrid.colCnt;\n var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;\n var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;\n var startCol = leftCol;\n var endCol = rightCol + 1;\n var className;\n var skeletonEl;\n var trEl;\n if (type === 'businessHours') {\n className = 'bgevent';\n }\n else {\n className = type.toLowerCase();\n }\n skeletonEl = htmlToElement('
' +\n '
' +\n '
');\n trEl = skeletonEl.getElementsByTagName('tr')[0];\n if (startCol > 0) {\n appendToElement(trEl, \n // will create (startCol + 1) td's\n new Array(startCol + 1).join(EMPTY_CELL_HTML));\n }\n seg.el.colSpan = endCol - startCol;\n trEl.appendChild(seg.el);\n if (endCol < colCnt) {\n appendToElement(trEl, \n // will create (colCnt - endCol) td's\n new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML));\n }\n var introHtml = dayGrid.renderProps.renderIntroHtml();\n if (introHtml) {\n if (isRtl) {\n appendToElement(trEl, introHtml);\n }\n else {\n prependToElement(trEl, introHtml);\n }\n }\n return skeletonEl;\n };\n return DayGridFillRenderer;\n}(FillRenderer));\nexport default DayGridFillRenderer;\n","import * as tslib_1 from \"tslib\";\nimport { DateComponent, htmlEscape, createFormatter, addDays, removeElement, memoizeRendering } from '@fullcalendar/core';\nimport SimpleDayGridEventRenderer from './SimpleDayGridEventRenderer';\nvar DayTile = /** @class */ (function (_super) {\n tslib_1.__extends(DayTile, _super);\n function DayTile(el) {\n var _this = _super.call(this, el) || this;\n var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this);\n var renderFrame = _this.renderFrame = memoizeRendering(_this._renderFrame);\n _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]);\n _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);\n _this.renderEventDrag = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);\n _this.renderEventResize = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);\n return _this;\n }\n DayTile.prototype.firstContext = function (context) {\n context.calendar.registerInteractiveComponent(this, {\n el: this.el,\n useEventCenter: false\n });\n };\n DayTile.prototype.render = function (props, context) {\n this.renderFrame(props.date);\n this.renderFgEvents(context, props.fgSegs);\n this.renderEventSelection(props.eventSelection);\n this.renderEventDrag(props.eventDragInstances);\n this.renderEventResize(props.eventResizeInstances);\n };\n DayTile.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderFrame.unrender(); // should unrender everything else\n this.context.calendar.unregisterInteractiveComponent(this);\n };\n DayTile.prototype._renderFrame = function (date) {\n var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;\n var title = dateEnv.format(date, createFormatter(options.dayPopoverFormat) // TODO: cache\n );\n this.el.innerHTML =\n '
' +\n '' +\n htmlEscape(title) +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n '
';\n this.segContainerEl = this.el.querySelector('.fc-event-container');\n };\n DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {\n var date = this.props.date; // HACK\n if (positionLeft < elWidth && positionTop < elHeight) {\n return {\n component: this,\n dateSpan: {\n allDay: true,\n range: { start: date, end: addDays(date, 1) }\n },\n dayEl: this.el,\n rect: {\n left: 0,\n top: 0,\n right: elWidth,\n bottom: elHeight\n },\n layer: 1\n };\n }\n };\n return DayTile;\n}(DateComponent));\nexport default DayTile;\nvar DayTileEventRenderer = /** @class */ (function (_super) {\n tslib_1.__extends(DayTileEventRenderer, _super);\n function DayTileEventRenderer(dayTile) {\n var _this = _super.call(this) || this;\n _this.dayTile = dayTile;\n return _this;\n }\n DayTileEventRenderer.prototype.attachSegs = function (segs) {\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n this.dayTile.segContainerEl.appendChild(seg.el);\n }\n };\n DayTileEventRenderer.prototype.detachSegs = function (segs) {\n for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {\n var seg = segs_2[_i];\n removeElement(seg.el);\n }\n };\n return DayTileEventRenderer;\n}(SimpleDayGridEventRenderer));\nexport { DayTileEventRenderer };\n","import { getDayClasses, rangeContainsMarker } from '@fullcalendar/core';\nvar DayBgRow = /** @class */ (function () {\n function DayBgRow(context) {\n this.context = context;\n }\n DayBgRow.prototype.renderHtml = function (props) {\n var parts = [];\n if (props.renderIntroHtml) {\n parts.push(props.renderIntroHtml());\n }\n for (var _i = 0, _a = props.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs));\n }\n if (!props.cells.length) {\n parts.push('');\n }\n if (this.context.options.dir === 'rtl') {\n parts.reverse();\n }\n return '' + parts.join('') + '';\n };\n return DayBgRow;\n}());\nexport default DayBgRow;\nfunction renderCellHtml(date, dateProfile, context, otherAttrs) {\n var dateEnv = context.dateEnv, theme = context.theme;\n var isDateValid = rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.\n var classes = getDayClasses(date, dateProfile, context);\n classes.unshift('fc-day', theme.getClass('widgetContent'));\n return '';\n}\n","import * as tslib_1 from \"tslib\";\nimport { createElement, insertAfterElement, findElements, findChildren, removeElement, computeRect, PositionCache, addDays, createFormatter, DateComponent, rangeContainsMarker, intersectRanges, buildGotoAnchorHtml, getDayClasses, memoizeRendering } from '@fullcalendar/core';\nimport Popover from './Popover';\nimport DayGridEventRenderer from './DayGridEventRenderer';\nimport DayGridMirrorRenderer from './DayGridMirrorRenderer';\nimport DayGridFillRenderer from './DayGridFillRenderer';\nimport DayTile from './DayTile';\nimport DayBgRow from './DayBgRow';\nvar DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });\nvar WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' });\nvar DayGrid = /** @class */ (function (_super) {\n tslib_1.__extends(DayGrid, _super);\n function DayGrid(el, renderProps) {\n var _this = _super.call(this, el) || this;\n _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\n _this.isCellSizesDirty = false;\n _this.renderProps = renderProps;\n var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this);\n var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this);\n _this.mirrorRenderer = new DayGridMirrorRenderer(_this);\n var renderCells = _this.renderCells = memoizeRendering(_this._renderCells, _this._unrenderCells);\n _this.renderBusinessHours = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]);\n _this.renderDateSelection = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]);\n _this.renderBgEvents = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]);\n _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]);\n _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);\n _this.renderEventDrag = memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]);\n _this.renderEventResize = memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]);\n return _this;\n }\n DayGrid.prototype.render = function (props, context) {\n var cells = props.cells;\n this.rowCnt = cells.length;\n this.colCnt = cells[0].length;\n this.renderCells(cells, props.isRigid);\n this.renderBusinessHours(context, props.businessHourSegs);\n this.renderDateSelection(context, props.dateSelectionSegs);\n this.renderBgEvents(context, props.bgEventSegs);\n this.renderFgEvents(context, props.fgEventSegs);\n this.renderEventSelection(props.eventSelection);\n this.renderEventDrag(props.eventDrag);\n this.renderEventResize(props.eventResize);\n if (this.segPopoverTile) {\n this.updateSegPopoverTile();\n }\n };\n DayGrid.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderCells.unrender(); // will unrender everything else\n };\n DayGrid.prototype.getCellRange = function (row, col) {\n var start = this.props.cells[row][col].date;\n var end = addDays(start, 1);\n return { start: start, end: end };\n };\n DayGrid.prototype.updateSegPopoverTile = function (date, segs) {\n var ownProps = this.props;\n this.segPopoverTile.receiveProps({\n date: date || this.segPopoverTile.props.date,\n fgSegs: segs || this.segPopoverTile.props.fgSegs,\n eventSelection: ownProps.eventSelection,\n eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null,\n eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null\n }, this.context);\n };\n /* Date Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype._renderCells = function (cells, isRigid) {\n var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv;\n var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt;\n var html = '';\n var row;\n var col;\n for (row = 0; row < rowCnt; row++) {\n html += this.renderDayRowHtml(row, isRigid);\n }\n this.el.innerHTML = html;\n this.rowEls = findElements(this.el, '.fc-row');\n this.cellEls = findElements(this.el, '.fc-day, .fc-disabled-day');\n if (isRtl) {\n this.cellEls.reverse();\n }\n this.rowPositions = new PositionCache(this.el, this.rowEls, false, true // vertical\n );\n this.colPositions = new PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row\n true, false // horizontal\n );\n // trigger dayRender with each cell's element\n for (row = 0; row < rowCnt; row++) {\n for (col = 0; col < colCnt; col++) {\n calendar.publiclyTrigger('dayRender', [\n {\n date: dateEnv.toDate(cells[row][col].date),\n el: this.getCellEl(row, col),\n view: view\n }\n ]);\n }\n }\n this.isCellSizesDirty = true;\n };\n DayGrid.prototype._unrenderCells = function () {\n this.removeSegPopover();\n };\n // Generates the HTML for a single row, which is a div that wraps a table.\n // `row` is the row number.\n DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\n var theme = this.context.theme;\n var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\n if (isRigid) {\n classes.push('fc-rigid');\n }\n var bgRow = new DayBgRow(this.context);\n return '' +\n '
' +\n '
' +\n '' +\n bgRow.renderHtml({\n cells: this.props.cells[row],\n dateProfile: this.props.dateProfile,\n renderIntroHtml: this.renderProps.renderBgIntroHtml\n }) +\n '
' +\n '
' +\n '
' +\n '' +\n (this.getIsNumbersVisible() ?\n '' +\n this.renderNumberTrHtml(row) +\n '' :\n '') +\n '
' +\n '
' +\n '
';\n };\n DayGrid.prototype.getIsNumbersVisible = function () {\n return this.getIsDayNumbersVisible() ||\n this.renderProps.cellWeekNumbersVisible ||\n this.renderProps.colWeekNumbersVisible;\n };\n DayGrid.prototype.getIsDayNumbersVisible = function () {\n return this.rowCnt > 1;\n };\n /* Grid Number Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.renderNumberTrHtml = function (row) {\n var isRtl = this.context.isRtl;\n var intro = this.renderProps.renderNumberIntroHtml(row, this);\n return '' +\n '' +\n (isRtl ? '' : intro) +\n this.renderNumberCellsHtml(row) +\n (isRtl ? intro : '') +\n '';\n };\n DayGrid.prototype.renderNumberCellsHtml = function (row) {\n var htmls = [];\n var col;\n var date;\n for (col = 0; col < this.colCnt; col++) {\n date = this.props.cells[row][col].date;\n htmls.push(this.renderNumberCellHtml(date));\n }\n if (this.context.isRtl) {\n htmls.reverse();\n }\n return htmls.join('');\n };\n // Generates the HTML for the s of the \"number\" row in the DayGrid's content skeleton.\n // The number row will only exist if either day numbers or week numbers are turned on.\n DayGrid.prototype.renderNumberCellHtml = function (date) {\n var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;\n var html = '';\n var isDateValid = rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.\n var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\n var classes;\n var weekCalcFirstDow;\n if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) {\n // no numbers in day cell (week number must be along the side)\n return ''; // will create an empty space above events :(\n }\n classes = getDayClasses(date, this.props.dateProfile, this.context);\n classes.unshift('fc-day-top');\n if (this.renderProps.cellWeekNumbersVisible) {\n weekCalcFirstDow = dateEnv.weekDow;\n }\n html += '';\n if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {\n html += buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML\n );\n }\n if (isDayNumberVisible) {\n html += buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML\n );\n }\n html += '';\n return html;\n };\n /* Sizing\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.updateSize = function (isResize) {\n var calendar = this.context.calendar;\n var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;\n if (isResize ||\n this.isCellSizesDirty ||\n calendar.isEventsUpdated // hack\n ) {\n this.buildPositionCaches();\n this.isCellSizesDirty = false;\n }\n fillRenderer.computeSizes(isResize);\n eventRenderer.computeSizes(isResize);\n mirrorRenderer.computeSizes(isResize);\n fillRenderer.assignSizes(isResize);\n eventRenderer.assignSizes(isResize);\n mirrorRenderer.assignSizes(isResize);\n };\n DayGrid.prototype.buildPositionCaches = function () {\n this.buildColPositions();\n this.buildRowPositions();\n };\n DayGrid.prototype.buildColPositions = function () {\n this.colPositions.build();\n };\n DayGrid.prototype.buildRowPositions = function () {\n this.rowPositions.build();\n this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\n };\n /* Hit System\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.positionToHit = function (leftPosition, topPosition) {\n var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;\n var col = colPositions.leftToIndex(leftPosition);\n var row = rowPositions.topToIndex(topPosition);\n if (row != null && col != null) {\n return {\n row: row,\n col: col,\n dateSpan: {\n range: this.getCellRange(row, col),\n allDay: true\n },\n dayEl: this.getCellEl(row, col),\n relativeRect: {\n left: colPositions.lefts[col],\n right: colPositions.rights[col],\n top: rowPositions.tops[row],\n bottom: rowPositions.bottoms[row]\n }\n };\n }\n };\n /* Cell System\n ------------------------------------------------------------------------------------------------------------------*/\n // FYI: the first column is the leftmost column, regardless of date\n DayGrid.prototype.getCellEl = function (row, col) {\n return this.cellEls[row * this.colCnt + col];\n };\n /* Event Drag Visualization\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype._renderEventDrag = function (state) {\n if (state) {\n this.eventRenderer.hideByHash(state.affectedInstances);\n this.fillRenderer.renderSegs('highlight', this.context, state.segs);\n }\n };\n DayGrid.prototype._unrenderEventDrag = function (state) {\n if (state) {\n this.eventRenderer.showByHash(state.affectedInstances);\n this.fillRenderer.unrender('highlight', this.context);\n }\n };\n /* Event Resize Visualization\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype._renderEventResize = function (state) {\n if (state) {\n this.eventRenderer.hideByHash(state.affectedInstances);\n this.fillRenderer.renderSegs('highlight', this.context, state.segs);\n this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });\n }\n };\n DayGrid.prototype._unrenderEventResize = function (state) {\n if (state) {\n this.eventRenderer.showByHash(state.affectedInstances);\n this.fillRenderer.unrender('highlight', this.context);\n this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });\n }\n };\n /* More+ Link Popover\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.removeSegPopover = function () {\n if (this.segPopover) {\n this.segPopover.hide(); // in handler, will call segPopover's removeElement\n }\n };\n // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\n // `levelLimit` can be false (don't limit), a number, or true (should be computed).\n DayGrid.prototype.limitRows = function (levelLimit) {\n var rowStructs = this.eventRenderer.rowStructs || [];\n var row; // row #\n var rowLevelLimit;\n for (row = 0; row < rowStructs.length; row++) {\n this.unlimitRow(row);\n if (!levelLimit) {\n rowLevelLimit = false;\n }\n else if (typeof levelLimit === 'number') {\n rowLevelLimit = levelLimit;\n }\n else {\n rowLevelLimit = this.computeRowLevelLimit(row);\n }\n if (rowLevelLimit !== false) {\n this.limitRow(row, rowLevelLimit);\n }\n }\n };\n // Computes the number of levels a row will accomodate without going outside its bounds.\n // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\n // `row` is the row number.\n DayGrid.prototype.computeRowLevelLimit = function (row) {\n var rowEl = this.rowEls[row]; // the containing \"fake\" row div\n var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport!\n var trEls = findChildren(this.eventRenderer.rowStructs[row].tbodyEl);\n var i;\n var trEl;\n // Reveal one level at a time and stop when we find one out of bounds\n for (i = 0; i < trEls.length; i++) {\n trEl = trEls[i];\n trEl.classList.remove('fc-limited'); // reset to original state (reveal)\n if (trEl.getBoundingClientRect().bottom > rowBottom) {\n return i;\n }\n }\n return false; // should not limit at all\n };\n // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\n // `row` is the row number.\n // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\n DayGrid.prototype.limitRow = function (row, levelLimit) {\n var _this = this;\n var colCnt = this.colCnt;\n var isRtl = this.context.isRtl;\n var rowStruct = this.eventRenderer.rowStructs[row];\n var moreNodes = []; // array of \"more\" links and DOM nodes\n var col = 0; // col #, left-to-right (not chronologically)\n var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\n var cellMatrix; // a matrix (by level, then column) of all elements in the row\n var limitedNodes; // array of temporarily hidden level and segment DOM nodes\n var i;\n var seg;\n var segsBelow; // array of segment objects below `seg` in the current `col`\n var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\n var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\n var td;\n var rowSpan;\n var segMoreNodes; // array of \"more\" cells that will stand-in for the current seg's cell\n var j;\n var moreTd;\n var moreWrap;\n var moreLink;\n // Iterates through empty level cells and places \"more\" links inside if need be\n var emptyCellsUntil = function (endCol) {\n while (col < endCol) {\n segsBelow = _this.getCellSegs(row, col, levelLimit);\n if (segsBelow.length) {\n td = cellMatrix[levelLimit - 1][col];\n moreLink = _this.renderMoreLink(row, col, segsBelow);\n moreWrap = createElement('div', null, moreLink);\n td.appendChild(moreWrap);\n moreNodes.push(moreWrap);\n }\n col++;\n }\n };\n if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\n levelSegs = rowStruct.segLevels[levelLimit - 1];\n cellMatrix = rowStruct.cellMatrix;\n limitedNodes = findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level elements past the limit\n limitedNodes.forEach(function (node) {\n node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array\n });\n // iterate though segments in the last allowable level\n for (i = 0; i < levelSegs.length; i++) {\n seg = levelSegs[i];\n var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;\n var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;\n emptyCellsUntil(leftCol); // process empty cells before the segment\n // determine *all* segments below `seg` that occupy the same columns\n colSegsBelow = [];\n totalSegsBelow = 0;\n while (col <= rightCol) {\n segsBelow = this.getCellSegs(row, col, levelLimit);\n colSegsBelow.push(segsBelow);\n totalSegsBelow += segsBelow.length;\n col++;\n }\n if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\n td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell\n rowSpan = td.rowSpan || 1;\n segMoreNodes = [];\n // make a replacement for each column the segment occupies. will be one for each colspan\n for (j = 0; j < colSegsBelow.length; j++) {\n moreTd = createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan });\n segsBelow = colSegsBelow[j];\n moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\n );\n moreWrap = createElement('div', null, moreLink);\n moreTd.appendChild(moreWrap);\n segMoreNodes.push(moreTd);\n moreNodes.push(moreTd);\n }\n td.classList.add('fc-limited');\n insertAfterElement(td, segMoreNodes);\n limitedNodes.push(td);\n }\n }\n emptyCellsUntil(this.colCnt); // finish off the level\n rowStruct.moreEls = moreNodes; // for easy undoing later\n rowStruct.limitedEls = limitedNodes; // for easy undoing later\n }\n };\n // Reveals all levels and removes all \"more\"-related elements for a grid's row.\n // `row` is a row number.\n DayGrid.prototype.unlimitRow = function (row) {\n var rowStruct = this.eventRenderer.rowStructs[row];\n if (rowStruct.moreEls) {\n rowStruct.moreEls.forEach(removeElement);\n rowStruct.moreEls = null;\n }\n if (rowStruct.limitedEls) {\n rowStruct.limitedEls.forEach(function (limitedEl) {\n limitedEl.classList.remove('fc-limited');\n });\n rowStruct.limitedEls = null;\n }\n };\n // Renders an element that represents hidden event element for a cell.\n // Responsible for attaching click handler as well.\n DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\n var _this = this;\n var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl;\n var a = createElement('a', { className: 'fc-more' });\n a.innerText = this.getMoreLinkText(hiddenSegs.length);\n a.addEventListener('click', function (ev) {\n var clickOption = options.eventLimitClick;\n var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?\n var date = _this.props.cells[row][_col].date;\n var moreEl = ev.currentTarget;\n var dayEl = _this.getCellEl(row, col);\n var allSegs = _this.getCellSegs(row, col);\n // rescope the segments to be within the cell's date\n var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\n var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\n if (typeof clickOption === 'function') {\n // the returned value can be an atomic option\n clickOption = calendar.publiclyTrigger('eventLimitClick', [\n {\n date: dateEnv.toDate(date),\n allDay: true,\n dayEl: dayEl,\n moreEl: moreEl,\n segs: reslicedAllSegs,\n hiddenSegs: reslicedHiddenSegs,\n jsEvent: ev,\n view: view\n }\n ]);\n }\n if (clickOption === 'popover') {\n _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\n }\n else if (typeof clickOption === 'string') { // a view name\n calendar.zoomTo(date, clickOption);\n }\n });\n return a;\n };\n // Reveals the popover that displays all events within a cell\n DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\n var _this = this;\n var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl;\n var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?\n var moreWrap = moreLink.parentNode; // the
wrapper around the \n var topEl; // the element we want to match the top coordinate of\n var options;\n if (this.rowCnt === 1) {\n topEl = view.el; // will cause the popover to cover any sort of header\n }\n else {\n topEl = this.rowEls[row]; // will align with top of row\n }\n options = {\n className: 'fc-more-popover ' + theme.getClass('popover'),\n parentEl: view.el,\n top: computeRect(topEl).top,\n autoHide: true,\n content: function (el) {\n _this.segPopoverTile = new DayTile(el);\n _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs);\n },\n hide: function () {\n _this.segPopoverTile.destroy();\n _this.segPopoverTile = null;\n _this.segPopover.destroy();\n _this.segPopover = null;\n }\n };\n // Determine horizontal coordinate.\n // We use the moreWrap instead of the to avoid border confusion.\n if (isRtl) {\n options.right = computeRect(moreWrap).right + 1; // +1 to be over cell border\n }\n else {\n options.left = computeRect(moreWrap).left - 1; // -1 to be over cell border\n }\n this.segPopover = new Popover(options);\n this.segPopover.show();\n calendar.releaseAfterSizingTriggers(); // hack for eventPositioned\n };\n // Given the events within an array of segment objects, reslice them to be in a single day\n DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\n var dayStart = dayDate;\n var dayEnd = addDays(dayStart, 1);\n var dayRange = { start: dayStart, end: dayEnd };\n var newSegs = [];\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n var eventRange = seg.eventRange;\n var origRange = eventRange.range;\n var slicedRange = intersectRanges(origRange, dayRange);\n if (slicedRange) {\n newSegs.push(tslib_1.__assign({}, seg, { eventRange: {\n def: eventRange.def,\n ui: tslib_1.__assign({}, eventRange.ui, { durationEditable: false }),\n instance: eventRange.instance,\n range: slicedRange\n }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));\n }\n }\n return newSegs;\n };\n // Generates the text that should be inside a \"more\" link, given the number of events it represents\n DayGrid.prototype.getMoreLinkText = function (num) {\n var opt = this.context.options.eventLimitText;\n if (typeof opt === 'function') {\n return opt(num);\n }\n else {\n return '+' + num + ' ' + opt;\n }\n };\n // Returns segments within a given cell.\n // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\n DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\n var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\n var level = startLevel || 0;\n var segs = [];\n var seg;\n while (level < segMatrix.length) {\n seg = segMatrix[level][col];\n if (seg) {\n segs.push(seg);\n }\n level++;\n }\n return segs;\n };\n return DayGrid;\n}(DateComponent));\nexport default DayGrid;\n","import * as tslib_1 from \"tslib\";\nimport { htmlEscape, createElement, findElements, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, distributeHeight, undistributeHeight, createFormatter, ScrollComponent, View, buildGotoAnchorHtml, memoize, memoizeRendering } from '@fullcalendar/core';\nimport DayGridDateProfileGenerator from './DayGridDateProfileGenerator';\nimport DayGrid from './DayGrid';\nvar WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' });\n/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\nvar AbstractDayGridView = /** @class */ (function (_super) {\n tslib_1.__extends(AbstractDayGridView, _super);\n function AbstractDayGridView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.processOptions = memoize(_this._processOptions);\n _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);\n /* Header Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that will go before the day-of week header cells\n _this.renderHeadIntroHtml = function () {\n var _a = _this.context, theme = _a.theme, options = _a.options;\n if (_this.colWeekNumbersVisible) {\n return '' +\n '' +\n '' + // needed for matchCellWidths\n htmlEscape(options.weekLabel) +\n '' +\n '';\n }\n return '';\n };\n /* Day Grid Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\n _this.renderDayGridNumberIntroHtml = function (row, dayGrid) {\n var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv;\n var weekStart = dayGrid.props.cells[row][0].date;\n if (_this.colWeekNumbersVisible) {\n return '' +\n '' +\n buildGotoAnchorHtml(// aside from link, important for matchCellWidths\n options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT) // inner HTML\n ) +\n '';\n }\n return '';\n };\n // Generates the HTML that goes before the day bg cells for each day-row\n _this.renderDayGridBgIntroHtml = function () {\n var theme = _this.context.theme;\n if (_this.colWeekNumbersVisible) {\n return '';\n }\n return '';\n };\n // Generates the HTML that goes before every other type of row generated by DayGrid.\n // Affects mirror-skeleton and highlight-skeleton rows.\n _this.renderDayGridIntroHtml = function () {\n if (_this.colWeekNumbersVisible) {\n return '';\n }\n return '';\n };\n return _this;\n }\n AbstractDayGridView.prototype._processOptions = function (options) {\n if (options.weekNumbers) {\n if (options.weekNumbersWithinDays) {\n this.cellWeekNumbersVisible = true;\n this.colWeekNumbersVisible = false;\n }\n else {\n this.cellWeekNumbersVisible = false;\n this.colWeekNumbersVisible = true;\n }\n }\n else {\n this.colWeekNumbersVisible = false;\n this.cellWeekNumbersVisible = false;\n }\n };\n AbstractDayGridView.prototype.render = function (props, context) {\n _super.prototype.render.call(this, props, context);\n this.processOptions(context.options);\n this.renderSkeleton(context);\n };\n AbstractDayGridView.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderSkeleton.unrender();\n };\n AbstractDayGridView.prototype._renderSkeleton = function (context) {\n this.el.classList.add('fc-dayGrid-view');\n this.el.innerHTML = this.renderSkeletonHtml();\n this.scroller = new ScrollComponent('hidden', // overflow x\n 'auto' // overflow y\n );\n var dayGridContainerEl = this.scroller.el;\n this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl);\n dayGridContainerEl.classList.add('fc-day-grid-container');\n var dayGridEl = createElement('div', { className: 'fc-day-grid' });\n dayGridContainerEl.appendChild(dayGridEl);\n this.dayGrid = new DayGrid(dayGridEl, {\n renderNumberIntroHtml: this.renderDayGridNumberIntroHtml,\n renderBgIntroHtml: this.renderDayGridBgIntroHtml,\n renderIntroHtml: this.renderDayGridIntroHtml,\n colWeekNumbersVisible: this.colWeekNumbersVisible,\n cellWeekNumbersVisible: this.cellWeekNumbersVisible\n });\n };\n AbstractDayGridView.prototype._unrenderSkeleton = function () {\n this.el.classList.remove('fc-dayGrid-view');\n this.dayGrid.destroy();\n this.scroller.destroy();\n };\n // Builds the HTML skeleton for the view.\n // The day-grid component will render inside of a container defined by this HTML.\n AbstractDayGridView.prototype.renderSkeletonHtml = function () {\n var _a = this.context, theme = _a.theme, options = _a.options;\n return '' +\n '' +\n (options.columnHeader ?\n '' +\n '' +\n '' +\n '' +\n '' :\n '') +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
 
';\n };\n // Generates an HTML attribute string for setting the width of the week number column, if it is known\n AbstractDayGridView.prototype.weekNumberStyleAttr = function () {\n if (this.weekNumberWidth != null) {\n return 'style=\"width:' + this.weekNumberWidth + 'px\"';\n }\n return '';\n };\n // Determines whether each row should have a constant height\n AbstractDayGridView.prototype.hasRigidRows = function () {\n var eventLimit = this.context.options.eventLimit;\n return eventLimit && typeof eventLimit !== 'number';\n };\n /* Dimensions\n ------------------------------------------------------------------------------------------------------------------*/\n AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {\n _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first\n this.dayGrid.updateSize(isResize);\n };\n // Refreshes the horizontal dimensions of the view\n AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {\n var dayGrid = this.dayGrid;\n var eventLimit = this.context.options.eventLimit;\n var headRowEl = this.header ? this.header.el : null; // HACK\n var scrollerHeight;\n var scrollbarWidths;\n // hack to give the view some height prior to dayGrid's columns being rendered\n // TODO: separate setting height from scroller VS dayGrid.\n if (!dayGrid.rowEls) {\n if (!isAuto) {\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n }\n return;\n }\n if (this.colWeekNumbersVisible) {\n // Make sure all week number cells running down the side have the same width.\n this.weekNumberWidth = matchCellWidths(findElements(this.el, '.fc-week-number'));\n }\n // reset all heights to be natural\n this.scroller.clear();\n if (headRowEl) {\n uncompensateScroll(headRowEl);\n }\n dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n // is the event limit a constant level number?\n if (eventLimit && typeof eventLimit === 'number') {\n dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\n }\n // distribute the height to the rows\n // (viewHeight is a \"recommended\" value if isAuto)\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.setGridHeight(scrollerHeight, isAuto);\n // is the event limit dynamically calculated?\n if (eventLimit && typeof eventLimit !== 'number') {\n dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\n }\n if (!isAuto) { // should we force dimensions of the scroll container?\n this.scroller.setHeight(scrollerHeight);\n scrollbarWidths = this.scroller.getScrollbarWidths();\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n if (headRowEl) {\n compensateScroll(headRowEl, scrollbarWidths);\n }\n // doing the scrollbar compensation might have created text overflow which created more height. redo\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n }\n // guarantees the same scrollbar widths\n this.scroller.lockOverflow(scrollbarWidths);\n }\n };\n // given a desired total height of the view, returns what the height of the scroller should be\n AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) {\n return viewHeight -\n subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n };\n // Sets the height of just the DayGrid component in this view\n AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) {\n if (this.context.options.monthMode) {\n // if auto, make the height of each row the height that it would be if there were 6 weeks\n if (isAuto) {\n height *= this.dayGrid.rowCnt / 6;\n }\n distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\n }\n else {\n if (isAuto) {\n undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\n }\n else {\n distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\n }\n }\n };\n /* Scroll\n ------------------------------------------------------------------------------------------------------------------*/\n AbstractDayGridView.prototype.computeDateScroll = function (duration) {\n return { top: 0 };\n };\n AbstractDayGridView.prototype.queryDateScroll = function () {\n return { top: this.scroller.getScrollTop() };\n };\n AbstractDayGridView.prototype.applyDateScroll = function (scroll) {\n if (scroll.top !== undefined) {\n this.scroller.setScrollTop(scroll.top);\n }\n };\n return AbstractDayGridView;\n}(View));\nexport default AbstractDayGridView;\nAbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;\n","import * as tslib_1 from \"tslib\";\nimport { DateComponent, Slicer } from '@fullcalendar/core';\nvar SimpleDayGrid = /** @class */ (function (_super) {\n tslib_1.__extends(SimpleDayGrid, _super);\n function SimpleDayGrid(dayGrid) {\n var _this = _super.call(this, dayGrid.el) || this;\n _this.slicer = new DayGridSlicer();\n _this.dayGrid = dayGrid;\n return _this;\n }\n SimpleDayGrid.prototype.firstContext = function (context) {\n context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el });\n };\n SimpleDayGrid.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.context.calendar.unregisterInteractiveComponent(this);\n };\n SimpleDayGrid.prototype.render = function (props, context) {\n var dayGrid = this.dayGrid;\n var dateProfile = props.dateProfile, dayTable = props.dayTable;\n dayGrid.receiveProps(tslib_1.__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context);\n };\n SimpleDayGrid.prototype.buildPositionCaches = function () {\n this.dayGrid.buildPositionCaches();\n };\n SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) {\n var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);\n if (rawHit) {\n return {\n component: this.dayGrid,\n dateSpan: rawHit.dateSpan,\n dayEl: rawHit.dayEl,\n rect: {\n left: rawHit.relativeRect.left,\n right: rawHit.relativeRect.right,\n top: rawHit.relativeRect.top,\n bottom: rawHit.relativeRect.bottom\n },\n layer: 0\n };\n }\n };\n return SimpleDayGrid;\n}(DateComponent));\nexport default SimpleDayGrid;\nvar DayGridSlicer = /** @class */ (function (_super) {\n tslib_1.__extends(DayGridSlicer, _super);\n function DayGridSlicer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) {\n return dayTable.sliceRange(dateRange);\n };\n return DayGridSlicer;\n}(Slicer));\nexport { DayGridSlicer };\n","import * as tslib_1 from \"tslib\";\nimport { DayHeader, memoize, DaySeries, DayTable } from '@fullcalendar/core';\nimport AbstractDayGridView from './AbstractDayGridView';\nimport SimpleDayGrid from './SimpleDayGrid';\nvar DayGridView = /** @class */ (function (_super) {\n tslib_1.__extends(DayGridView, _super);\n function DayGridView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.buildDayTable = memoize(buildDayTable);\n return _this;\n }\n DayGridView.prototype.render = function (props, context) {\n _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton\n var dateProfile = this.props.dateProfile;\n var dayTable = this.dayTable =\n this.buildDayTable(dateProfile, props.dateProfileGenerator);\n if (this.header) {\n this.header.receiveProps({\n dateProfile: dateProfile,\n dates: dayTable.headerDates,\n datesRepDistinctDays: dayTable.rowCnt === 1,\n renderIntroHtml: this.renderHeadIntroHtml\n }, context);\n }\n this.simpleDayGrid.receiveProps({\n dateProfile: dateProfile,\n dayTable: dayTable,\n businessHours: props.businessHours,\n dateSelection: props.dateSelection,\n eventStore: props.eventStore,\n eventUiBases: props.eventUiBases,\n eventSelection: props.eventSelection,\n eventDrag: props.eventDrag,\n eventResize: props.eventResize,\n isRigid: this.hasRigidRows(),\n nextDayThreshold: this.context.nextDayThreshold\n }, context);\n };\n DayGridView.prototype._renderSkeleton = function (context) {\n _super.prototype._renderSkeleton.call(this, context);\n if (context.options.columnHeader) {\n this.header = new DayHeader(this.el.querySelector('.fc-head-container'));\n }\n this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);\n };\n DayGridView.prototype._unrenderSkeleton = function () {\n _super.prototype._unrenderSkeleton.call(this);\n if (this.header) {\n this.header.destroy();\n }\n this.simpleDayGrid.destroy();\n };\n return DayGridView;\n}(AbstractDayGridView));\nexport default DayGridView;\nexport function buildDayTable(dateProfile, dateProfileGenerator) {\n var daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator);\n return new DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));\n}\n","import { createPlugin } from '@fullcalendar/core';\nimport DayGridView from './DayGridView';\nexport { default as SimpleDayGrid, DayGridSlicer } from './SimpleDayGrid';\nexport { default as DayGrid } from './DayGrid';\nexport { default as AbstractDayGridView } from './AbstractDayGridView';\nexport { default as DayGridView, buildDayTable as buildBasicDayTable } from './DayGridView';\nexport { default as DayBgRow } from './DayBgRow';\nexport default createPlugin({\n defaultView: 'dayGridMonth',\n views: {\n dayGrid: DayGridView,\n dayGridDay: {\n type: 'dayGrid',\n duration: { days: 1 }\n },\n dayGridWeek: {\n type: 'dayGrid',\n duration: { weeks: 1 }\n },\n dayGridMonth: {\n type: 'dayGrid',\n duration: { months: 1 },\n monthMode: true,\n fixedWeekCount: true\n }\n }\n});\n"],"names":["tslib_1.__extends","tslib_1.__assign","WEEK_NUM_FORMAT"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/daygrid/main.min.css b/src/main/resources/static/packages/daygrid/main.min.css new file mode 100644 index 00000000..55a57241 --- /dev/null +++ b/src/main/resources/static/packages/daygrid/main.min.css @@ -0,0 +1 @@ +.fc-dayGridDay-view .fc-content-skeleton,.fc-dayGridWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-dayGrid-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-dayGrid-view .fc-day-number,.fc-dayGrid-view .fc-week-number{padding:2px}.fc-dayGrid-view th.fc-day-number,.fc-dayGrid-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-dayGrid-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-dayGrid-view td.fc-week-number{text-align:center}.fc-dayGrid-view td.fc-week-number>*{display:inline-block;min-width:1.25em} \ No newline at end of file diff --git a/src/main/resources/static/packages/daygrid/main.min.js b/src/main/resources/static/packages/daygrid/main.min.js new file mode 100644 index 00000000..60ef4b9f --- /dev/null +++ b/src/main/resources/static/packages/daygrid/main.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Day Grid Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarDayGrid={},e.FullCalendar)}(this,function(e,t){"use strict";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function n(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var i=function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r'+t.htmlEscape(n)+""),i=''+(t.htmlEscape(l.title||"")||" ")+"",'
'+("rtl"===o.options.dir?i+" "+m:m+" "+i)+"
"+(h?'
':"")+(p?'
':"")+"
"},r.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"}},r.prototype.computeDisplayEventEnd=function(){return!1},r}(t.FgEventRenderer),a=function(e){function r(t){var r=e.call(this)||this;return r.dayGrid=t,r}return n(r,e),r.prototype.attachSegs=function(e,t){var r=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.forEach(function(e,t){e.querySelector(".fc-content-skeleton > table").appendChild(r[t].tbodyEl)}),t||this.dayGrid.removeSegPopover()},r.prototype.detachSegs=function(){for(var e,r=this.rowStructs||[];e=r.pop();)t.removeElement(e.tbodyEl);this.rowStructs=null},r.prototype.renderSegRows=function(e){var t,r,n=[];for(t=this.groupSegRows(e),r=0;r=e.firstCol)return!0;return!1}function c(e,t){return e.leftCol-t.leftCol}var h=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return n(r,e),r.prototype.attachSegs=function(e,r){var n=r.sourceSeg,i=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.forEach(function(e,r){var o,s,l=t.htmlToElement('
');n&&n.row===r?o=n.el:(o=e.querySelector(".fc-content-skeleton tbody"))||(o=e.querySelector(".fc-content-skeleton table")),s=o.getBoundingClientRect().top-e.getBoundingClientRect().top,l.style.top=s+"px",l.querySelector("table").appendChild(i[r].tbodyEl),e.appendChild(l)})},r}(a),p=function(e){function r(t){var r=e.call(this)||this;return r.fillSegTag="td",r.dayGrid=t,r}return n(r,e),r.prototype.renderSegs=function(t,r,n){"bgEvent"===t&&(n=n.filter(function(e){return e.eventRange.def.allDay})),e.prototype.renderSegs.call(this,t,r,n)},r.prototype.attachSegs=function(e,t){var r,n,i,o=[];for(r=0;r
')).getElementsByTagName("tr")[0],d>0&&t.appendToElement(o,new Array(d+1).join('')),r.el.colSpan=c-d,o.appendChild(r.el),c'));var h=s.renderProps.renderIntroHtml();return h&&(l?t.appendToElement(o,h):t.prependToElement(o,h)),i},r}(t.FillRenderer),u=function(e){function r(r){var n=e.call(this,r)||this,i=n.eventRenderer=new f(n),o=n.renderFrame=t.memoizeRendering(n._renderFrame);return n.renderFgEvents=t.memoizeRendering(i.renderSegs.bind(i),i.unrender.bind(i),[o]),n.renderEventSelection=t.memoizeRendering(i.selectByInstanceId.bind(i),i.unselectByInstanceId.bind(i),[n.renderFgEvents]),n.renderEventDrag=t.memoizeRendering(i.hideByHash.bind(i),i.showByHash.bind(i),[o]),n.renderEventResize=t.memoizeRendering(i.hideByHash.bind(i),i.showByHash.bind(i),[o]),n}return n(r,e),r.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.el,useEventCenter:!1})},r.prototype.render=function(e,t){this.renderFrame(e.date),this.renderFgEvents(t,e.fgSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDragInstances),this.renderEventResize(e.eventResizeInstances)},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderFrame.unrender(),this.context.calendar.unregisterInteractiveComponent(this)},r.prototype._renderFrame=function(e){var r=this.context,n=r.theme,i=r.dateEnv,o=r.options,s=i.format(e,t.createFormatter(o.dayPopoverFormat));this.el.innerHTML='
'+t.htmlEscape(s)+'
',this.segContainerEl=this.el.querySelector(".fc-event-container")},r.prototype.queryHit=function(e,r,n,i){var o=this.props.date;if(e'),"rtl"===this.context.options.dir&&t.reverse(),""+t.join("")+""},e}();function g(e,r,n,i){var o=n.dateEnv,s=n.theme,l=t.rangeContainsMarker(r.activeRange,e),a=t.getDayClasses(e,r,n);return a.unshift("fc-day",s.getClass("widgetContent")),'"}var y=t.createFormatter({day:"numeric"}),v=t.createFormatter({week:"numeric"}),b=function(e){function r(r,n){var i=e.call(this,r)||this;i.bottomCoordPadding=0,i.isCellSizesDirty=!1,i.renderProps=n;var o=i.eventRenderer=new a(i),s=i.fillRenderer=new p(i);i.mirrorRenderer=new h(i);var l=i.renderCells=t.memoizeRendering(i._renderCells,i._unrenderCells);return i.renderBusinessHours=t.memoizeRendering(s.renderSegs.bind(s,"businessHours"),s.unrender.bind(s,"businessHours"),[l]),i.renderDateSelection=t.memoizeRendering(s.renderSegs.bind(s,"highlight"),s.unrender.bind(s,"highlight"),[l]),i.renderBgEvents=t.memoizeRendering(s.renderSegs.bind(s,"bgEvent"),s.unrender.bind(s,"bgEvent"),[l]),i.renderFgEvents=t.memoizeRendering(o.renderSegs.bind(o),o.unrender.bind(o),[l]),i.renderEventSelection=t.memoizeRendering(o.selectByInstanceId.bind(o),o.unselectByInstanceId.bind(o),[i.renderFgEvents]),i.renderEventDrag=t.memoizeRendering(i._renderEventDrag,i._unrenderEventDrag,[l]),i.renderEventResize=t.memoizeRendering(i._renderEventResize,i._unrenderEventResize,[l]),i}return n(r,e),r.prototype.render=function(e,t){var r=e.cells;this.rowCnt=r.length,this.colCnt=r[0].length,this.renderCells(r,e.isRigid),this.renderBusinessHours(t,e.businessHourSegs),this.renderDateSelection(t,e.dateSelectionSegs),this.renderBgEvents(t,e.bgEventSegs),this.renderFgEvents(t,e.fgEventSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDrag),this.renderEventResize(e.eventResize),this.segPopoverTile&&this.updateSegPopoverTile()},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderCells.unrender()},r.prototype.getCellRange=function(e,r){var n=this.props.cells[e][r].date;return{start:n,end:t.addDays(n,1)}},r.prototype.updateSegPopoverTile=function(e,t){var r=this.props;this.segPopoverTile.receiveProps({date:e||this.segPopoverTile.props.date,fgSegs:t||this.segPopoverTile.props.fgSegs,eventSelection:r.eventSelection,eventDragInstances:r.eventDrag?r.eventDrag.affectedInstances:null,eventResizeInstances:r.eventResize?r.eventResize.affectedInstances:null},this.context)},r.prototype._renderCells=function(e,r){var n,i,o=this.context,s=o.calendar,l=o.view,a=o.isRtl,d=o.dateEnv,c=this.rowCnt,h=this.colCnt,p="";for(n=0;n
'+i.renderHtml({cells:this.props.cells[e],dateProfile:this.props.dateProfile,renderIntroHtml:this.renderProps.renderBgIntroHtml})+'
'+(this.getIsNumbersVisible()?""+this.renderNumberTrHtml(e)+"":"")+"
"},r.prototype.getIsNumbersVisible=function(){return this.getIsDayNumbersVisible()||this.renderProps.cellWeekNumbersVisible||this.renderProps.colWeekNumbersVisible},r.prototype.getIsDayNumbersVisible=function(){return this.rowCnt>1},r.prototype.renderNumberTrHtml=function(e){var t=this.context.isRtl,r=this.renderProps.renderNumberIntroHtml(e,this);return""+(t?"":r)+this.renderNumberCellsHtml(e)+(t?r:"")+""},r.prototype.renderNumberCellsHtml=function(e){var t,r,n=[];for(t=0;t",this.renderProps.cellWeekNumbersVisible&&e.getUTCDay()===n&&(l+=t.buildGotoAnchorHtml(s,o,{date:e,type:"week"},{class:"fc-week-number"},o.format(e,v))),d&&(l+=t.buildGotoAnchorHtml(s,o,e,{class:"fc-day-number"},o.format(e,y))),l+=""):""},r.prototype.updateSize=function(e){var t=this.context.calendar,r=this.fillRenderer,n=this.eventRenderer,i=this.mirrorRenderer;(e||this.isCellSizesDirty||t.isEventsUpdated)&&(this.buildPositionCaches(),this.isCellSizesDirty=!1),r.computeSizes(e),n.computeSizes(e),i.computeSizes(e),r.assignSizes(e),n.assignSizes(e),i.assignSizes(e)},r.prototype.buildPositionCaches=function(){this.buildColPositions(),this.buildRowPositions()},r.prototype.buildColPositions=function(){this.colPositions.build()},r.prototype.buildRowPositions=function(){this.rowPositions.build(),this.rowPositions.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},r.prototype.positionToHit=function(e,t){var r=this.colPositions,n=this.rowPositions,i=r.leftToIndex(e),o=n.topToIndex(t);if(null!=o&&null!=i)return{row:o,col:i,dateSpan:{range:this.getCellRange(o,i),allDay:!0},dayEl:this.getCellEl(o,i),relativeRect:{left:r.lefts[i],right:r.rights[i],top:n.tops[o],bottom:n.bottoms[o]}}},r.prototype.getCellEl=function(e,t){return this.cellEls[e*this.colCnt+t]},r.prototype._renderEventDrag=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",this.context,e.segs))},r.prototype._unrenderEventDrag=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight",this.context))},r.prototype._renderEventResize=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",this.context,e.segs),this.mirrorRenderer.renderSegs(this.context,e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},r.prototype._unrenderEventResize=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight",this.context),this.mirrorRenderer.unrender(this.context,e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},r.prototype.removeSegPopover=function(){this.segPopover&&this.segPopover.hide()},r.prototype.limitRows=function(e){var t,r,n=this.eventRenderer.rowStructs||[];for(t=0;ti)return r;return!1},r.prototype.limitRow=function(e,r){var n,i,o,s,l,a,d,c,h,p,u,f,m,g,y,v=this,b=this.colCnt,S=this.context.isRtl,w=this.eventRenderer.rowStructs[e],C=[],E=0,R=function(n){for(;E"+t.htmlEscape(i.weekLabel)+"":""},r.renderDayGridNumberIntroHtml=function(e,n){var i=r.context,o=i.options,s=i.dateEnv,l=n.props.cells[e][0].date;return r.colWeekNumbersVisible?'"+t.buildGotoAnchorHtml(o,s,{date:l,type:"week",forceOff:1===n.colCnt},s.format(l,S))+"":""},r.renderDayGridBgIntroHtml=function(){var e=r.context.theme;return r.colWeekNumbersVisible?'":""},r.renderDayGridIntroHtml=function(){return r.colWeekNumbersVisible?'":""},r}return n(r,e),r.prototype._processOptions=function(e){e.weekNumbers?e.weekNumbersWithinDays?(this.cellWeekNumbersVisible=!0,this.colWeekNumbersVisible=!1):(this.cellWeekNumbersVisible=!1,this.colWeekNumbersVisible=!0):(this.colWeekNumbersVisible=!1,this.cellWeekNumbersVisible=!1)},r.prototype.render=function(t,r){e.prototype.render.call(this,t,r),this.processOptions(r.options),this.renderSkeleton(r)},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender()},r.prototype._renderSkeleton=function(e){this.el.classList.add("fc-dayGrid-view"),this.el.innerHTML=this.renderSkeletonHtml(),this.scroller=new t.ScrollComponent("hidden","auto");var r=this.scroller.el;this.el.querySelector(".fc-body > tr > td").appendChild(r),r.classList.add("fc-day-grid-container");var n=t.createElement("div",{className:"fc-day-grid"});r.appendChild(n),this.dayGrid=new b(n,{renderNumberIntroHtml:this.renderDayGridNumberIntroHtml,renderBgIntroHtml:this.renderDayGridBgIntroHtml,renderIntroHtml:this.renderDayGridIntroHtml,colWeekNumbersVisible:this.colWeekNumbersVisible,cellWeekNumbersVisible:this.cellWeekNumbersVisible})},r.prototype._unrenderSkeleton=function(){this.el.classList.remove("fc-dayGrid-view"),this.dayGrid.destroy(),this.scroller.destroy()},r.prototype.renderSkeletonHtml=function(){var e=this.context,t=e.theme,r=e.options;return''+(r.columnHeader?'':"")+'
 
'},r.prototype.weekNumberStyleAttr=function(){return null!=this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},r.prototype.hasRigidRows=function(){var e=this.context.options.eventLimit;return e&&"number"!=typeof e},r.prototype.updateSize=function(t,r,n){e.prototype.updateSize.call(this,t,r,n),this.dayGrid.updateSize(t)},r.prototype.updateBaseSize=function(e,r,n){var i,o,s=this.dayGrid,l=this.context.options.eventLimit,a=this.header?this.header.el:null;s.rowEls?(this.colWeekNumbersVisible&&(this.weekNumberWidth=t.matchCellWidths(t.findElements(this.el,".fc-week-number"))),this.scroller.clear(),a&&t.uncompensateScroll(a),s.removeSegPopover(),l&&"number"==typeof l&&s.limitRows(l),i=this.computeScrollerHeight(r),this.setGridHeight(i,n),l&&"number"!=typeof l&&s.limitRows(l),n||(this.scroller.setHeight(i),((o=this.scroller.getScrollbarWidths()).left||o.right)&&(a&&t.compensateScroll(a,o),i=this.computeScrollerHeight(r),this.scroller.setHeight(i)),this.scroller.lockOverflow(o))):n||(i=this.computeScrollerHeight(r),this.scroller.setHeight(i))},r.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},r.prototype.setGridHeight=function(e,r){this.context.options.monthMode?(r&&(e*=this.dayGrid.rowCnt/6),t.distributeHeight(this.dayGrid.rowEls,e,!r)):r?t.undistributeHeight(this.dayGrid.rowEls):t.distributeHeight(this.dayGrid.rowEls,e,!0)},r.prototype.computeDateScroll=function(e){return{top:0}},r.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},r.prototype.applyDateScroll=function(e){void 0!==e.top&&this.scroller.setScrollTop(e.top)},r}(t.View);w.prototype.dateProfileGeneratorClass=o;var C=function(e){function t(t){var r=e.call(this,t.el)||this;return r.slicer=new E,r.dayGrid=t,r}return n(t,e),t.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.dayGrid.el})},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.context.calendar.unregisterInteractiveComponent(this)},t.prototype.render=function(e,t){var r=this.dayGrid,n=e.dateProfile,o=e.dayTable;r.receiveProps(i({},this.slicer.sliceProps(e,n,e.nextDayThreshold,t.calendar,r,o),{dateProfile:n,cells:o.cells,isRigid:e.isRigid}),t)},t.prototype.buildPositionCaches=function(){this.dayGrid.buildPositionCaches()},t.prototype.queryHit=function(e,t){var r=this.dayGrid.positionToHit(e,t);if(r)return{component:this.dayGrid,dateSpan:r.dateSpan,dayEl:r.dayEl,rect:{left:r.relativeRect.left,right:r.relativeRect.right,top:r.relativeRect.top,bottom:r.relativeRect.bottom},layer:0}},t}(t.DateComponent),E=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.sliceRange=function(e,t){return t.sliceRange(e)},t}(t.Slicer),R=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.buildDayTable=t.memoize(H),r}return n(r,e),r.prototype.render=function(t,r){e.prototype.render.call(this,t,r);var n=this.props.dateProfile,i=this.dayTable=this.buildDayTable(n,t.dateProfileGenerator);this.header&&this.header.receiveProps({dateProfile:n,dates:i.headerDates,datesRepDistinctDays:1===i.rowCnt,renderIntroHtml:this.renderHeadIntroHtml},r),this.simpleDayGrid.receiveProps({dateProfile:n,dayTable:i,businessHours:t.businessHours,dateSelection:t.dateSelection,eventStore:t.eventStore,eventUiBases:t.eventUiBases,eventSelection:t.eventSelection,eventDrag:t.eventDrag,eventResize:t.eventResize,isRigid:this.hasRigidRows(),nextDayThreshold:this.context.nextDayThreshold},r)},r.prototype._renderSkeleton=function(r){e.prototype._renderSkeleton.call(this,r),r.options.columnHeader&&(this.header=new t.DayHeader(this.el.querySelector(".fc-head-container"))),this.simpleDayGrid=new C(this.dayGrid)},r.prototype._unrenderSkeleton=function(){e.prototype._unrenderSkeleton.call(this),this.header&&this.header.destroy(),this.simpleDayGrid.destroy()},r}(w);function H(e,r){var n=new t.DaySeries(e.renderRange,r);return new t.DayTable(n,/year|month|week/.test(e.currentRangeUnit))}var k=t.createPlugin({defaultView:"dayGridMonth",views:{dayGrid:R,dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}});e.AbstractDayGridView=w,e.DayBgRow=m,e.DayGrid=b,e.DayGridSlicer=E,e.DayGridView=R,e.SimpleDayGrid=C,e.buildBasicDayTable=H,e.default=k,Object.defineProperty(e,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/src/main/resources/static/packages/daygrid/package.json b/src/main/resources/static/packages/daygrid/package.json new file mode 100644 index 00000000..0d65be3b --- /dev/null +++ b/src/main/resources/static/packages/daygrid/package.json @@ -0,0 +1,33 @@ +{ + "name": "@fullcalendar/daygrid", + "version": "4.4.0", + "title": "FullCalendar Day Grid Plugin", + "description": "Display events on Month view or DayGrid view", + "keywords": [ + "calendar", + "event", + "full-sized" + ], + "homepage": "https://fullcalendar.io/", + "docs": "https://fullcalendar.io/docs/month-view", + "bugs": "https://fullcalendar.io/reporting-bugs", + "repository": { + "type": "git", + "url": "https://github.com/fullcalendar/fullcalendar.git", + "homepage": "https://github.com/fullcalendar/fullcalendar" + }, + "license": "MIT", + "author": { + "name": "Adam Shaw", + "email": "arshaw@arshaw.com", + "url": "http://arshaw.com/" + }, + "copyright": "2019 Adam Shaw", + "peerDependencies": { + "@fullcalendar/core": "~4.4.0" + }, + "main": "main.js", + "module": "main.esm.js", + "unpkg": "main.min.js", + "types": "main.d.ts" +} diff --git a/src/main/resources/static/packages/google-calendar/LICENSE.txt b/src/main/resources/static/packages/google-calendar/LICENSE.txt new file mode 100644 index 00000000..2149cfbe --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2019 Adam Shaw + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/resources/static/packages/google-calendar/README.md b/src/main/resources/static/packages/google-calendar/README.md new file mode 100644 index 00000000..a4d6c5cc --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/README.md @@ -0,0 +1,8 @@ + +# FullCalendar Google Calendar Plugin + +Fetch events from a public Google Calendar feed + +[View the docs »](https://fullcalendar.io/docs/google-calendar) + +This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar) diff --git a/src/main/resources/static/packages/google-calendar/main.d.ts b/src/main/resources/static/packages/google-calendar/main.d.ts new file mode 100644 index 00000000..1ed96f77 --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/main.d.ts @@ -0,0 +1,21 @@ +// Generated by dts-bundle v0.7.3-fork.1 +// Dependencies for this module: +// main.d.ts + +declare module '@fullcalendar/google-calendar' { + module '@fullcalendar/core' { + interface OptionsInput { + googleCalendarApiKey?: string; + } + } + module '@fullcalendar/core/structs/event-source' { + interface ExtendedEventSourceInput { + googleCalendarApiKey?: string; + googleCalendarId?: string; + googleCalendarApiBase?: string; + } + } + const _default: import("@fullcalendar/core").PluginDef; + export default _default; +} + diff --git a/src/main/resources/static/packages/google-calendar/main.esm.js b/src/main/resources/static/packages/google-calendar/main.esm.js new file mode 100644 index 00000000..0b89d9c0 --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/main.esm.js @@ -0,0 +1,167 @@ +/*! +FullCalendar Google Calendar Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +import { createPlugin, refineProps, requestJson, addDays } from '@fullcalendar/core'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +// TODO: expose somehow +var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars'; +var STANDARD_PROPS = { + url: String, + googleCalendarApiKey: String, + googleCalendarId: String, + googleCalendarApiBase: String, + data: null +}; +var eventSourceDef = { + parseMeta: function (raw) { + if (typeof raw === 'string') { + raw = { url: raw }; + } + if (typeof raw === 'object') { + var standardProps = refineProps(raw, STANDARD_PROPS); + if (!standardProps.googleCalendarId && standardProps.url) { + standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url); + } + delete standardProps.url; + if (standardProps.googleCalendarId) { + return standardProps; + } + } + return null; + }, + fetch: function (arg, onSuccess, onFailure) { + var calendar = arg.calendar; + var meta = arg.eventSource.meta; + var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey'); + if (!apiKey) { + onFailure({ + message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/' + }); + } + else { + var url = buildUrl(meta); + var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv); + requestJson('GET', url, requestParams_1, function (body, xhr) { + if (body.error) { + onFailure({ + message: 'Google Calendar API: ' + body.error.message, + errors: body.error.errors, + xhr: xhr + }); + } + else { + onSuccess({ + rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone), + xhr: xhr + }); + } + }, function (message, xhr) { + onFailure({ message: message, xhr: xhr }); + }); + } + } +}; +function parseGoogleCalendarId(url) { + var match; + // detect if the ID was specified as a single string. + // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars. + if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) { + return url; + } + else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) || + (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) { + return decodeURIComponent(match[1]); + } +} +function buildUrl(meta) { + var apiBase = meta.googleCalendarApiBase; + if (!apiBase) { + apiBase = API_BASE; + } + return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events'; +} +function buildRequestParams(range, apiKey, extraParams, dateEnv) { + var params; + var startStr; + var endStr; + if (dateEnv.canComputeOffset) { + // strings will naturally have offsets, which GCal needs + startStr = dateEnv.formatIso(range.start); + endStr = dateEnv.formatIso(range.end); + } + else { + // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day + // from the UTC day-start to guarantee we're getting all the events + // (start/end will be UTC-coerced dates, so toISOString is okay) + startStr = addDays(range.start, -1).toISOString(); + endStr = addDays(range.end, 1).toISOString(); + } + params = __assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 }); + if (dateEnv.timeZone !== 'local') { + params.timeZone = dateEnv.timeZone; + } + return params; +} +function gcalItemsToRawEventDefs(items, gcalTimezone) { + return items.map(function (item) { + return gcalItemToRawEventDef(item, gcalTimezone); + }); +} +function gcalItemToRawEventDef(item, gcalTimezone) { + var url = item.htmlLink || null; + // make the URLs for each event show times in the correct timezone + if (url && gcalTimezone) { + url = injectQsComponent(url, 'ctz=' + gcalTimezone); + } + return { + id: item.id, + title: item.summary, + start: item.start.dateTime || item.start.date, + end: item.end.dateTime || item.end.date, + url: url, + location: item.location, + description: item.description + }; +} +// Injects a string like "arg=value" into the querystring of a URL +// TODO: move to a general util file? +function injectQsComponent(url, component) { + // inject it after the querystring but before the fragment + return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) { + return (qs ? qs + '&' : '?') + component + hash; + }); +} +var main = createPlugin({ + eventSourceDefs: [eventSourceDef] +}); + +export default main; diff --git a/src/main/resources/static/packages/google-calendar/main.js b/src/main/resources/static/packages/google-calendar/main.js new file mode 100644 index 00000000..7dbdbd6b --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/main.js @@ -0,0 +1,175 @@ +/*! +FullCalendar Google Calendar Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : + typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) : + (global = global || self, factory(global.FullCalendarGoogleCalendar = {}, global.FullCalendar)); +}(this, function (exports, core) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + // TODO: expose somehow + var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars'; + var STANDARD_PROPS = { + url: String, + googleCalendarApiKey: String, + googleCalendarId: String, + googleCalendarApiBase: String, + data: null + }; + var eventSourceDef = { + parseMeta: function (raw) { + if (typeof raw === 'string') { + raw = { url: raw }; + } + if (typeof raw === 'object') { + var standardProps = core.refineProps(raw, STANDARD_PROPS); + if (!standardProps.googleCalendarId && standardProps.url) { + standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url); + } + delete standardProps.url; + if (standardProps.googleCalendarId) { + return standardProps; + } + } + return null; + }, + fetch: function (arg, onSuccess, onFailure) { + var calendar = arg.calendar; + var meta = arg.eventSource.meta; + var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey'); + if (!apiKey) { + onFailure({ + message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/' + }); + } + else { + var url = buildUrl(meta); + var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv); + core.requestJson('GET', url, requestParams_1, function (body, xhr) { + if (body.error) { + onFailure({ + message: 'Google Calendar API: ' + body.error.message, + errors: body.error.errors, + xhr: xhr + }); + } + else { + onSuccess({ + rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone), + xhr: xhr + }); + } + }, function (message, xhr) { + onFailure({ message: message, xhr: xhr }); + }); + } + } + }; + function parseGoogleCalendarId(url) { + var match; + // detect if the ID was specified as a single string. + // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars. + if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) { + return url; + } + else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) || + (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) { + return decodeURIComponent(match[1]); + } + } + function buildUrl(meta) { + var apiBase = meta.googleCalendarApiBase; + if (!apiBase) { + apiBase = API_BASE; + } + return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events'; + } + function buildRequestParams(range, apiKey, extraParams, dateEnv) { + var params; + var startStr; + var endStr; + if (dateEnv.canComputeOffset) { + // strings will naturally have offsets, which GCal needs + startStr = dateEnv.formatIso(range.start); + endStr = dateEnv.formatIso(range.end); + } + else { + // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day + // from the UTC day-start to guarantee we're getting all the events + // (start/end will be UTC-coerced dates, so toISOString is okay) + startStr = core.addDays(range.start, -1).toISOString(); + endStr = core.addDays(range.end, 1).toISOString(); + } + params = __assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 }); + if (dateEnv.timeZone !== 'local') { + params.timeZone = dateEnv.timeZone; + } + return params; + } + function gcalItemsToRawEventDefs(items, gcalTimezone) { + return items.map(function (item) { + return gcalItemToRawEventDef(item, gcalTimezone); + }); + } + function gcalItemToRawEventDef(item, gcalTimezone) { + var url = item.htmlLink || null; + // make the URLs for each event show times in the correct timezone + if (url && gcalTimezone) { + url = injectQsComponent(url, 'ctz=' + gcalTimezone); + } + return { + id: item.id, + title: item.summary, + start: item.start.dateTime || item.start.date, + end: item.end.dateTime || item.end.date, + url: url, + location: item.location, + description: item.description + }; + } + // Injects a string like "arg=value" into the querystring of a URL + // TODO: move to a general util file? + function injectQsComponent(url, component) { + // inject it after the querystring but before the fragment + return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) { + return (qs ? qs + '&' : '?') + component + hash; + }); + } + var main = core.createPlugin({ + eventSourceDefs: [eventSourceDef] + }); + + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/main/resources/static/packages/google-calendar/main.js.map b/src/main/resources/static/packages/google-calendar/main.js.map new file mode 100644 index 00000000..10d54610 --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sources":["../../../tmp/tsc-output/packages/google-calendar/src/main.js"],"sourcesContent":["import * as tslib_1 from \"tslib\";\nimport { createPlugin, refineProps, addDays, requestJson } from '@fullcalendar/core';\n// TODO: expose somehow\nvar API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';\nvar STANDARD_PROPS = {\n url: String,\n googleCalendarApiKey: String,\n googleCalendarId: String,\n googleCalendarApiBase: String,\n data: null\n};\nvar eventSourceDef = {\n parseMeta: function (raw) {\n if (typeof raw === 'string') {\n raw = { url: raw };\n }\n if (typeof raw === 'object') {\n var standardProps = refineProps(raw, STANDARD_PROPS);\n if (!standardProps.googleCalendarId && standardProps.url) {\n standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url);\n }\n delete standardProps.url;\n if (standardProps.googleCalendarId) {\n return standardProps;\n }\n }\n return null;\n },\n fetch: function (arg, onSuccess, onFailure) {\n var calendar = arg.calendar;\n var meta = arg.eventSource.meta;\n var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey');\n if (!apiKey) {\n onFailure({\n message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/'\n });\n }\n else {\n var url = buildUrl(meta);\n var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv);\n requestJson('GET', url, requestParams_1, function (body, xhr) {\n if (body.error) {\n onFailure({\n message: 'Google Calendar API: ' + body.error.message,\n errors: body.error.errors,\n xhr: xhr\n });\n }\n else {\n onSuccess({\n rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone),\n xhr: xhr\n });\n }\n }, function (message, xhr) {\n onFailure({ message: message, xhr: xhr });\n });\n }\n }\n};\nfunction parseGoogleCalendarId(url) {\n var match;\n // detect if the ID was specified as a single string.\n // will match calendars like \"asdf1234@calendar.google.com\" in addition to person email calendars.\n if (/^[^\\/]+@([^\\/\\.]+\\.)*(google|googlemail|gmail)\\.com$/.test(url)) {\n return url;\n }\n else if ((match = /^https:\\/\\/www.googleapis.com\\/calendar\\/v3\\/calendars\\/([^\\/]*)/.exec(url)) ||\n (match = /^https?:\\/\\/www.google.com\\/calendar\\/feeds\\/([^\\/]*)/.exec(url))) {\n return decodeURIComponent(match[1]);\n }\n}\nfunction buildUrl(meta) {\n var apiBase = meta.googleCalendarApiBase;\n if (!apiBase) {\n apiBase = API_BASE;\n }\n return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events';\n}\nfunction buildRequestParams(range, apiKey, extraParams, dateEnv) {\n var params;\n var startStr;\n var endStr;\n if (dateEnv.canComputeOffset) {\n // strings will naturally have offsets, which GCal needs\n startStr = dateEnv.formatIso(range.start);\n endStr = dateEnv.formatIso(range.end);\n }\n else {\n // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day\n // from the UTC day-start to guarantee we're getting all the events\n // (start/end will be UTC-coerced dates, so toISOString is okay)\n startStr = addDays(range.start, -1).toISOString();\n endStr = addDays(range.end, 1).toISOString();\n }\n params = tslib_1.__assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 });\n if (dateEnv.timeZone !== 'local') {\n params.timeZone = dateEnv.timeZone;\n }\n return params;\n}\nfunction gcalItemsToRawEventDefs(items, gcalTimezone) {\n return items.map(function (item) {\n return gcalItemToRawEventDef(item, gcalTimezone);\n });\n}\nfunction gcalItemToRawEventDef(item, gcalTimezone) {\n var url = item.htmlLink || null;\n // make the URLs for each event show times in the correct timezone\n if (url && gcalTimezone) {\n url = injectQsComponent(url, 'ctz=' + gcalTimezone);\n }\n return {\n id: item.id,\n title: item.summary,\n start: item.start.dateTime || item.start.date,\n end: item.end.dateTime || item.end.date,\n url: url,\n location: item.location,\n description: item.description\n };\n}\n// Injects a string like \"arg=value\" into the querystring of a URL\n// TODO: move to a general util file?\nfunction injectQsComponent(url, component) {\n // inject it after the querystring but before the fragment\n return url.replace(/(\\?.*?)?(#|$)/, function (whole, qs, hash) {\n return (qs ? qs + '&' : '?') + component + hash;\n });\n}\nexport default createPlugin({\n eventSourceDefs: [eventSourceDef]\n});\n"],"names":["tslib_1.__assign"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/google-calendar/main.min.js b/src/main/resources/static/packages/google-calendar/main.min.js new file mode 100644 index 00000000..3149a2dc --- /dev/null +++ b/src/main/resources/static/packages/google-calendar/main.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Google Calendar Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],r):r((e=e||self).FullCalendarGoogleCalendar={},e.FullCalendar)}(this,function(e,r){"use strict";var n=function(){return(n=Object.assign||function(e){for(var r,n=1,t=arguments.length;n void; + onPointerMove: (ev: PointerDragEvent) => void; + onPointerUp: (ev: PointerDragEvent) => void; + startDelay(ev: PointerDragEvent): void; + handleDelayEnd(ev: PointerDragEvent): void; + handleDistanceSurpassed(ev: PointerDragEvent): void; + tryStartDrag(ev: PointerDragEvent): void; + tryStopDrag(ev: PointerDragEvent): void; + stopDrag(ev: PointerDragEvent): void; + setIgnoreMove(bool: boolean): void; + setMirrorIsVisible(bool: boolean): void; + setMirrorNeedsRevert(bool: boolean): void; + setAutoScrollEnabled(bool: boolean): void; + } +} + +declare module '@fullcalendar/interaction/dnd/PointerDragging' { + import { EmitterMixin, PointerDragEvent } from '@fullcalendar/core'; + export { PointerDragging as default, PointerDragging }; + class PointerDragging { + containerEl: EventTarget; + subjectEl: HTMLElement | null; + downEl: HTMLElement | null; + emitter: EmitterMixin; + selector: string; + handleSelector: string; + shouldIgnoreMove: boolean; + shouldWatchScroll: boolean; + isDragging: boolean; + isTouchDragging: boolean; + wasTouchScroll: boolean; + origPageX: number; + origPageY: number; + prevPageX: number; + prevPageY: number; + prevScrollX: number; + prevScrollY: number; + constructor(containerEl: EventTarget); + destroy(): void; + tryStart(ev: UIEvent): boolean; + cleanup(): void; + querySubjectEl(ev: UIEvent): HTMLElement; + handleMouseDown: (ev: MouseEvent) => void; + handleMouseMove: (ev: MouseEvent) => void; + handleMouseUp: (ev: MouseEvent) => void; + shouldIgnoreMouse(): number | boolean; + handleTouchStart: (ev: TouchEvent) => void; + handleTouchMove: (ev: TouchEvent) => void; + handleTouchEnd: (ev: TouchEvent) => void; + handleTouchScroll: () => void; + cancelTouchScroll(): void; + initScrollWatch(ev: PointerDragEvent): void; + recordCoords(ev: PointerDragEvent): void; + handleScroll: (ev: UIEvent) => void; + destroyScrollWatch(): void; + createEventFromMouse(ev: MouseEvent, isFirst?: boolean): PointerDragEvent; + createEventFromTouch(ev: TouchEvent, isFirst?: boolean): PointerDragEvent; + } +} + +declare module '@fullcalendar/interaction/interactions-external/ExternalDraggable' { + import { PointerDragEvent } from '@fullcalendar/core'; + import FeaturefulElementDragging from '@fullcalendar/interaction/dnd/FeaturefulElementDragging'; + import { DragMetaGenerator } from '@fullcalendar/interaction/interactions-external/ExternalElementDragging'; + export interface ExternalDraggableSettings { + eventData?: DragMetaGenerator; + itemSelector?: string; + minDistance?: number; + longPressDelay?: number; + appendTo?: HTMLElement; + } + export { ExternalDraggable as default, ExternalDraggable }; + class ExternalDraggable { + dragging: FeaturefulElementDragging; + settings: ExternalDraggableSettings; + constructor(el: HTMLElement, settings?: ExternalDraggableSettings); + handlePointerDown: (ev: PointerDragEvent) => void; + handleDragStart: (ev: PointerDragEvent) => void; + destroy(): void; + } +} + +declare module '@fullcalendar/interaction/interactions-external/ThirdPartyDraggable' { + import { DragMetaGenerator } from '@fullcalendar/interaction/interactions-external/ExternalElementDragging'; + import InferredElementDragging from '@fullcalendar/interaction/interactions-external/InferredElementDragging'; + export interface ThirdPartyDraggableSettings { + eventData?: DragMetaGenerator; + itemSelector?: string; + mirrorSelector?: string; + } + export { ThirdPartyDraggable as default, ThirdPartyDraggable }; + class ThirdPartyDraggable { + dragging: InferredElementDragging; + constructor(containerOrSettings?: EventTarget | ThirdPartyDraggableSettings, settings?: ThirdPartyDraggableSettings); + destroy(): void; + } +} + +declare module '@fullcalendar/interaction/dnd/ElementMirror' { + import { Rect } from '@fullcalendar/core'; + export { ElementMirror as default, ElementMirror }; + class ElementMirror { + isVisible: boolean; + origScreenX?: number; + origScreenY?: number; + deltaX?: number; + deltaY?: number; + sourceEl: HTMLElement | null; + mirrorEl: HTMLElement | null; + sourceElRect: Rect | null; + parentNode: HTMLElement; + zIndex: number; + revertDuration: number; + start(sourceEl: HTMLElement, pageX: number, pageY: number): void; + handleMove(pageX: number, pageY: number): void; + setIsVisible(bool: boolean): void; + stop(needsRevertAnimation: boolean, callback: () => void): void; + doRevertAnimation(callback: () => void, revertDuration: number): void; + cleanup(): void; + updateElPosition(): void; + getMirrorEl(): HTMLElement; + } +} + +declare module '@fullcalendar/interaction/dnd/AutoScroller' { + import { ScrollGeomCache } from '@fullcalendar/interaction/scroll-geom-cache'; + export { AutoScroller as default, AutoScroller }; + class AutoScroller { + isEnabled: boolean; + scrollQuery: (Window | string)[]; + edgeThreshold: number; + maxVelocity: number; + pointerScreenX: number | null; + pointerScreenY: number | null; + isAnimating: boolean; + scrollCaches: ScrollGeomCache[] | null; + msSinceRequest?: number; + everMovedUp: boolean; + everMovedDown: boolean; + everMovedLeft: boolean; + everMovedRight: boolean; + start(pageX: number, pageY: number): void; + handleMove(pageX: number, pageY: number): void; + stop(): void; + requestAnimation(now: number): void; + } +} + +declare module '@fullcalendar/interaction/interactions-external/ExternalElementDragging' { + import { Hit, PointerDragEvent, EventTuple, DatePointApi, Calendar, EventInteractionState, DragMetaInput, DragMeta, View, ElementDragging } from '@fullcalendar/core'; + import HitDragging from '@fullcalendar/interaction/interactions/HitDragging'; + export type DragMetaGenerator = DragMetaInput | ((el: HTMLElement) => DragMetaInput); + export interface ExternalDropApi extends DatePointApi { + draggedEl: HTMLElement; + jsEvent: UIEvent; + view: View; + } + export { ExternalElementDragging as default, ExternalElementDragging }; + class ExternalElementDragging { + hitDragging: HitDragging; + receivingCalendar: Calendar | null; + droppableEvent: EventTuple | null; + suppliedDragMeta: DragMetaGenerator | null; + dragMeta: DragMeta | null; + constructor(dragging: ElementDragging, suppliedDragMeta?: DragMetaGenerator); + handleDragStart: (ev: PointerDragEvent) => void; + buildDragMeta(subjectEl: HTMLElement): DragMeta; + handleHitUpdate: (hit: Hit, isFinal: boolean, ev: PointerDragEvent) => void; + handleDragEnd: (pev: PointerDragEvent) => void; + displayDrag(nextCalendar: Calendar | null, state: EventInteractionState): void; + clearDrag(): void; + canDropElOnCalendar(el: HTMLElement, receivingCalendar: Calendar): boolean; + } +} + +declare module '@fullcalendar/interaction/interactions-external/InferredElementDragging' { + import { PointerDragEvent, ElementDragging } from '@fullcalendar/core'; + import PointerDragging from '@fullcalendar/interaction/dnd/PointerDragging'; + export { InferredElementDragging as default, InferredElementDragging }; + class InferredElementDragging extends ElementDragging { + pointer: PointerDragging; + shouldIgnoreMove: boolean; + mirrorSelector: string; + currentMirrorEl: HTMLElement | null; + constructor(containerEl: HTMLElement); + destroy(): void; + handlePointerDown: (ev: PointerDragEvent) => void; + handlePointerMove: (ev: PointerDragEvent) => void; + handlePointerUp: (ev: PointerDragEvent) => void; + setIgnoreMove(bool: boolean): void; + setMirrorIsVisible(bool: boolean): void; + } +} + +declare module '@fullcalendar/interaction/scroll-geom-cache' { + import { Rect, ScrollController } from '@fullcalendar/core'; + export abstract class ScrollGeomCache extends ScrollController { + clientRect: Rect; + origScrollTop: number; + origScrollLeft: number; + protected scrollController: ScrollController; + protected doesListening: boolean; + protected scrollTop: number; + protected scrollLeft: number; + protected scrollWidth: number; + protected scrollHeight: number; + protected clientWidth: number; + protected clientHeight: number; + constructor(scrollController: ScrollController, doesListening: boolean); + abstract getEventTarget(): EventTarget; + abstract computeClientRect(): Rect; + destroy(): void; + handleScroll: () => void; + getScrollTop(): number; + getScrollLeft(): number; + setScrollTop(top: number): void; + setScrollLeft(top: number): void; + getClientWidth(): number; + getClientHeight(): number; + getScrollWidth(): number; + getScrollHeight(): number; + handleScrollChange(): void; + } + export class ElementScrollGeomCache extends ScrollGeomCache { + constructor(el: HTMLElement, doesListening: boolean); + getEventTarget(): EventTarget; + computeClientRect(): { + left: number; + right: number; + top: number; + bottom: number; + }; + } + export class WindowScrollGeomCache extends ScrollGeomCache { + constructor(doesListening: boolean); + getEventTarget(): EventTarget; + computeClientRect(): Rect; + handleScrollChange(): void; + } +} + +declare module '@fullcalendar/interaction/interactions/HitDragging' { + import { EmitterMixin, PointerDragEvent, Point, Hit, InteractionSettingsStore, ElementDragging } from '@fullcalendar/core'; + import OffsetTracker from '@fullcalendar/interaction/OffsetTracker'; + export { HitDragging as default, HitDragging }; + class HitDragging { + droppableStore: InteractionSettingsStore; + dragging: ElementDragging; + emitter: EmitterMixin; + useSubjectCenter: boolean; + requireInitial: boolean; + offsetTrackers: { + [componentUid: string]: OffsetTracker; + }; + initialHit: Hit | null; + movingHit: Hit | null; + finalHit: Hit | null; + coordAdjust?: Point; + constructor(dragging: ElementDragging, droppableStore: InteractionSettingsStore); + handlePointerDown: (ev: PointerDragEvent) => void; + processFirstCoord(ev: PointerDragEvent): void; + handleDragStart: (ev: PointerDragEvent) => void; + handleDragMove: (ev: PointerDragEvent) => void; + handlePointerUp: (ev: PointerDragEvent) => void; + handleDragEnd: (ev: PointerDragEvent) => void; + handleMove(ev: PointerDragEvent, forceHandle?: boolean): void; + prepareHits(): void; + releaseHits(): void; + queryHitForOffset(offsetLeft: number, offsetTop: number): Hit | null; + } + export function isHitsEqual(hit0: Hit | null, hit1: Hit | null): boolean; +} + +declare module '@fullcalendar/interaction/OffsetTracker' { + import { Rect } from '@fullcalendar/core'; + import { ElementScrollGeomCache } from '@fullcalendar/interaction/scroll-geom-cache'; + export { OffsetTracker as default, OffsetTracker }; + class OffsetTracker { + scrollCaches: ElementScrollGeomCache[]; + origRect: Rect; + constructor(el: HTMLElement); + destroy(): void; + computeLeft(): number; + computeTop(): number; + isWithinClipping(pageX: number, pageY: number): boolean; + } +} + diff --git a/src/main/resources/static/packages/interaction/main.esm.js b/src/main/resources/static/packages/interaction/main.esm.js new file mode 100644 index 00000000..b9a49ad6 --- /dev/null +++ b/src/main/resources/static/packages/interaction/main.esm.js @@ -0,0 +1,2141 @@ +/*! +FullCalendar Interaction Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +import { config, elementClosest, EmitterMixin, applyStyle, whenTransitionDone, removeElement, ScrollController, ElementScrollController, computeInnerRect, WindowScrollController, preventSelection, preventContextMenu, allowSelection, allowContextMenu, ElementDragging, computeRect, getClippingParents, pointInsideRect, isDateSpansEqual, constrainPoint, intersectRects, getRectCenter, diffPoints, mapHash, rangeContainsRange, interactionSettingsToStore, Interaction, enableCursor, disableCursor, compareNumbers, getElSeg, getRelevantEvents, EventApi, createEmptyEventStore, applyMutationToEventStore, interactionSettingsStore, startOfDay, diffDates, createDuration, eventTupleToStore, isInteractionValid, parseDragMeta, elementMatches, parseEventDef, createEventInstance, globalDefaults, createPlugin } from '@fullcalendar/core'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +config.touchMouseIgnoreWait = 500; +var ignoreMouseDepth = 0; +var listenerCnt = 0; +var isWindowTouchMoveCancelled = false; +/* +Uses a "pointer" abstraction, which monitors UI events for both mouse and touch. +Tracks when the pointer "drags" on a certain element, meaning down+move+up. + +Also, tracks if there was touch-scrolling. +Also, can prevent touch-scrolling from happening. +Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement. + +emits: +- pointerdown +- pointermove +- pointerup +*/ +var PointerDragging = /** @class */ (function () { + function PointerDragging(containerEl) { + var _this = this; + this.subjectEl = null; + this.downEl = null; + // options that can be directly assigned by caller + this.selector = ''; // will cause subjectEl in all emitted events to be this element + this.handleSelector = ''; + this.shouldIgnoreMove = false; + this.shouldWatchScroll = true; // for simulating pointermove on scroll + // internal states + this.isDragging = false; + this.isTouchDragging = false; + this.wasTouchScroll = false; + // Mouse + // ---------------------------------------------------------------------------------------------------- + this.handleMouseDown = function (ev) { + if (!_this.shouldIgnoreMouse() && + isPrimaryMouseButton(ev) && + _this.tryStart(ev)) { + var pev = _this.createEventFromMouse(ev, true); + _this.emitter.trigger('pointerdown', pev); + _this.initScrollWatch(pev); + if (!_this.shouldIgnoreMove) { + document.addEventListener('mousemove', _this.handleMouseMove); + } + document.addEventListener('mouseup', _this.handleMouseUp); + } + }; + this.handleMouseMove = function (ev) { + var pev = _this.createEventFromMouse(ev); + _this.recordCoords(pev); + _this.emitter.trigger('pointermove', pev); + }; + this.handleMouseUp = function (ev) { + document.removeEventListener('mousemove', _this.handleMouseMove); + document.removeEventListener('mouseup', _this.handleMouseUp); + _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev)); + _this.cleanup(); // call last so that pointerup has access to props + }; + // Touch + // ---------------------------------------------------------------------------------------------------- + this.handleTouchStart = function (ev) { + if (_this.tryStart(ev)) { + _this.isTouchDragging = true; + var pev = _this.createEventFromTouch(ev, true); + _this.emitter.trigger('pointerdown', pev); + _this.initScrollWatch(pev); + // unlike mouse, need to attach to target, not document + // https://stackoverflow.com/a/45760014 + var target = ev.target; + if (!_this.shouldIgnoreMove) { + target.addEventListener('touchmove', _this.handleTouchMove); + } + target.addEventListener('touchend', _this.handleTouchEnd); + target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end + // attach a handler to get called when ANY scroll action happens on the page. + // this was impossible to do with normal on/off because 'scroll' doesn't bubble. + // http://stackoverflow.com/a/32954565/96342 + window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture + ); + } + }; + this.handleTouchMove = function (ev) { + var pev = _this.createEventFromTouch(ev); + _this.recordCoords(pev); + _this.emitter.trigger('pointermove', pev); + }; + this.handleTouchEnd = function (ev) { + if (_this.isDragging) { // done to guard against touchend followed by touchcancel + var target = ev.target; + target.removeEventListener('touchmove', _this.handleTouchMove); + target.removeEventListener('touchend', _this.handleTouchEnd); + target.removeEventListener('touchcancel', _this.handleTouchEnd); + window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true + _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev)); + _this.cleanup(); // call last so that pointerup has access to props + _this.isTouchDragging = false; + startIgnoringMouse(); + } + }; + this.handleTouchScroll = function () { + _this.wasTouchScroll = true; + }; + this.handleScroll = function (ev) { + if (!_this.shouldIgnoreMove) { + var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX; + var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY; + _this.emitter.trigger('pointermove', { + origEvent: ev, + isTouch: _this.isTouchDragging, + subjectEl: _this.subjectEl, + pageX: pageX, + pageY: pageY, + deltaX: pageX - _this.origPageX, + deltaY: pageY - _this.origPageY + }); + } + }; + this.containerEl = containerEl; + this.emitter = new EmitterMixin(); + containerEl.addEventListener('mousedown', this.handleMouseDown); + containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true }); + listenerCreated(); + } + PointerDragging.prototype.destroy = function () { + this.containerEl.removeEventListener('mousedown', this.handleMouseDown); + this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true }); + listenerDestroyed(); + }; + PointerDragging.prototype.tryStart = function (ev) { + var subjectEl = this.querySubjectEl(ev); + var downEl = ev.target; + if (subjectEl && + (!this.handleSelector || elementClosest(downEl, this.handleSelector))) { + this.subjectEl = subjectEl; + this.downEl = downEl; + this.isDragging = true; // do this first so cancelTouchScroll will work + this.wasTouchScroll = false; + return true; + } + return false; + }; + PointerDragging.prototype.cleanup = function () { + isWindowTouchMoveCancelled = false; + this.isDragging = false; + this.subjectEl = null; + this.downEl = null; + // keep wasTouchScroll around for later access + this.destroyScrollWatch(); + }; + PointerDragging.prototype.querySubjectEl = function (ev) { + if (this.selector) { + return elementClosest(ev.target, this.selector); + } + else { + return this.containerEl; + } + }; + PointerDragging.prototype.shouldIgnoreMouse = function () { + return ignoreMouseDepth || this.isTouchDragging; + }; + // can be called by user of this class, to cancel touch-based scrolling for the current drag + PointerDragging.prototype.cancelTouchScroll = function () { + if (this.isDragging) { + isWindowTouchMoveCancelled = true; + } + }; + // Scrolling that simulates pointermoves + // ---------------------------------------------------------------------------------------------------- + PointerDragging.prototype.initScrollWatch = function (ev) { + if (this.shouldWatchScroll) { + this.recordCoords(ev); + window.addEventListener('scroll', this.handleScroll, true); // useCapture=true + } + }; + PointerDragging.prototype.recordCoords = function (ev) { + if (this.shouldWatchScroll) { + this.prevPageX = ev.pageX; + this.prevPageY = ev.pageY; + this.prevScrollX = window.pageXOffset; + this.prevScrollY = window.pageYOffset; + } + }; + PointerDragging.prototype.destroyScrollWatch = function () { + if (this.shouldWatchScroll) { + window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true + } + }; + // Event Normalization + // ---------------------------------------------------------------------------------------------------- + PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) { + var deltaX = 0; + var deltaY = 0; + // TODO: repeat code + if (isFirst) { + this.origPageX = ev.pageX; + this.origPageY = ev.pageY; + } + else { + deltaX = ev.pageX - this.origPageX; + deltaY = ev.pageY - this.origPageY; + } + return { + origEvent: ev, + isTouch: false, + subjectEl: this.subjectEl, + pageX: ev.pageX, + pageY: ev.pageY, + deltaX: deltaX, + deltaY: deltaY + }; + }; + PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) { + var touches = ev.touches; + var pageX; + var pageY; + var deltaX = 0; + var deltaY = 0; + // if touch coords available, prefer, + // because FF would give bad ev.pageX ev.pageY + if (touches && touches.length) { + pageX = touches[0].pageX; + pageY = touches[0].pageY; + } + else { + pageX = ev.pageX; + pageY = ev.pageY; + } + // TODO: repeat code + if (isFirst) { + this.origPageX = pageX; + this.origPageY = pageY; + } + else { + deltaX = pageX - this.origPageX; + deltaY = pageY - this.origPageY; + } + return { + origEvent: ev, + isTouch: true, + subjectEl: this.subjectEl, + pageX: pageX, + pageY: pageY, + deltaX: deltaX, + deltaY: deltaY + }; + }; + return PointerDragging; +}()); +// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac) +function isPrimaryMouseButton(ev) { + return ev.button === 0 && !ev.ctrlKey; +} +// Ignoring fake mouse events generated by touch +// ---------------------------------------------------------------------------------------------------- +function startIgnoringMouse() { + ignoreMouseDepth++; + setTimeout(function () { + ignoreMouseDepth--; + }, config.touchMouseIgnoreWait); +} +// We want to attach touchmove as early as possible for Safari +// ---------------------------------------------------------------------------------------------------- +function listenerCreated() { + if (!(listenerCnt++)) { + window.addEventListener('touchmove', onWindowTouchMove, { passive: false }); + } +} +function listenerDestroyed() { + if (!(--listenerCnt)) { + window.removeEventListener('touchmove', onWindowTouchMove, { passive: false }); + } +} +function onWindowTouchMove(ev) { + if (isWindowTouchMoveCancelled) { + ev.preventDefault(); + } +} + +/* +An effect in which an element follows the movement of a pointer across the screen. +The moving element is a clone of some other element. +Must call start + handleMove + stop. +*/ +var ElementMirror = /** @class */ (function () { + function ElementMirror() { + this.isVisible = false; // must be explicitly enabled + this.sourceEl = null; + this.mirrorEl = null; + this.sourceElRect = null; // screen coords relative to viewport + // options that can be set directly by caller + this.parentNode = document.body; + this.zIndex = 9999; + this.revertDuration = 0; + } + ElementMirror.prototype.start = function (sourceEl, pageX, pageY) { + this.sourceEl = sourceEl; + this.sourceElRect = this.sourceEl.getBoundingClientRect(); + this.origScreenX = pageX - window.pageXOffset; + this.origScreenY = pageY - window.pageYOffset; + this.deltaX = 0; + this.deltaY = 0; + this.updateElPosition(); + }; + ElementMirror.prototype.handleMove = function (pageX, pageY) { + this.deltaX = (pageX - window.pageXOffset) - this.origScreenX; + this.deltaY = (pageY - window.pageYOffset) - this.origScreenY; + this.updateElPosition(); + }; + // can be called before start + ElementMirror.prototype.setIsVisible = function (bool) { + if (bool) { + if (!this.isVisible) { + if (this.mirrorEl) { + this.mirrorEl.style.display = ''; + } + this.isVisible = bool; // needs to happen before updateElPosition + this.updateElPosition(); // because was not updating the position while invisible + } + } + else { + if (this.isVisible) { + if (this.mirrorEl) { + this.mirrorEl.style.display = 'none'; + } + this.isVisible = bool; + } + } + }; + // always async + ElementMirror.prototype.stop = function (needsRevertAnimation, callback) { + var _this = this; + var done = function () { + _this.cleanup(); + callback(); + }; + if (needsRevertAnimation && + this.mirrorEl && + this.isVisible && + this.revertDuration && // if 0, transition won't work + (this.deltaX || this.deltaY) // if same coords, transition won't work + ) { + this.doRevertAnimation(done, this.revertDuration); + } + else { + setTimeout(done, 0); + } + }; + ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) { + var mirrorEl = this.mirrorEl; + var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened + mirrorEl.style.transition = + 'top ' + revertDuration + 'ms,' + + 'left ' + revertDuration + 'ms'; + applyStyle(mirrorEl, { + left: finalSourceElRect.left, + top: finalSourceElRect.top + }); + whenTransitionDone(mirrorEl, function () { + mirrorEl.style.transition = ''; + callback(); + }); + }; + ElementMirror.prototype.cleanup = function () { + if (this.mirrorEl) { + removeElement(this.mirrorEl); + this.mirrorEl = null; + } + this.sourceEl = null; + }; + ElementMirror.prototype.updateElPosition = function () { + if (this.sourceEl && this.isVisible) { + applyStyle(this.getMirrorEl(), { + left: this.sourceElRect.left + this.deltaX, + top: this.sourceElRect.top + this.deltaY + }); + } + }; + ElementMirror.prototype.getMirrorEl = function () { + var sourceElRect = this.sourceElRect; + var mirrorEl = this.mirrorEl; + if (!mirrorEl) { + mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true + // we don't want long taps or any mouse interaction causing selection/menus. + // would use preventSelection(), but that prevents selectstart, causing problems. + mirrorEl.classList.add('fc-unselectable'); + mirrorEl.classList.add('fc-dragging'); + applyStyle(mirrorEl, { + position: 'fixed', + zIndex: this.zIndex, + visibility: '', + boxSizing: 'border-box', + width: sourceElRect.right - sourceElRect.left, + height: sourceElRect.bottom - sourceElRect.top, + right: 'auto', + bottom: 'auto', + margin: 0 + }); + this.parentNode.appendChild(mirrorEl); + } + return mirrorEl; + }; + return ElementMirror; +}()); + +/* +Is a cache for a given element's scroll information (all the info that ScrollController stores) +in addition the "client rectangle" of the element.. the area within the scrollbars. + +The cache can be in one of two modes: +- doesListening:false - ignores when the container is scrolled by someone else +- doesListening:true - watch for scrolling and update the cache +*/ +var ScrollGeomCache = /** @class */ (function (_super) { + __extends(ScrollGeomCache, _super); + function ScrollGeomCache(scrollController, doesListening) { + var _this = _super.call(this) || this; + _this.handleScroll = function () { + _this.scrollTop = _this.scrollController.getScrollTop(); + _this.scrollLeft = _this.scrollController.getScrollLeft(); + _this.handleScrollChange(); + }; + _this.scrollController = scrollController; + _this.doesListening = doesListening; + _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop(); + _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft(); + _this.scrollWidth = scrollController.getScrollWidth(); + _this.scrollHeight = scrollController.getScrollHeight(); + _this.clientWidth = scrollController.getClientWidth(); + _this.clientHeight = scrollController.getClientHeight(); + _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values + if (_this.doesListening) { + _this.getEventTarget().addEventListener('scroll', _this.handleScroll); + } + return _this; + } + ScrollGeomCache.prototype.destroy = function () { + if (this.doesListening) { + this.getEventTarget().removeEventListener('scroll', this.handleScroll); + } + }; + ScrollGeomCache.prototype.getScrollTop = function () { + return this.scrollTop; + }; + ScrollGeomCache.prototype.getScrollLeft = function () { + return this.scrollLeft; + }; + ScrollGeomCache.prototype.setScrollTop = function (top) { + this.scrollController.setScrollTop(top); + if (!this.doesListening) { + // we are not relying on the element to normalize out-of-bounds scroll values + // so we need to sanitize ourselves + this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0); + this.handleScrollChange(); + } + }; + ScrollGeomCache.prototype.setScrollLeft = function (top) { + this.scrollController.setScrollLeft(top); + if (!this.doesListening) { + // we are not relying on the element to normalize out-of-bounds scroll values + // so we need to sanitize ourselves + this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0); + this.handleScrollChange(); + } + }; + ScrollGeomCache.prototype.getClientWidth = function () { + return this.clientWidth; + }; + ScrollGeomCache.prototype.getClientHeight = function () { + return this.clientHeight; + }; + ScrollGeomCache.prototype.getScrollWidth = function () { + return this.scrollWidth; + }; + ScrollGeomCache.prototype.getScrollHeight = function () { + return this.scrollHeight; + }; + ScrollGeomCache.prototype.handleScrollChange = function () { + }; + return ScrollGeomCache; +}(ScrollController)); +var ElementScrollGeomCache = /** @class */ (function (_super) { + __extends(ElementScrollGeomCache, _super); + function ElementScrollGeomCache(el, doesListening) { + return _super.call(this, new ElementScrollController(el), doesListening) || this; + } + ElementScrollGeomCache.prototype.getEventTarget = function () { + return this.scrollController.el; + }; + ElementScrollGeomCache.prototype.computeClientRect = function () { + return computeInnerRect(this.scrollController.el); + }; + return ElementScrollGeomCache; +}(ScrollGeomCache)); +var WindowScrollGeomCache = /** @class */ (function (_super) { + __extends(WindowScrollGeomCache, _super); + function WindowScrollGeomCache(doesListening) { + return _super.call(this, new WindowScrollController(), doesListening) || this; + } + WindowScrollGeomCache.prototype.getEventTarget = function () { + return window; + }; + WindowScrollGeomCache.prototype.computeClientRect = function () { + return { + left: this.scrollLeft, + right: this.scrollLeft + this.clientWidth, + top: this.scrollTop, + bottom: this.scrollTop + this.clientHeight + }; + }; + // the window is the only scroll object that changes it's rectangle relative + // to the document's topleft as it scrolls + WindowScrollGeomCache.prototype.handleScrollChange = function () { + this.clientRect = this.computeClientRect(); + }; + return WindowScrollGeomCache; +}(ScrollGeomCache)); + +// If available we are using native "performance" API instead of "Date" +// Read more about it on MDN: +// https://developer.mozilla.org/en-US/docs/Web/API/Performance +var getTime = typeof performance === 'function' ? performance.now : Date.now; +/* +For a pointer interaction, automatically scrolls certain scroll containers when the pointer +approaches the edge. + +The caller must call start + handleMove + stop. +*/ +var AutoScroller = /** @class */ (function () { + function AutoScroller() { + var _this = this; + // options that can be set by caller + this.isEnabled = true; + this.scrollQuery = [window, '.fc-scroller']; + this.edgeThreshold = 50; // pixels + this.maxVelocity = 300; // pixels per second + // internal state + this.pointerScreenX = null; + this.pointerScreenY = null; + this.isAnimating = false; + this.scrollCaches = null; + // protect against the initial pointerdown being too close to an edge and starting the scroll + this.everMovedUp = false; + this.everMovedDown = false; + this.everMovedLeft = false; + this.everMovedRight = false; + this.animate = function () { + if (_this.isAnimating) { // wasn't cancelled between animation calls + var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset); + if (edge) { + var now = getTime(); + _this.handleSide(edge, (now - _this.msSinceRequest) / 1000); + _this.requestAnimation(now); + } + else { + _this.isAnimating = false; // will stop animation + } + } + }; + } + AutoScroller.prototype.start = function (pageX, pageY) { + if (this.isEnabled) { + this.scrollCaches = this.buildCaches(); + this.pointerScreenX = null; + this.pointerScreenY = null; + this.everMovedUp = false; + this.everMovedDown = false; + this.everMovedLeft = false; + this.everMovedRight = false; + this.handleMove(pageX, pageY); + } + }; + AutoScroller.prototype.handleMove = function (pageX, pageY) { + if (this.isEnabled) { + var pointerScreenX = pageX - window.pageXOffset; + var pointerScreenY = pageY - window.pageYOffset; + var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY; + var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX; + if (yDelta < 0) { + this.everMovedUp = true; + } + else if (yDelta > 0) { + this.everMovedDown = true; + } + if (xDelta < 0) { + this.everMovedLeft = true; + } + else if (xDelta > 0) { + this.everMovedRight = true; + } + this.pointerScreenX = pointerScreenX; + this.pointerScreenY = pointerScreenY; + if (!this.isAnimating) { + this.isAnimating = true; + this.requestAnimation(getTime()); + } + } + }; + AutoScroller.prototype.stop = function () { + if (this.isEnabled) { + this.isAnimating = false; // will stop animation + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + scrollCache.destroy(); + } + this.scrollCaches = null; + } + }; + AutoScroller.prototype.requestAnimation = function (now) { + this.msSinceRequest = now; + requestAnimationFrame(this.animate); + }; + AutoScroller.prototype.handleSide = function (edge, seconds) { + var scrollCache = edge.scrollCache; + var edgeThreshold = this.edgeThreshold; + var invDistance = edgeThreshold - edge.distance; + var velocity = // the closer to the edge, the faster we scroll + (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic + this.maxVelocity * seconds; + var sign = 1; + switch (edge.name) { + case 'left': + sign = -1; + // falls through + case 'right': + scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign); + break; + case 'top': + sign = -1; + // falls through + case 'bottom': + scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign); + break; + } + }; + // left/top are relative to document topleft + AutoScroller.prototype.computeBestEdge = function (left, top) { + var edgeThreshold = this.edgeThreshold; + var bestSide = null; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + var rect = scrollCache.clientRect; + var leftDist = left - rect.left; + var rightDist = rect.right - left; + var topDist = top - rect.top; + var bottomDist = rect.bottom - top; + // completely within the rect? + if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) { + if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() && + (!bestSide || bestSide.distance > topDist)) { + bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist }; + } + if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() && + (!bestSide || bestSide.distance > bottomDist)) { + bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist }; + } + if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() && + (!bestSide || bestSide.distance > leftDist)) { + bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist }; + } + if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() && + (!bestSide || bestSide.distance > rightDist)) { + bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist }; + } + } + } + return bestSide; + }; + AutoScroller.prototype.buildCaches = function () { + return this.queryScrollEls().map(function (el) { + if (el === window) { + return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls + } + else { + return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls + } + }); + }; + AutoScroller.prototype.queryScrollEls = function () { + var els = []; + for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) { + var query = _a[_i]; + if (typeof query === 'object') { + els.push(query); + } + else { + els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query))); + } + } + return els; + }; + return AutoScroller; +}()); + +/* +Monitors dragging on an element. Has a number of high-level features: +- minimum distance required before dragging +- minimum wait time ("delay") before dragging +- a mirror element that follows the pointer +*/ +var FeaturefulElementDragging = /** @class */ (function (_super) { + __extends(FeaturefulElementDragging, _super); + function FeaturefulElementDragging(containerEl) { + var _this = _super.call(this, containerEl) || this; + // options that can be directly set by caller + // the caller can also set the PointerDragging's options as well + _this.delay = null; + _this.minDistance = 0; + _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag + _this.mirrorNeedsRevert = false; + _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup + _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation + _this.isDelayEnded = false; + _this.isDistanceSurpassed = false; + _this.delayTimeoutId = null; + _this.onPointerDown = function (ev) { + if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going + _this.isInteracting = true; + _this.isDelayEnded = false; + _this.isDistanceSurpassed = false; + preventSelection(document.body); + preventContextMenu(document.body); + // prevent links from being visited if there's an eventual drag. + // also prevents selection in older browsers (maybe?). + // not necessary for touch, besides, browser would complain about passiveness. + if (!ev.isTouch) { + ev.origEvent.preventDefault(); + } + _this.emitter.trigger('pointerdown', ev); + if (!_this.pointer.shouldIgnoreMove) { + // actions related to initiating dragstart+dragmove+dragend... + _this.mirror.setIsVisible(false); // reset. caller must set-visible + _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down + _this.startDelay(ev); + if (!_this.minDistance) { + _this.handleDistanceSurpassed(ev); + } + } + } + }; + _this.onPointerMove = function (ev) { + if (_this.isInteracting) { // if false, still waiting for previous drag's revert + _this.emitter.trigger('pointermove', ev); + if (!_this.isDistanceSurpassed) { + var minDistance = _this.minDistance; + var distanceSq = void 0; // current distance from the origin, squared + var deltaX = ev.deltaX, deltaY = ev.deltaY; + distanceSq = deltaX * deltaX + deltaY * deltaY; + if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem + _this.handleDistanceSurpassed(ev); + } + } + if (_this.isDragging) { + // a real pointer move? (not one simulated by scrolling) + if (ev.origEvent.type !== 'scroll') { + _this.mirror.handleMove(ev.pageX, ev.pageY); + _this.autoScroller.handleMove(ev.pageX, ev.pageY); + } + _this.emitter.trigger('dragmove', ev); + } + } + }; + _this.onPointerUp = function (ev) { + if (_this.isInteracting) { // if false, still waiting for previous drag's revert + _this.isInteracting = false; + allowSelection(document.body); + allowContextMenu(document.body); + _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert + if (_this.isDragging) { + _this.autoScroller.stop(); + _this.tryStopDrag(ev); // which will stop the mirror + } + if (_this.delayTimeoutId) { + clearTimeout(_this.delayTimeoutId); + _this.delayTimeoutId = null; + } + } + }; + var pointer = _this.pointer = new PointerDragging(containerEl); + pointer.emitter.on('pointerdown', _this.onPointerDown); + pointer.emitter.on('pointermove', _this.onPointerMove); + pointer.emitter.on('pointerup', _this.onPointerUp); + _this.mirror = new ElementMirror(); + _this.autoScroller = new AutoScroller(); + return _this; + } + FeaturefulElementDragging.prototype.destroy = function () { + this.pointer.destroy(); + }; + FeaturefulElementDragging.prototype.startDelay = function (ev) { + var _this = this; + if (typeof this.delay === 'number') { + this.delayTimeoutId = setTimeout(function () { + _this.delayTimeoutId = null; + _this.handleDelayEnd(ev); + }, this.delay); // not assignable to number! + } + else { + this.handleDelayEnd(ev); + } + }; + FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) { + this.isDelayEnded = true; + this.tryStartDrag(ev); + }; + FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) { + this.isDistanceSurpassed = true; + this.tryStartDrag(ev); + }; + FeaturefulElementDragging.prototype.tryStartDrag = function (ev) { + if (this.isDelayEnded && this.isDistanceSurpassed) { + if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) { + this.isDragging = true; + this.mirrorNeedsRevert = false; + this.autoScroller.start(ev.pageX, ev.pageY); + this.emitter.trigger('dragstart', ev); + if (this.touchScrollAllowed === false) { + this.pointer.cancelTouchScroll(); + } + } + } + }; + FeaturefulElementDragging.prototype.tryStopDrag = function (ev) { + // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events + // that come from the document to fire beforehand. much more convenient this way. + this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args + ); + }; + FeaturefulElementDragging.prototype.stopDrag = function (ev) { + this.isDragging = false; + this.emitter.trigger('dragend', ev); + }; + // fill in the implementations... + FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) { + this.pointer.shouldIgnoreMove = bool; + }; + FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) { + this.mirror.setIsVisible(bool); + }; + FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) { + this.mirrorNeedsRevert = bool; + }; + FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) { + this.autoScroller.isEnabled = bool; + }; + return FeaturefulElementDragging; +}(ElementDragging)); + +/* +When this class is instantiated, it records the offset of an element (relative to the document topleft), +and continues to monitor scrolling, updating the cached coordinates if it needs to. +Does not access the DOM after instantiation, so highly performant. + +Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element +and an determine if a given point is inside the combined clipping rectangle. +*/ +var OffsetTracker = /** @class */ (function () { + function OffsetTracker(el) { + this.origRect = computeRect(el); + // will work fine for divs that have overflow:hidden + this.scrollCaches = getClippingParents(el).map(function (el) { + return new ElementScrollGeomCache(el, true); // listen=true + }); + } + OffsetTracker.prototype.destroy = function () { + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + scrollCache.destroy(); + } + }; + OffsetTracker.prototype.computeLeft = function () { + var left = this.origRect.left; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + left += scrollCache.origScrollLeft - scrollCache.getScrollLeft(); + } + return left; + }; + OffsetTracker.prototype.computeTop = function () { + var top = this.origRect.top; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + top += scrollCache.origScrollTop - scrollCache.getScrollTop(); + } + return top; + }; + OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) { + var point = { left: pageX, top: pageY }; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + if (!isIgnoredClipping(scrollCache.getEventTarget()) && + !pointInsideRect(point, scrollCache.clientRect)) { + return false; + } + } + return true; + }; + return OffsetTracker; +}()); +// certain clipping containers should never constrain interactions, like and +// https://github.com/fullcalendar/fullcalendar/issues/3615 +function isIgnoredClipping(node) { + var tagName = node.tagName; + return tagName === 'HTML' || tagName === 'BODY'; +} + +/* +Tracks movement over multiple droppable areas (aka "hits") +that exist in one or more DateComponents. +Relies on an existing draggable. + +emits: +- pointerdown +- dragstart +- hitchange - fires initially, even if not over a hit +- pointerup +- (hitchange - again, to null, if ended over a hit) +- dragend +*/ +var HitDragging = /** @class */ (function () { + function HitDragging(dragging, droppableStore) { + var _this = this; + // options that can be set by caller + this.useSubjectCenter = false; + this.requireInitial = true; // if doesn't start out on a hit, won't emit any events + this.initialHit = null; + this.movingHit = null; + this.finalHit = null; // won't ever be populated if shouldIgnoreMove + this.handlePointerDown = function (ev) { + var dragging = _this.dragging; + _this.initialHit = null; + _this.movingHit = null; + _this.finalHit = null; + _this.prepareHits(); + _this.processFirstCoord(ev); + if (_this.initialHit || !_this.requireInitial) { + dragging.setIgnoreMove(false); + _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :( + } + else { + dragging.setIgnoreMove(true); + } + }; + this.handleDragStart = function (ev) { + _this.emitter.trigger('dragstart', ev); + _this.handleMove(ev, true); // force = fire even if initially null + }; + this.handleDragMove = function (ev) { + _this.emitter.trigger('dragmove', ev); + _this.handleMove(ev); + }; + this.handlePointerUp = function (ev) { + _this.releaseHits(); + _this.emitter.trigger('pointerup', ev); + }; + this.handleDragEnd = function (ev) { + if (_this.movingHit) { + _this.emitter.trigger('hitupdate', null, true, ev); + } + _this.finalHit = _this.movingHit; + _this.movingHit = null; + _this.emitter.trigger('dragend', ev); + }; + this.droppableStore = droppableStore; + dragging.emitter.on('pointerdown', this.handlePointerDown); + dragging.emitter.on('dragstart', this.handleDragStart); + dragging.emitter.on('dragmove', this.handleDragMove); + dragging.emitter.on('pointerup', this.handlePointerUp); + dragging.emitter.on('dragend', this.handleDragEnd); + this.dragging = dragging; + this.emitter = new EmitterMixin(); + } + // sets initialHit + // sets coordAdjust + HitDragging.prototype.processFirstCoord = function (ev) { + var origPoint = { left: ev.pageX, top: ev.pageY }; + var adjustedPoint = origPoint; + var subjectEl = ev.subjectEl; + var subjectRect; + if (subjectEl !== document) { + subjectRect = computeRect(subjectEl); + adjustedPoint = constrainPoint(adjustedPoint, subjectRect); + } + var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top); + if (initialHit) { + if (this.useSubjectCenter && subjectRect) { + var slicedSubjectRect = intersectRects(subjectRect, initialHit.rect); + if (slicedSubjectRect) { + adjustedPoint = getRectCenter(slicedSubjectRect); + } + } + this.coordAdjust = diffPoints(adjustedPoint, origPoint); + } + else { + this.coordAdjust = { left: 0, top: 0 }; + } + }; + HitDragging.prototype.handleMove = function (ev, forceHandle) { + var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top); + if (forceHandle || !isHitsEqual(this.movingHit, hit)) { + this.movingHit = hit; + this.emitter.trigger('hitupdate', hit, false, ev); + } + }; + HitDragging.prototype.prepareHits = function () { + this.offsetTrackers = mapHash(this.droppableStore, function (interactionSettings) { + interactionSettings.component.buildPositionCaches(); + return new OffsetTracker(interactionSettings.el); + }); + }; + HitDragging.prototype.releaseHits = function () { + var offsetTrackers = this.offsetTrackers; + for (var id in offsetTrackers) { + offsetTrackers[id].destroy(); + } + this.offsetTrackers = {}; + }; + HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) { + var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers; + var bestHit = null; + for (var id in droppableStore) { + var component = droppableStore[id].component; + var offsetTracker = offsetTrackers[id]; + if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) { + var originLeft = offsetTracker.computeLeft(); + var originTop = offsetTracker.computeTop(); + var positionLeft = offsetLeft - originLeft; + var positionTop = offsetTop - originTop; + var origRect = offsetTracker.origRect; + var width = origRect.right - origRect.left; + var height = origRect.bottom - origRect.top; + if ( + // must be within the element's bounds + positionLeft >= 0 && positionLeft < width && + positionTop >= 0 && positionTop < height) { + var hit = component.queryHit(positionLeft, positionTop, width, height); + if (hit && + ( + // make sure the hit is within activeRange, meaning it's not a deal cell + !component.props.dateProfile || // hack for DayTile + rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) && + (!bestHit || hit.layer > bestHit.layer)) { + // TODO: better way to re-orient rectangle + hit.rect.left += originLeft; + hit.rect.right += originLeft; + hit.rect.top += originTop; + hit.rect.bottom += originTop; + bestHit = hit; + } + } + } + } + return bestHit; + }; + return HitDragging; +}()); +function isHitsEqual(hit0, hit1) { + if (!hit0 && !hit1) { + return true; + } + if (Boolean(hit0) !== Boolean(hit1)) { + return false; + } + return isDateSpansEqual(hit0.dateSpan, hit1.dateSpan); +} + +/* +Monitors when the user clicks on a specific date/time of a component. +A pointerdown+pointerup on the same "hit" constitutes a click. +*/ +var DateClicking = /** @class */ (function (_super) { + __extends(DateClicking, _super); + function DateClicking(settings) { + var _this = _super.call(this, settings) || this; + _this.handlePointerDown = function (ev) { + var dragging = _this.dragging; + // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired + dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl)); + }; + // won't even fire if moving was ignored + _this.handleDragEnd = function (ev) { + var component = _this.component; + var _a = component.context, calendar = _a.calendar, view = _a.view; + var pointer = _this.dragging.pointer; + if (!pointer.wasTouchScroll) { + var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit; + if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) { + calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent); + } + } + }; + var component = settings.component; + // we DO want to watch pointer moves because otherwise finalHit won't get populated + _this.dragging = new FeaturefulElementDragging(component.el); + _this.dragging.autoScroller.isEnabled = false; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings)); + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragend', _this.handleDragEnd); + return _this; + } + DateClicking.prototype.destroy = function () { + this.dragging.destroy(); + }; + return DateClicking; +}(Interaction)); + +/* +Tracks when the user selects a portion of time of a component, +constituted by a drag over date cells, with a possible delay at the beginning of the drag. +*/ +var DateSelecting = /** @class */ (function (_super) { + __extends(DateSelecting, _super); + function DateSelecting(settings) { + var _this = _super.call(this, settings) || this; + _this.dragSelection = null; + _this.handlePointerDown = function (ev) { + var _a = _this, component = _a.component, dragging = _a.dragging; + var options = component.context.options; + var canSelect = options.selectable && + component.isValidDateDownEl(ev.origEvent.target); + // don't bother to watch expensive moves if component won't do selection + dragging.setIgnoreMove(!canSelect); + // if touch, require user to hold down + dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null; + }; + _this.handleDragStart = function (ev) { + _this.component.context.calendar.unselect(ev); // unselect previous selections + }; + _this.handleHitUpdate = function (hit, isFinal) { + var calendar = _this.component.context.calendar; + var dragSelection = null; + var isInvalid = false; + if (hit) { + dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers); + if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) { + isInvalid = true; + dragSelection = null; + } + } + if (dragSelection) { + calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection }); + } + else if (!isFinal) { // only unselect if moved away while dragging + calendar.dispatch({ type: 'UNSELECT_DATES' }); + } + if (!isInvalid) { + enableCursor(); + } + else { + disableCursor(); + } + if (!isFinal) { + _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging + } + }; + _this.handlePointerUp = function (pev) { + if (_this.dragSelection) { + // selection is already rendered, so just need to report selection + _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev); + _this.dragSelection = null; + } + }; + var component = settings.component; + var options = component.context.options; + var dragging = _this.dragging = new FeaturefulElementDragging(component.el); + dragging.touchScrollAllowed = false; + dragging.minDistance = options.selectMinDistance || 0; + dragging.autoScroller.isEnabled = options.dragScroll; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings)); + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragstart', _this.handleDragStart); + hitDragging.emitter.on('hitupdate', _this.handleHitUpdate); + hitDragging.emitter.on('pointerup', _this.handlePointerUp); + return _this; + } + DateSelecting.prototype.destroy = function () { + this.dragging.destroy(); + }; + return DateSelecting; +}(Interaction)); +function getComponentTouchDelay(component) { + var options = component.context.options; + var delay = options.selectLongPressDelay; + if (delay == null) { + delay = options.longPressDelay; + } + return delay; +} +function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) { + var dateSpan0 = hit0.dateSpan; + var dateSpan1 = hit1.dateSpan; + var ms = [ + dateSpan0.range.start, + dateSpan0.range.end, + dateSpan1.range.start, + dateSpan1.range.end + ]; + ms.sort(compareNumbers); + var props = {}; + for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) { + var transformer = dateSelectionTransformers_1[_i]; + var res = transformer(hit0, hit1); + if (res === false) { + return null; + } + else if (res) { + __assign(props, res); + } + } + props.range = { start: ms[0], end: ms[3] }; + props.allDay = dateSpan0.allDay; + return props; +} + +var EventDragging = /** @class */ (function (_super) { + __extends(EventDragging, _super); + function EventDragging(settings) { + var _this = _super.call(this, settings) || this; + // internal state + _this.subjectSeg = null; // the seg being selected/dragged + _this.isDragging = false; + _this.eventRange = null; + _this.relevantEvents = null; // the events being dragged + _this.receivingCalendar = null; + _this.validMutation = null; + _this.mutatedRelevantEvents = null; + _this.handlePointerDown = function (ev) { + var origTarget = ev.origEvent.target; + var _a = _this, component = _a.component, dragging = _a.dragging; + var mirror = dragging.mirror; + var options = component.context.options; + var initialCalendar = component.context.calendar; + var subjectSeg = _this.subjectSeg = getElSeg(ev.subjectEl); + var eventRange = _this.eventRange = subjectSeg.eventRange; + var eventInstanceId = eventRange.instance.instanceId; + _this.relevantEvents = getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId); + dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance; + dragging.delay = + // only do a touch delay if touch and this event hasn't been selected yet + (ev.isTouch && eventInstanceId !== component.props.eventSelection) ? + getComponentTouchDelay$1(component) : + null; + mirror.parentNode = initialCalendar.el; + mirror.revertDuration = options.dragRevertDuration; + var isValid = component.isValidSegDownEl(origTarget) && + !elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer + dragging.setIgnoreMove(!isValid); + // disable dragging for elements that are resizable (ie, selectable) + // but are not draggable + _this.isDragging = isValid && + ev.subjectEl.classList.contains('fc-draggable'); + }; + _this.handleDragStart = function (ev) { + var context = _this.component.context; + var initialCalendar = context.calendar; + var eventRange = _this.eventRange; + var eventInstanceId = eventRange.instance.instanceId; + if (ev.isTouch) { + // need to select a different event? + if (eventInstanceId !== _this.component.props.eventSelection) { + initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId }); + } + } + else { + // if now using mouse, but was previous touch interaction, clear selected event + initialCalendar.dispatch({ type: 'UNSELECT_EVENT' }); + } + if (_this.isDragging) { + initialCalendar.unselect(ev); // unselect *date* selection + initialCalendar.publiclyTrigger('eventDragStart', [ + { + el: _this.subjectSeg.el, + event: new EventApi(initialCalendar, eventRange.def, eventRange.instance), + jsEvent: ev.origEvent, + view: context.view + } + ]); + } + }; + _this.handleHitUpdate = function (hit, isFinal) { + if (!_this.isDragging) { + return; + } + var relevantEvents = _this.relevantEvents; + var initialHit = _this.hitDragging.initialHit; + var initialCalendar = _this.component.context.calendar; + // states based on new hit + var receivingCalendar = null; + var mutation = null; + var mutatedRelevantEvents = null; + var isInvalid = false; + var interaction = { + affectedEvents: relevantEvents, + mutatedEvents: createEmptyEventStore(), + isEvent: true, + origSeg: _this.subjectSeg + }; + if (hit) { + var receivingComponent = hit.component; + receivingCalendar = receivingComponent.context.calendar; + var receivingOptions = receivingComponent.context.options; + if (initialCalendar === receivingCalendar || + receivingOptions.editable && receivingOptions.droppable) { + mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers); + if (mutation) { + mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar); + interaction.mutatedEvents = mutatedRelevantEvents; + if (!receivingComponent.isInteractionValid(interaction)) { + isInvalid = true; + mutation = null; + mutatedRelevantEvents = null; + interaction.mutatedEvents = createEmptyEventStore(); + } + } + } + else { + receivingCalendar = null; + } + } + _this.displayDrag(receivingCalendar, interaction); + if (!isInvalid) { + enableCursor(); + } + else { + disableCursor(); + } + if (!isFinal) { + if (initialCalendar === receivingCalendar && // TODO: write test for this + isHitsEqual(initialHit, hit)) { + mutation = null; + } + _this.dragging.setMirrorNeedsRevert(!mutation); + // render the mirror if no already-rendered mirror + // TODO: wish we could somehow wait for dispatch to guarantee render + _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror')); + // assign states based on new hit + _this.receivingCalendar = receivingCalendar; + _this.validMutation = mutation; + _this.mutatedRelevantEvents = mutatedRelevantEvents; + } + }; + _this.handlePointerUp = function () { + if (!_this.isDragging) { + _this.cleanup(); // because handleDragEnd won't fire + } + }; + _this.handleDragEnd = function (ev) { + if (_this.isDragging) { + var context = _this.component.context; + var initialCalendar_1 = context.calendar; + var initialView = context.view; + var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation; + var eventDef = _this.eventRange.def; + var eventInstance = _this.eventRange.instance; + var eventApi = new EventApi(initialCalendar_1, eventDef, eventInstance); + var relevantEvents_1 = _this.relevantEvents; + var mutatedRelevantEvents = _this.mutatedRelevantEvents; + var finalHit = _this.hitDragging.finalHit; + _this.clearDrag(); // must happen after revert animation + initialCalendar_1.publiclyTrigger('eventDragStop', [ + { + el: _this.subjectSeg.el, + event: eventApi, + jsEvent: ev.origEvent, + view: initialView + } + ]); + if (validMutation) { + // dropped within same calendar + if (receivingCalendar === initialCalendar_1) { + initialCalendar_1.dispatch({ + type: 'MERGE_EVENTS', + eventStore: mutatedRelevantEvents + }); + var transformed = {}; + for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) { + var transformer = _b[_i]; + __assign(transformed, transformer(validMutation, initialCalendar_1)); + } + var eventDropArg = __assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new EventApi(// the data AFTER the mutation + initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () { + initialCalendar_1.dispatch({ + type: 'MERGE_EVENTS', + eventStore: relevantEvents_1 + }); + }, jsEvent: ev.origEvent, view: initialView }); + initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]); + // dropped in different calendar + } + else if (receivingCalendar) { + initialCalendar_1.publiclyTrigger('eventLeave', [ + { + draggedEl: ev.subjectEl, + event: eventApi, + view: initialView + } + ]); + initialCalendar_1.dispatch({ + type: 'REMOVE_EVENT_INSTANCES', + instances: _this.mutatedRelevantEvents.instances + }); + receivingCalendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: _this.mutatedRelevantEvents + }); + if (ev.isTouch) { + receivingCalendar.dispatch({ + type: 'SELECT_EVENT', + eventInstanceId: eventInstance.instanceId + }); + } + var dropArg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644 + }); + receivingCalendar.publiclyTrigger('drop', [dropArg]); + receivingCalendar.publiclyTrigger('eventReceive', [ + { + draggedEl: ev.subjectEl, + event: new EventApi(// the data AFTER the mutation + receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]), + view: finalHit.component // should this be finalHit.component.view? See #4644 + } + ]); + } + } + else { + initialCalendar_1.publiclyTrigger('_noEventDrop'); + } + } + _this.cleanup(); + }; + var component = _this.component; + var options = component.context.options; + var dragging = _this.dragging = new FeaturefulElementDragging(component.el); + dragging.pointer.selector = EventDragging.SELECTOR; + dragging.touchScrollAllowed = false; + dragging.autoScroller.isEnabled = options.dragScroll; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsStore); + hitDragging.useSubjectCenter = settings.useEventCenter; + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragstart', _this.handleDragStart); + hitDragging.emitter.on('hitupdate', _this.handleHitUpdate); + hitDragging.emitter.on('pointerup', _this.handlePointerUp); + hitDragging.emitter.on('dragend', _this.handleDragEnd); + return _this; + } + EventDragging.prototype.destroy = function () { + this.dragging.destroy(); + }; + // render a drag state on the next receivingCalendar + EventDragging.prototype.displayDrag = function (nextCalendar, state) { + var initialCalendar = this.component.context.calendar; + var prevCalendar = this.receivingCalendar; + // does the previous calendar need to be cleared? + if (prevCalendar && prevCalendar !== nextCalendar) { + // does the initial calendar need to be cleared? + // if so, don't clear all the way. we still need to to hide the affectedEvents + if (prevCalendar === initialCalendar) { + prevCalendar.dispatch({ + type: 'SET_EVENT_DRAG', + state: { + affectedEvents: state.affectedEvents, + mutatedEvents: createEmptyEventStore(), + isEvent: true, + origSeg: state.origSeg + } + }); + // completely clear the old calendar if it wasn't the initial + } + else { + prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + } + if (nextCalendar) { + nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state }); + } + }; + EventDragging.prototype.clearDrag = function () { + var initialCalendar = this.component.context.calendar; + var receivingCalendar = this.receivingCalendar; + if (receivingCalendar) { + receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + // the initial calendar might have an dummy drag state from displayDrag + if (initialCalendar !== receivingCalendar) { + initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + }; + EventDragging.prototype.cleanup = function () { + this.subjectSeg = null; + this.isDragging = false; + this.eventRange = null; + this.relevantEvents = null; + this.receivingCalendar = null; + this.validMutation = null; + this.mutatedRelevantEvents = null; + }; + EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11 + return EventDragging; +}(Interaction)); +function computeEventMutation(hit0, hit1, massagers) { + var dateSpan0 = hit0.dateSpan; + var dateSpan1 = hit1.dateSpan; + var date0 = dateSpan0.range.start; + var date1 = dateSpan1.range.start; + var standardProps = {}; + if (dateSpan0.allDay !== dateSpan1.allDay) { + standardProps.allDay = dateSpan1.allDay; + standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration; + if (dateSpan1.allDay) { + // means date1 is already start-of-day, + // but date0 needs to be converted + date0 = startOfDay(date0); + } + } + var delta = diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ? + hit0.component.largeUnit : + null); + if (delta.milliseconds) { // has hours/minutes/seconds + standardProps.allDay = false; + } + var mutation = { + datesDelta: delta, + standardProps: standardProps + }; + for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) { + var massager = massagers_1[_i]; + massager(mutation, hit0, hit1); + } + return mutation; +} +function getComponentTouchDelay$1(component) { + var options = component.context.options; + var delay = options.eventLongPressDelay; + if (delay == null) { + delay = options.longPressDelay; + } + return delay; +} + +var EventDragging$1 = /** @class */ (function (_super) { + __extends(EventDragging, _super); + function EventDragging(settings) { + var _this = _super.call(this, settings) || this; + // internal state + _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg? + _this.eventRange = null; + _this.relevantEvents = null; + _this.validMutation = null; + _this.mutatedRelevantEvents = null; + _this.handlePointerDown = function (ev) { + var component = _this.component; + var seg = _this.querySeg(ev); + var eventRange = _this.eventRange = seg.eventRange; + _this.dragging.minDistance = component.context.options.eventDragMinDistance; + // if touch, need to be working with a selected event + _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) || + (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId)); + }; + _this.handleDragStart = function (ev) { + var _a = _this.component.context, calendar = _a.calendar, view = _a.view; + var eventRange = _this.eventRange; + _this.relevantEvents = getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId); + _this.draggingSeg = _this.querySeg(ev); + calendar.unselect(); + calendar.publiclyTrigger('eventResizeStart', [ + { + el: _this.draggingSeg.el, + event: new EventApi(calendar, eventRange.def, eventRange.instance), + jsEvent: ev.origEvent, + view: view + } + ]); + }; + _this.handleHitUpdate = function (hit, isFinal, ev) { + var calendar = _this.component.context.calendar; + var relevantEvents = _this.relevantEvents; + var initialHit = _this.hitDragging.initialHit; + var eventInstance = _this.eventRange.instance; + var mutation = null; + var mutatedRelevantEvents = null; + var isInvalid = false; + var interaction = { + affectedEvents: relevantEvents, + mutatedEvents: createEmptyEventStore(), + isEvent: true, + origSeg: _this.draggingSeg + }; + if (hit) { + mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms); + } + if (mutation) { + mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar); + interaction.mutatedEvents = mutatedRelevantEvents; + if (!_this.component.isInteractionValid(interaction)) { + isInvalid = true; + mutation = null; + mutatedRelevantEvents = null; + interaction.mutatedEvents = null; + } + } + if (mutatedRelevantEvents) { + calendar.dispatch({ + type: 'SET_EVENT_RESIZE', + state: interaction + }); + } + else { + calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' }); + } + if (!isInvalid) { + enableCursor(); + } + else { + disableCursor(); + } + if (!isFinal) { + if (mutation && isHitsEqual(initialHit, hit)) { + mutation = null; + } + _this.validMutation = mutation; + _this.mutatedRelevantEvents = mutatedRelevantEvents; + } + }; + _this.handleDragEnd = function (ev) { + var _a = _this.component.context, calendar = _a.calendar, view = _a.view; + var eventDef = _this.eventRange.def; + var eventInstance = _this.eventRange.instance; + var eventApi = new EventApi(calendar, eventDef, eventInstance); + var relevantEvents = _this.relevantEvents; + var mutatedRelevantEvents = _this.mutatedRelevantEvents; + calendar.publiclyTrigger('eventResizeStop', [ + { + el: _this.draggingSeg.el, + event: eventApi, + jsEvent: ev.origEvent, + view: view + } + ]); + if (_this.validMutation) { + calendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: mutatedRelevantEvents + }); + calendar.publiclyTrigger('eventResize', [ + { + el: _this.draggingSeg.el, + startDelta: _this.validMutation.startDelta || createDuration(0), + endDelta: _this.validMutation.endDelta || createDuration(0), + prevEvent: eventApi, + event: new EventApi(// the data AFTER the mutation + calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), + revert: function () { + calendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: relevantEvents + }); + }, + jsEvent: ev.origEvent, + view: view + } + ]); + } + else { + calendar.publiclyTrigger('_noEventResize'); + } + // reset all internal state + _this.draggingSeg = null; + _this.relevantEvents = null; + _this.validMutation = null; + // okay to keep eventInstance around. useful to set it in handlePointerDown + }; + var component = settings.component; + var dragging = _this.dragging = new FeaturefulElementDragging(component.el); + dragging.pointer.selector = '.fc-resizer'; + dragging.touchScrollAllowed = false; + dragging.autoScroller.isEnabled = component.context.options.dragScroll; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings)); + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragstart', _this.handleDragStart); + hitDragging.emitter.on('hitupdate', _this.handleHitUpdate); + hitDragging.emitter.on('dragend', _this.handleDragEnd); + return _this; + } + EventDragging.prototype.destroy = function () { + this.dragging.destroy(); + }; + EventDragging.prototype.querySeg = function (ev) { + return getElSeg(elementClosest(ev.subjectEl, this.component.fgSegSelector)); + }; + return EventDragging; +}(Interaction)); +function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) { + var dateEnv = hit0.component.context.dateEnv; + var date0 = hit0.dateSpan.range.start; + var date1 = hit1.dateSpan.range.start; + var delta = diffDates(date0, date1, dateEnv, hit0.component.largeUnit); + var props = {}; + for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) { + var transform = transforms_1[_i]; + var res = transform(hit0, hit1); + if (res === false) { + return null; + } + else if (res) { + __assign(props, res); + } + } + if (isFromStart) { + if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) { + props.startDelta = delta; + return props; + } + } + else { + if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) { + props.endDelta = delta; + return props; + } + } + return null; +} + +var UnselectAuto = /** @class */ (function () { + function UnselectAuto(calendar) { + var _this = this; + this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system + this.onSelect = function (selectInfo) { + if (selectInfo.jsEvent) { + _this.isRecentPointerDateSelect = true; + } + }; + this.onDocumentPointerUp = function (pev) { + var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer; + var state = calendar.state; + // touch-scrolling should never unfocus any type of selection + if (!documentPointer.wasTouchScroll) { + if (state.dateSelection && // an existing date selection? + !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp? + ) { + var unselectAuto = calendar.viewOpt('unselectAuto'); + var unselectCancel = calendar.viewOpt('unselectCancel'); + if (unselectAuto && (!unselectAuto || !elementClosest(documentPointer.downEl, unselectCancel))) { + calendar.unselect(pev); + } + } + if (state.eventSelection && // an existing event selected? + !elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event + ) { + calendar.dispatch({ type: 'UNSELECT_EVENT' }); + } + } + _this.isRecentPointerDateSelect = false; + }; + this.calendar = calendar; + var documentPointer = this.documentPointer = new PointerDragging(document); + documentPointer.shouldIgnoreMove = true; + documentPointer.shouldWatchScroll = false; + documentPointer.emitter.on('pointerup', this.onDocumentPointerUp); + /* + TODO: better way to know about whether there was a selection with the pointer + */ + calendar.on('select', this.onSelect); + } + UnselectAuto.prototype.destroy = function () { + this.calendar.off('select', this.onSelect); + this.documentPointer.destroy(); + }; + return UnselectAuto; +}()); + +/* +Given an already instantiated draggable object for one-or-more elements, +Interprets any dragging as an attempt to drag an events that lives outside +of a calendar onto a calendar. +*/ +var ExternalElementDragging = /** @class */ (function () { + function ExternalElementDragging(dragging, suppliedDragMeta) { + var _this = this; + this.receivingCalendar = null; + this.droppableEvent = null; // will exist for all drags, even if create:false + this.suppliedDragMeta = null; + this.dragMeta = null; + this.handleDragStart = function (ev) { + _this.dragMeta = _this.buildDragMeta(ev.subjectEl); + }; + this.handleHitUpdate = function (hit, isFinal, ev) { + var dragging = _this.hitDragging.dragging; + var receivingCalendar = null; + var droppableEvent = null; + var isInvalid = false; + var interaction = { + affectedEvents: createEmptyEventStore(), + mutatedEvents: createEmptyEventStore(), + isEvent: _this.dragMeta.create, + origSeg: null + }; + if (hit) { + receivingCalendar = hit.component.context.calendar; + if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) { + droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar); + interaction.mutatedEvents = eventTupleToStore(droppableEvent); + isInvalid = !isInteractionValid(interaction, receivingCalendar); + if (isInvalid) { + interaction.mutatedEvents = createEmptyEventStore(); + droppableEvent = null; + } + } + } + _this.displayDrag(receivingCalendar, interaction); + // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?) + // TODO: wish we could somehow wait for dispatch to guarantee render + dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror')); + if (!isInvalid) { + enableCursor(); + } + else { + disableCursor(); + } + if (!isFinal) { + dragging.setMirrorNeedsRevert(!droppableEvent); + _this.receivingCalendar = receivingCalendar; + _this.droppableEvent = droppableEvent; + } + }; + this.handleDragEnd = function (pev) { + var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent; + _this.clearDrag(); + if (receivingCalendar && droppableEvent) { + var finalHit = _this.hitDragging.finalHit; + var finalView = finalHit.component.context.view; + var dragMeta = _this.dragMeta; + var arg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView }); + receivingCalendar.publiclyTrigger('drop', [arg]); + if (dragMeta.create) { + receivingCalendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: eventTupleToStore(droppableEvent) + }); + if (pev.isTouch) { + receivingCalendar.dispatch({ + type: 'SELECT_EVENT', + eventInstanceId: droppableEvent.instance.instanceId + }); + } + // signal that an external event landed + receivingCalendar.publiclyTrigger('eventReceive', [ + { + draggedEl: pev.subjectEl, + event: new EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance), + view: finalView + } + ]); + } + } + _this.receivingCalendar = null; + _this.droppableEvent = null; + }; + var hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore); + hitDragging.requireInitial = false; // will start outside of a component + hitDragging.emitter.on('dragstart', this.handleDragStart); + hitDragging.emitter.on('hitupdate', this.handleHitUpdate); + hitDragging.emitter.on('dragend', this.handleDragEnd); + this.suppliedDragMeta = suppliedDragMeta; + } + ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) { + if (typeof this.suppliedDragMeta === 'object') { + return parseDragMeta(this.suppliedDragMeta); + } + else if (typeof this.suppliedDragMeta === 'function') { + return parseDragMeta(this.suppliedDragMeta(subjectEl)); + } + else { + return getDragMetaFromEl(subjectEl); + } + }; + ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) { + var prevCalendar = this.receivingCalendar; + if (prevCalendar && prevCalendar !== nextCalendar) { + prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + if (nextCalendar) { + nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state }); + } + }; + ExternalElementDragging.prototype.clearDrag = function () { + if (this.receivingCalendar) { + this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + }; + ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) { + var dropAccept = receivingCalendar.opt('dropAccept'); + if (typeof dropAccept === 'function') { + return dropAccept(el); + } + else if (typeof dropAccept === 'string' && dropAccept) { + return Boolean(elementMatches(el, dropAccept)); + } + return true; + }; + return ExternalElementDragging; +}()); +// Utils for computing event store from the DragMeta +// ---------------------------------------------------------------------------------------------------- +function computeEventForDateSpan(dateSpan, dragMeta, calendar) { + var defProps = __assign({}, dragMeta.leftoverProps); + for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) { + var transform = _a[_i]; + __assign(defProps, transform(dateSpan, dragMeta)); + } + var def = parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd + calendar); + var start = dateSpan.range.start; + // only rely on time info if drop zone is all-day, + // otherwise, we already know the time + if (dateSpan.allDay && dragMeta.startTime) { + start = calendar.dateEnv.add(start, dragMeta.startTime); + } + var end = dragMeta.duration ? + calendar.dateEnv.add(start, dragMeta.duration) : + calendar.getDefaultEventEnd(dateSpan.allDay, start); + var instance = createEventInstance(def.defId, { start: start, end: end }); + return { def: def, instance: instance }; +} +// Utils for extracting data from element +// ---------------------------------------------------------------------------------------------------- +function getDragMetaFromEl(el) { + var str = getEmbeddedElData(el, 'event'); + var obj = str ? + JSON.parse(str) : + { create: false }; // if no embedded data, assume no event creation + return parseDragMeta(obj); +} +config.dataAttrPrefix = ''; +function getEmbeddedElData(el, name) { + var prefix = config.dataAttrPrefix; + var prefixedName = (prefix ? prefix + '-' : '') + name; + return el.getAttribute('data-' + prefixedName) || ''; +} + +/* +Makes an element (that is *external* to any calendar) draggable. +Can pass in data that determines how an event will be created when dropped onto a calendar. +Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system. +*/ +var ExternalDraggable = /** @class */ (function () { + function ExternalDraggable(el, settings) { + var _this = this; + if (settings === void 0) { settings = {}; } + this.handlePointerDown = function (ev) { + var dragging = _this.dragging; + var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay; + dragging.minDistance = + minDistance != null ? + minDistance : + (ev.isTouch ? 0 : globalDefaults.eventDragMinDistance); + dragging.delay = + ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv + (longPressDelay != null ? longPressDelay : globalDefaults.longPressDelay) : + 0; + }; + this.handleDragStart = function (ev) { + if (ev.isTouch && + _this.dragging.delay && + ev.subjectEl.classList.contains('fc-event')) { + _this.dragging.mirror.getMirrorEl().classList.add('fc-selected'); + } + }; + this.settings = settings; + var dragging = this.dragging = new FeaturefulElementDragging(el); + dragging.touchScrollAllowed = false; + if (settings.itemSelector != null) { + dragging.pointer.selector = settings.itemSelector; + } + if (settings.appendTo != null) { + dragging.mirror.parentNode = settings.appendTo; // TODO: write tests + } + dragging.emitter.on('pointerdown', this.handlePointerDown); + dragging.emitter.on('dragstart', this.handleDragStart); + new ExternalElementDragging(dragging, settings.eventData); + } + ExternalDraggable.prototype.destroy = function () { + this.dragging.destroy(); + }; + return ExternalDraggable; +}()); + +/* +Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements. +The third-party system is responsible for drawing the visuals effects of the drag. +This class simply monitors for pointer movements and fires events. +It also has the ability to hide the moving element (the "mirror") during the drag. +*/ +var InferredElementDragging = /** @class */ (function (_super) { + __extends(InferredElementDragging, _super); + function InferredElementDragging(containerEl) { + var _this = _super.call(this, containerEl) || this; + _this.shouldIgnoreMove = false; + _this.mirrorSelector = ''; + _this.currentMirrorEl = null; + _this.handlePointerDown = function (ev) { + _this.emitter.trigger('pointerdown', ev); + if (!_this.shouldIgnoreMove) { + // fire dragstart right away. does not support delay or min-distance + _this.emitter.trigger('dragstart', ev); + } + }; + _this.handlePointerMove = function (ev) { + if (!_this.shouldIgnoreMove) { + _this.emitter.trigger('dragmove', ev); + } + }; + _this.handlePointerUp = function (ev) { + _this.emitter.trigger('pointerup', ev); + if (!_this.shouldIgnoreMove) { + // fire dragend right away. does not support a revert animation + _this.emitter.trigger('dragend', ev); + } + }; + var pointer = _this.pointer = new PointerDragging(containerEl); + pointer.emitter.on('pointerdown', _this.handlePointerDown); + pointer.emitter.on('pointermove', _this.handlePointerMove); + pointer.emitter.on('pointerup', _this.handlePointerUp); + return _this; + } + InferredElementDragging.prototype.destroy = function () { + this.pointer.destroy(); + }; + InferredElementDragging.prototype.setIgnoreMove = function (bool) { + this.shouldIgnoreMove = bool; + }; + InferredElementDragging.prototype.setMirrorIsVisible = function (bool) { + if (bool) { + // restore a previously hidden element. + // use the reference in case the selector class has already been removed. + if (this.currentMirrorEl) { + this.currentMirrorEl.style.visibility = ''; + this.currentMirrorEl = null; + } + } + else { + var mirrorEl = this.mirrorSelector ? + document.querySelector(this.mirrorSelector) : + null; + if (mirrorEl) { + this.currentMirrorEl = mirrorEl; + mirrorEl.style.visibility = 'hidden'; + } + } + }; + return InferredElementDragging; +}(ElementDragging)); + +/* +Bridges third-party drag-n-drop systems with FullCalendar. +Must be instantiated and destroyed by caller. +*/ +var ThirdPartyDraggable = /** @class */ (function () { + function ThirdPartyDraggable(containerOrSettings, settings) { + var containerEl = document; + if ( + // wish we could just test instanceof EventTarget, but doesn't work in IE11 + containerOrSettings === document || + containerOrSettings instanceof Element) { + containerEl = containerOrSettings; + settings = settings || {}; + } + else { + settings = (containerOrSettings || {}); + } + var dragging = this.dragging = new InferredElementDragging(containerEl); + if (typeof settings.itemSelector === 'string') { + dragging.pointer.selector = settings.itemSelector; + } + else if (containerEl === document) { + dragging.pointer.selector = '[data-event]'; + } + if (typeof settings.mirrorSelector === 'string') { + dragging.mirrorSelector = settings.mirrorSelector; + } + new ExternalElementDragging(dragging, settings.eventData); + } + ThirdPartyDraggable.prototype.destroy = function () { + this.dragging.destroy(); + }; + return ThirdPartyDraggable; +}()); + +var main = createPlugin({ + componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1], + calendarInteractions: [UnselectAuto], + elementDraggingImpl: FeaturefulElementDragging +}); + +export default main; +export { ExternalDraggable as Draggable, FeaturefulElementDragging, PointerDragging, ThirdPartyDraggable }; diff --git a/src/main/resources/static/packages/interaction/main.js b/src/main/resources/static/packages/interaction/main.js new file mode 100644 index 00000000..d182c7b2 --- /dev/null +++ b/src/main/resources/static/packages/interaction/main.js @@ -0,0 +1,2152 @@ +/*! +FullCalendar Interaction Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : + typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) : + (global = global || self, factory(global.FullCalendarInteraction = {}, global.FullCalendar)); +}(this, function (exports, core) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + core.config.touchMouseIgnoreWait = 500; + var ignoreMouseDepth = 0; + var listenerCnt = 0; + var isWindowTouchMoveCancelled = false; + /* + Uses a "pointer" abstraction, which monitors UI events for both mouse and touch. + Tracks when the pointer "drags" on a certain element, meaning down+move+up. + + Also, tracks if there was touch-scrolling. + Also, can prevent touch-scrolling from happening. + Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement. + + emits: + - pointerdown + - pointermove + - pointerup + */ + var PointerDragging = /** @class */ (function () { + function PointerDragging(containerEl) { + var _this = this; + this.subjectEl = null; + this.downEl = null; + // options that can be directly assigned by caller + this.selector = ''; // will cause subjectEl in all emitted events to be this element + this.handleSelector = ''; + this.shouldIgnoreMove = false; + this.shouldWatchScroll = true; // for simulating pointermove on scroll + // internal states + this.isDragging = false; + this.isTouchDragging = false; + this.wasTouchScroll = false; + // Mouse + // ---------------------------------------------------------------------------------------------------- + this.handleMouseDown = function (ev) { + if (!_this.shouldIgnoreMouse() && + isPrimaryMouseButton(ev) && + _this.tryStart(ev)) { + var pev = _this.createEventFromMouse(ev, true); + _this.emitter.trigger('pointerdown', pev); + _this.initScrollWatch(pev); + if (!_this.shouldIgnoreMove) { + document.addEventListener('mousemove', _this.handleMouseMove); + } + document.addEventListener('mouseup', _this.handleMouseUp); + } + }; + this.handleMouseMove = function (ev) { + var pev = _this.createEventFromMouse(ev); + _this.recordCoords(pev); + _this.emitter.trigger('pointermove', pev); + }; + this.handleMouseUp = function (ev) { + document.removeEventListener('mousemove', _this.handleMouseMove); + document.removeEventListener('mouseup', _this.handleMouseUp); + _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev)); + _this.cleanup(); // call last so that pointerup has access to props + }; + // Touch + // ---------------------------------------------------------------------------------------------------- + this.handleTouchStart = function (ev) { + if (_this.tryStart(ev)) { + _this.isTouchDragging = true; + var pev = _this.createEventFromTouch(ev, true); + _this.emitter.trigger('pointerdown', pev); + _this.initScrollWatch(pev); + // unlike mouse, need to attach to target, not document + // https://stackoverflow.com/a/45760014 + var target = ev.target; + if (!_this.shouldIgnoreMove) { + target.addEventListener('touchmove', _this.handleTouchMove); + } + target.addEventListener('touchend', _this.handleTouchEnd); + target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end + // attach a handler to get called when ANY scroll action happens on the page. + // this was impossible to do with normal on/off because 'scroll' doesn't bubble. + // http://stackoverflow.com/a/32954565/96342 + window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture + ); + } + }; + this.handleTouchMove = function (ev) { + var pev = _this.createEventFromTouch(ev); + _this.recordCoords(pev); + _this.emitter.trigger('pointermove', pev); + }; + this.handleTouchEnd = function (ev) { + if (_this.isDragging) { // done to guard against touchend followed by touchcancel + var target = ev.target; + target.removeEventListener('touchmove', _this.handleTouchMove); + target.removeEventListener('touchend', _this.handleTouchEnd); + target.removeEventListener('touchcancel', _this.handleTouchEnd); + window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true + _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev)); + _this.cleanup(); // call last so that pointerup has access to props + _this.isTouchDragging = false; + startIgnoringMouse(); + } + }; + this.handleTouchScroll = function () { + _this.wasTouchScroll = true; + }; + this.handleScroll = function (ev) { + if (!_this.shouldIgnoreMove) { + var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX; + var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY; + _this.emitter.trigger('pointermove', { + origEvent: ev, + isTouch: _this.isTouchDragging, + subjectEl: _this.subjectEl, + pageX: pageX, + pageY: pageY, + deltaX: pageX - _this.origPageX, + deltaY: pageY - _this.origPageY + }); + } + }; + this.containerEl = containerEl; + this.emitter = new core.EmitterMixin(); + containerEl.addEventListener('mousedown', this.handleMouseDown); + containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true }); + listenerCreated(); + } + PointerDragging.prototype.destroy = function () { + this.containerEl.removeEventListener('mousedown', this.handleMouseDown); + this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true }); + listenerDestroyed(); + }; + PointerDragging.prototype.tryStart = function (ev) { + var subjectEl = this.querySubjectEl(ev); + var downEl = ev.target; + if (subjectEl && + (!this.handleSelector || core.elementClosest(downEl, this.handleSelector))) { + this.subjectEl = subjectEl; + this.downEl = downEl; + this.isDragging = true; // do this first so cancelTouchScroll will work + this.wasTouchScroll = false; + return true; + } + return false; + }; + PointerDragging.prototype.cleanup = function () { + isWindowTouchMoveCancelled = false; + this.isDragging = false; + this.subjectEl = null; + this.downEl = null; + // keep wasTouchScroll around for later access + this.destroyScrollWatch(); + }; + PointerDragging.prototype.querySubjectEl = function (ev) { + if (this.selector) { + return core.elementClosest(ev.target, this.selector); + } + else { + return this.containerEl; + } + }; + PointerDragging.prototype.shouldIgnoreMouse = function () { + return ignoreMouseDepth || this.isTouchDragging; + }; + // can be called by user of this class, to cancel touch-based scrolling for the current drag + PointerDragging.prototype.cancelTouchScroll = function () { + if (this.isDragging) { + isWindowTouchMoveCancelled = true; + } + }; + // Scrolling that simulates pointermoves + // ---------------------------------------------------------------------------------------------------- + PointerDragging.prototype.initScrollWatch = function (ev) { + if (this.shouldWatchScroll) { + this.recordCoords(ev); + window.addEventListener('scroll', this.handleScroll, true); // useCapture=true + } + }; + PointerDragging.prototype.recordCoords = function (ev) { + if (this.shouldWatchScroll) { + this.prevPageX = ev.pageX; + this.prevPageY = ev.pageY; + this.prevScrollX = window.pageXOffset; + this.prevScrollY = window.pageYOffset; + } + }; + PointerDragging.prototype.destroyScrollWatch = function () { + if (this.shouldWatchScroll) { + window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true + } + }; + // Event Normalization + // ---------------------------------------------------------------------------------------------------- + PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) { + var deltaX = 0; + var deltaY = 0; + // TODO: repeat code + if (isFirst) { + this.origPageX = ev.pageX; + this.origPageY = ev.pageY; + } + else { + deltaX = ev.pageX - this.origPageX; + deltaY = ev.pageY - this.origPageY; + } + return { + origEvent: ev, + isTouch: false, + subjectEl: this.subjectEl, + pageX: ev.pageX, + pageY: ev.pageY, + deltaX: deltaX, + deltaY: deltaY + }; + }; + PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) { + var touches = ev.touches; + var pageX; + var pageY; + var deltaX = 0; + var deltaY = 0; + // if touch coords available, prefer, + // because FF would give bad ev.pageX ev.pageY + if (touches && touches.length) { + pageX = touches[0].pageX; + pageY = touches[0].pageY; + } + else { + pageX = ev.pageX; + pageY = ev.pageY; + } + // TODO: repeat code + if (isFirst) { + this.origPageX = pageX; + this.origPageY = pageY; + } + else { + deltaX = pageX - this.origPageX; + deltaY = pageY - this.origPageY; + } + return { + origEvent: ev, + isTouch: true, + subjectEl: this.subjectEl, + pageX: pageX, + pageY: pageY, + deltaX: deltaX, + deltaY: deltaY + }; + }; + return PointerDragging; + }()); + // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac) + function isPrimaryMouseButton(ev) { + return ev.button === 0 && !ev.ctrlKey; + } + // Ignoring fake mouse events generated by touch + // ---------------------------------------------------------------------------------------------------- + function startIgnoringMouse() { + ignoreMouseDepth++; + setTimeout(function () { + ignoreMouseDepth--; + }, core.config.touchMouseIgnoreWait); + } + // We want to attach touchmove as early as possible for Safari + // ---------------------------------------------------------------------------------------------------- + function listenerCreated() { + if (!(listenerCnt++)) { + window.addEventListener('touchmove', onWindowTouchMove, { passive: false }); + } + } + function listenerDestroyed() { + if (!(--listenerCnt)) { + window.removeEventListener('touchmove', onWindowTouchMove, { passive: false }); + } + } + function onWindowTouchMove(ev) { + if (isWindowTouchMoveCancelled) { + ev.preventDefault(); + } + } + + /* + An effect in which an element follows the movement of a pointer across the screen. + The moving element is a clone of some other element. + Must call start + handleMove + stop. + */ + var ElementMirror = /** @class */ (function () { + function ElementMirror() { + this.isVisible = false; // must be explicitly enabled + this.sourceEl = null; + this.mirrorEl = null; + this.sourceElRect = null; // screen coords relative to viewport + // options that can be set directly by caller + this.parentNode = document.body; + this.zIndex = 9999; + this.revertDuration = 0; + } + ElementMirror.prototype.start = function (sourceEl, pageX, pageY) { + this.sourceEl = sourceEl; + this.sourceElRect = this.sourceEl.getBoundingClientRect(); + this.origScreenX = pageX - window.pageXOffset; + this.origScreenY = pageY - window.pageYOffset; + this.deltaX = 0; + this.deltaY = 0; + this.updateElPosition(); + }; + ElementMirror.prototype.handleMove = function (pageX, pageY) { + this.deltaX = (pageX - window.pageXOffset) - this.origScreenX; + this.deltaY = (pageY - window.pageYOffset) - this.origScreenY; + this.updateElPosition(); + }; + // can be called before start + ElementMirror.prototype.setIsVisible = function (bool) { + if (bool) { + if (!this.isVisible) { + if (this.mirrorEl) { + this.mirrorEl.style.display = ''; + } + this.isVisible = bool; // needs to happen before updateElPosition + this.updateElPosition(); // because was not updating the position while invisible + } + } + else { + if (this.isVisible) { + if (this.mirrorEl) { + this.mirrorEl.style.display = 'none'; + } + this.isVisible = bool; + } + } + }; + // always async + ElementMirror.prototype.stop = function (needsRevertAnimation, callback) { + var _this = this; + var done = function () { + _this.cleanup(); + callback(); + }; + if (needsRevertAnimation && + this.mirrorEl && + this.isVisible && + this.revertDuration && // if 0, transition won't work + (this.deltaX || this.deltaY) // if same coords, transition won't work + ) { + this.doRevertAnimation(done, this.revertDuration); + } + else { + setTimeout(done, 0); + } + }; + ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) { + var mirrorEl = this.mirrorEl; + var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened + mirrorEl.style.transition = + 'top ' + revertDuration + 'ms,' + + 'left ' + revertDuration + 'ms'; + core.applyStyle(mirrorEl, { + left: finalSourceElRect.left, + top: finalSourceElRect.top + }); + core.whenTransitionDone(mirrorEl, function () { + mirrorEl.style.transition = ''; + callback(); + }); + }; + ElementMirror.prototype.cleanup = function () { + if (this.mirrorEl) { + core.removeElement(this.mirrorEl); + this.mirrorEl = null; + } + this.sourceEl = null; + }; + ElementMirror.prototype.updateElPosition = function () { + if (this.sourceEl && this.isVisible) { + core.applyStyle(this.getMirrorEl(), { + left: this.sourceElRect.left + this.deltaX, + top: this.sourceElRect.top + this.deltaY + }); + } + }; + ElementMirror.prototype.getMirrorEl = function () { + var sourceElRect = this.sourceElRect; + var mirrorEl = this.mirrorEl; + if (!mirrorEl) { + mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true + // we don't want long taps or any mouse interaction causing selection/menus. + // would use preventSelection(), but that prevents selectstart, causing problems. + mirrorEl.classList.add('fc-unselectable'); + mirrorEl.classList.add('fc-dragging'); + core.applyStyle(mirrorEl, { + position: 'fixed', + zIndex: this.zIndex, + visibility: '', + boxSizing: 'border-box', + width: sourceElRect.right - sourceElRect.left, + height: sourceElRect.bottom - sourceElRect.top, + right: 'auto', + bottom: 'auto', + margin: 0 + }); + this.parentNode.appendChild(mirrorEl); + } + return mirrorEl; + }; + return ElementMirror; + }()); + + /* + Is a cache for a given element's scroll information (all the info that ScrollController stores) + in addition the "client rectangle" of the element.. the area within the scrollbars. + + The cache can be in one of two modes: + - doesListening:false - ignores when the container is scrolled by someone else + - doesListening:true - watch for scrolling and update the cache + */ + var ScrollGeomCache = /** @class */ (function (_super) { + __extends(ScrollGeomCache, _super); + function ScrollGeomCache(scrollController, doesListening) { + var _this = _super.call(this) || this; + _this.handleScroll = function () { + _this.scrollTop = _this.scrollController.getScrollTop(); + _this.scrollLeft = _this.scrollController.getScrollLeft(); + _this.handleScrollChange(); + }; + _this.scrollController = scrollController; + _this.doesListening = doesListening; + _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop(); + _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft(); + _this.scrollWidth = scrollController.getScrollWidth(); + _this.scrollHeight = scrollController.getScrollHeight(); + _this.clientWidth = scrollController.getClientWidth(); + _this.clientHeight = scrollController.getClientHeight(); + _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values + if (_this.doesListening) { + _this.getEventTarget().addEventListener('scroll', _this.handleScroll); + } + return _this; + } + ScrollGeomCache.prototype.destroy = function () { + if (this.doesListening) { + this.getEventTarget().removeEventListener('scroll', this.handleScroll); + } + }; + ScrollGeomCache.prototype.getScrollTop = function () { + return this.scrollTop; + }; + ScrollGeomCache.prototype.getScrollLeft = function () { + return this.scrollLeft; + }; + ScrollGeomCache.prototype.setScrollTop = function (top) { + this.scrollController.setScrollTop(top); + if (!this.doesListening) { + // we are not relying on the element to normalize out-of-bounds scroll values + // so we need to sanitize ourselves + this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0); + this.handleScrollChange(); + } + }; + ScrollGeomCache.prototype.setScrollLeft = function (top) { + this.scrollController.setScrollLeft(top); + if (!this.doesListening) { + // we are not relying on the element to normalize out-of-bounds scroll values + // so we need to sanitize ourselves + this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0); + this.handleScrollChange(); + } + }; + ScrollGeomCache.prototype.getClientWidth = function () { + return this.clientWidth; + }; + ScrollGeomCache.prototype.getClientHeight = function () { + return this.clientHeight; + }; + ScrollGeomCache.prototype.getScrollWidth = function () { + return this.scrollWidth; + }; + ScrollGeomCache.prototype.getScrollHeight = function () { + return this.scrollHeight; + }; + ScrollGeomCache.prototype.handleScrollChange = function () { + }; + return ScrollGeomCache; + }(core.ScrollController)); + var ElementScrollGeomCache = /** @class */ (function (_super) { + __extends(ElementScrollGeomCache, _super); + function ElementScrollGeomCache(el, doesListening) { + return _super.call(this, new core.ElementScrollController(el), doesListening) || this; + } + ElementScrollGeomCache.prototype.getEventTarget = function () { + return this.scrollController.el; + }; + ElementScrollGeomCache.prototype.computeClientRect = function () { + return core.computeInnerRect(this.scrollController.el); + }; + return ElementScrollGeomCache; + }(ScrollGeomCache)); + var WindowScrollGeomCache = /** @class */ (function (_super) { + __extends(WindowScrollGeomCache, _super); + function WindowScrollGeomCache(doesListening) { + return _super.call(this, new core.WindowScrollController(), doesListening) || this; + } + WindowScrollGeomCache.prototype.getEventTarget = function () { + return window; + }; + WindowScrollGeomCache.prototype.computeClientRect = function () { + return { + left: this.scrollLeft, + right: this.scrollLeft + this.clientWidth, + top: this.scrollTop, + bottom: this.scrollTop + this.clientHeight + }; + }; + // the window is the only scroll object that changes it's rectangle relative + // to the document's topleft as it scrolls + WindowScrollGeomCache.prototype.handleScrollChange = function () { + this.clientRect = this.computeClientRect(); + }; + return WindowScrollGeomCache; + }(ScrollGeomCache)); + + // If available we are using native "performance" API instead of "Date" + // Read more about it on MDN: + // https://developer.mozilla.org/en-US/docs/Web/API/Performance + var getTime = typeof performance === 'function' ? performance.now : Date.now; + /* + For a pointer interaction, automatically scrolls certain scroll containers when the pointer + approaches the edge. + + The caller must call start + handleMove + stop. + */ + var AutoScroller = /** @class */ (function () { + function AutoScroller() { + var _this = this; + // options that can be set by caller + this.isEnabled = true; + this.scrollQuery = [window, '.fc-scroller']; + this.edgeThreshold = 50; // pixels + this.maxVelocity = 300; // pixels per second + // internal state + this.pointerScreenX = null; + this.pointerScreenY = null; + this.isAnimating = false; + this.scrollCaches = null; + // protect against the initial pointerdown being too close to an edge and starting the scroll + this.everMovedUp = false; + this.everMovedDown = false; + this.everMovedLeft = false; + this.everMovedRight = false; + this.animate = function () { + if (_this.isAnimating) { // wasn't cancelled between animation calls + var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset); + if (edge) { + var now = getTime(); + _this.handleSide(edge, (now - _this.msSinceRequest) / 1000); + _this.requestAnimation(now); + } + else { + _this.isAnimating = false; // will stop animation + } + } + }; + } + AutoScroller.prototype.start = function (pageX, pageY) { + if (this.isEnabled) { + this.scrollCaches = this.buildCaches(); + this.pointerScreenX = null; + this.pointerScreenY = null; + this.everMovedUp = false; + this.everMovedDown = false; + this.everMovedLeft = false; + this.everMovedRight = false; + this.handleMove(pageX, pageY); + } + }; + AutoScroller.prototype.handleMove = function (pageX, pageY) { + if (this.isEnabled) { + var pointerScreenX = pageX - window.pageXOffset; + var pointerScreenY = pageY - window.pageYOffset; + var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY; + var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX; + if (yDelta < 0) { + this.everMovedUp = true; + } + else if (yDelta > 0) { + this.everMovedDown = true; + } + if (xDelta < 0) { + this.everMovedLeft = true; + } + else if (xDelta > 0) { + this.everMovedRight = true; + } + this.pointerScreenX = pointerScreenX; + this.pointerScreenY = pointerScreenY; + if (!this.isAnimating) { + this.isAnimating = true; + this.requestAnimation(getTime()); + } + } + }; + AutoScroller.prototype.stop = function () { + if (this.isEnabled) { + this.isAnimating = false; // will stop animation + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + scrollCache.destroy(); + } + this.scrollCaches = null; + } + }; + AutoScroller.prototype.requestAnimation = function (now) { + this.msSinceRequest = now; + requestAnimationFrame(this.animate); + }; + AutoScroller.prototype.handleSide = function (edge, seconds) { + var scrollCache = edge.scrollCache; + var edgeThreshold = this.edgeThreshold; + var invDistance = edgeThreshold - edge.distance; + var velocity = // the closer to the edge, the faster we scroll + (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic + this.maxVelocity * seconds; + var sign = 1; + switch (edge.name) { + case 'left': + sign = -1; + // falls through + case 'right': + scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign); + break; + case 'top': + sign = -1; + // falls through + case 'bottom': + scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign); + break; + } + }; + // left/top are relative to document topleft + AutoScroller.prototype.computeBestEdge = function (left, top) { + var edgeThreshold = this.edgeThreshold; + var bestSide = null; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + var rect = scrollCache.clientRect; + var leftDist = left - rect.left; + var rightDist = rect.right - left; + var topDist = top - rect.top; + var bottomDist = rect.bottom - top; + // completely within the rect? + if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) { + if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() && + (!bestSide || bestSide.distance > topDist)) { + bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist }; + } + if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() && + (!bestSide || bestSide.distance > bottomDist)) { + bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist }; + } + if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() && + (!bestSide || bestSide.distance > leftDist)) { + bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist }; + } + if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() && + (!bestSide || bestSide.distance > rightDist)) { + bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist }; + } + } + } + return bestSide; + }; + AutoScroller.prototype.buildCaches = function () { + return this.queryScrollEls().map(function (el) { + if (el === window) { + return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls + } + else { + return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls + } + }); + }; + AutoScroller.prototype.queryScrollEls = function () { + var els = []; + for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) { + var query = _a[_i]; + if (typeof query === 'object') { + els.push(query); + } + else { + els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query))); + } + } + return els; + }; + return AutoScroller; + }()); + + /* + Monitors dragging on an element. Has a number of high-level features: + - minimum distance required before dragging + - minimum wait time ("delay") before dragging + - a mirror element that follows the pointer + */ + var FeaturefulElementDragging = /** @class */ (function (_super) { + __extends(FeaturefulElementDragging, _super); + function FeaturefulElementDragging(containerEl) { + var _this = _super.call(this, containerEl) || this; + // options that can be directly set by caller + // the caller can also set the PointerDragging's options as well + _this.delay = null; + _this.minDistance = 0; + _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag + _this.mirrorNeedsRevert = false; + _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup + _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation + _this.isDelayEnded = false; + _this.isDistanceSurpassed = false; + _this.delayTimeoutId = null; + _this.onPointerDown = function (ev) { + if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going + _this.isInteracting = true; + _this.isDelayEnded = false; + _this.isDistanceSurpassed = false; + core.preventSelection(document.body); + core.preventContextMenu(document.body); + // prevent links from being visited if there's an eventual drag. + // also prevents selection in older browsers (maybe?). + // not necessary for touch, besides, browser would complain about passiveness. + if (!ev.isTouch) { + ev.origEvent.preventDefault(); + } + _this.emitter.trigger('pointerdown', ev); + if (!_this.pointer.shouldIgnoreMove) { + // actions related to initiating dragstart+dragmove+dragend... + _this.mirror.setIsVisible(false); // reset. caller must set-visible + _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down + _this.startDelay(ev); + if (!_this.minDistance) { + _this.handleDistanceSurpassed(ev); + } + } + } + }; + _this.onPointerMove = function (ev) { + if (_this.isInteracting) { // if false, still waiting for previous drag's revert + _this.emitter.trigger('pointermove', ev); + if (!_this.isDistanceSurpassed) { + var minDistance = _this.minDistance; + var distanceSq = void 0; // current distance from the origin, squared + var deltaX = ev.deltaX, deltaY = ev.deltaY; + distanceSq = deltaX * deltaX + deltaY * deltaY; + if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem + _this.handleDistanceSurpassed(ev); + } + } + if (_this.isDragging) { + // a real pointer move? (not one simulated by scrolling) + if (ev.origEvent.type !== 'scroll') { + _this.mirror.handleMove(ev.pageX, ev.pageY); + _this.autoScroller.handleMove(ev.pageX, ev.pageY); + } + _this.emitter.trigger('dragmove', ev); + } + } + }; + _this.onPointerUp = function (ev) { + if (_this.isInteracting) { // if false, still waiting for previous drag's revert + _this.isInteracting = false; + core.allowSelection(document.body); + core.allowContextMenu(document.body); + _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert + if (_this.isDragging) { + _this.autoScroller.stop(); + _this.tryStopDrag(ev); // which will stop the mirror + } + if (_this.delayTimeoutId) { + clearTimeout(_this.delayTimeoutId); + _this.delayTimeoutId = null; + } + } + }; + var pointer = _this.pointer = new PointerDragging(containerEl); + pointer.emitter.on('pointerdown', _this.onPointerDown); + pointer.emitter.on('pointermove', _this.onPointerMove); + pointer.emitter.on('pointerup', _this.onPointerUp); + _this.mirror = new ElementMirror(); + _this.autoScroller = new AutoScroller(); + return _this; + } + FeaturefulElementDragging.prototype.destroy = function () { + this.pointer.destroy(); + }; + FeaturefulElementDragging.prototype.startDelay = function (ev) { + var _this = this; + if (typeof this.delay === 'number') { + this.delayTimeoutId = setTimeout(function () { + _this.delayTimeoutId = null; + _this.handleDelayEnd(ev); + }, this.delay); // not assignable to number! + } + else { + this.handleDelayEnd(ev); + } + }; + FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) { + this.isDelayEnded = true; + this.tryStartDrag(ev); + }; + FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) { + this.isDistanceSurpassed = true; + this.tryStartDrag(ev); + }; + FeaturefulElementDragging.prototype.tryStartDrag = function (ev) { + if (this.isDelayEnded && this.isDistanceSurpassed) { + if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) { + this.isDragging = true; + this.mirrorNeedsRevert = false; + this.autoScroller.start(ev.pageX, ev.pageY); + this.emitter.trigger('dragstart', ev); + if (this.touchScrollAllowed === false) { + this.pointer.cancelTouchScroll(); + } + } + } + }; + FeaturefulElementDragging.prototype.tryStopDrag = function (ev) { + // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events + // that come from the document to fire beforehand. much more convenient this way. + this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args + ); + }; + FeaturefulElementDragging.prototype.stopDrag = function (ev) { + this.isDragging = false; + this.emitter.trigger('dragend', ev); + }; + // fill in the implementations... + FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) { + this.pointer.shouldIgnoreMove = bool; + }; + FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) { + this.mirror.setIsVisible(bool); + }; + FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) { + this.mirrorNeedsRevert = bool; + }; + FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) { + this.autoScroller.isEnabled = bool; + }; + return FeaturefulElementDragging; + }(core.ElementDragging)); + + /* + When this class is instantiated, it records the offset of an element (relative to the document topleft), + and continues to monitor scrolling, updating the cached coordinates if it needs to. + Does not access the DOM after instantiation, so highly performant. + + Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element + and an determine if a given point is inside the combined clipping rectangle. + */ + var OffsetTracker = /** @class */ (function () { + function OffsetTracker(el) { + this.origRect = core.computeRect(el); + // will work fine for divs that have overflow:hidden + this.scrollCaches = core.getClippingParents(el).map(function (el) { + return new ElementScrollGeomCache(el, true); // listen=true + }); + } + OffsetTracker.prototype.destroy = function () { + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + scrollCache.destroy(); + } + }; + OffsetTracker.prototype.computeLeft = function () { + var left = this.origRect.left; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + left += scrollCache.origScrollLeft - scrollCache.getScrollLeft(); + } + return left; + }; + OffsetTracker.prototype.computeTop = function () { + var top = this.origRect.top; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + top += scrollCache.origScrollTop - scrollCache.getScrollTop(); + } + return top; + }; + OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) { + var point = { left: pageX, top: pageY }; + for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) { + var scrollCache = _a[_i]; + if (!isIgnoredClipping(scrollCache.getEventTarget()) && + !core.pointInsideRect(point, scrollCache.clientRect)) { + return false; + } + } + return true; + }; + return OffsetTracker; + }()); + // certain clipping containers should never constrain interactions, like and + // https://github.com/fullcalendar/fullcalendar/issues/3615 + function isIgnoredClipping(node) { + var tagName = node.tagName; + return tagName === 'HTML' || tagName === 'BODY'; + } + + /* + Tracks movement over multiple droppable areas (aka "hits") + that exist in one or more DateComponents. + Relies on an existing draggable. + + emits: + - pointerdown + - dragstart + - hitchange - fires initially, even if not over a hit + - pointerup + - (hitchange - again, to null, if ended over a hit) + - dragend + */ + var HitDragging = /** @class */ (function () { + function HitDragging(dragging, droppableStore) { + var _this = this; + // options that can be set by caller + this.useSubjectCenter = false; + this.requireInitial = true; // if doesn't start out on a hit, won't emit any events + this.initialHit = null; + this.movingHit = null; + this.finalHit = null; // won't ever be populated if shouldIgnoreMove + this.handlePointerDown = function (ev) { + var dragging = _this.dragging; + _this.initialHit = null; + _this.movingHit = null; + _this.finalHit = null; + _this.prepareHits(); + _this.processFirstCoord(ev); + if (_this.initialHit || !_this.requireInitial) { + dragging.setIgnoreMove(false); + _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :( + } + else { + dragging.setIgnoreMove(true); + } + }; + this.handleDragStart = function (ev) { + _this.emitter.trigger('dragstart', ev); + _this.handleMove(ev, true); // force = fire even if initially null + }; + this.handleDragMove = function (ev) { + _this.emitter.trigger('dragmove', ev); + _this.handleMove(ev); + }; + this.handlePointerUp = function (ev) { + _this.releaseHits(); + _this.emitter.trigger('pointerup', ev); + }; + this.handleDragEnd = function (ev) { + if (_this.movingHit) { + _this.emitter.trigger('hitupdate', null, true, ev); + } + _this.finalHit = _this.movingHit; + _this.movingHit = null; + _this.emitter.trigger('dragend', ev); + }; + this.droppableStore = droppableStore; + dragging.emitter.on('pointerdown', this.handlePointerDown); + dragging.emitter.on('dragstart', this.handleDragStart); + dragging.emitter.on('dragmove', this.handleDragMove); + dragging.emitter.on('pointerup', this.handlePointerUp); + dragging.emitter.on('dragend', this.handleDragEnd); + this.dragging = dragging; + this.emitter = new core.EmitterMixin(); + } + // sets initialHit + // sets coordAdjust + HitDragging.prototype.processFirstCoord = function (ev) { + var origPoint = { left: ev.pageX, top: ev.pageY }; + var adjustedPoint = origPoint; + var subjectEl = ev.subjectEl; + var subjectRect; + if (subjectEl !== document) { + subjectRect = core.computeRect(subjectEl); + adjustedPoint = core.constrainPoint(adjustedPoint, subjectRect); + } + var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top); + if (initialHit) { + if (this.useSubjectCenter && subjectRect) { + var slicedSubjectRect = core.intersectRects(subjectRect, initialHit.rect); + if (slicedSubjectRect) { + adjustedPoint = core.getRectCenter(slicedSubjectRect); + } + } + this.coordAdjust = core.diffPoints(adjustedPoint, origPoint); + } + else { + this.coordAdjust = { left: 0, top: 0 }; + } + }; + HitDragging.prototype.handleMove = function (ev, forceHandle) { + var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top); + if (forceHandle || !isHitsEqual(this.movingHit, hit)) { + this.movingHit = hit; + this.emitter.trigger('hitupdate', hit, false, ev); + } + }; + HitDragging.prototype.prepareHits = function () { + this.offsetTrackers = core.mapHash(this.droppableStore, function (interactionSettings) { + interactionSettings.component.buildPositionCaches(); + return new OffsetTracker(interactionSettings.el); + }); + }; + HitDragging.prototype.releaseHits = function () { + var offsetTrackers = this.offsetTrackers; + for (var id in offsetTrackers) { + offsetTrackers[id].destroy(); + } + this.offsetTrackers = {}; + }; + HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) { + var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers; + var bestHit = null; + for (var id in droppableStore) { + var component = droppableStore[id].component; + var offsetTracker = offsetTrackers[id]; + if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) { + var originLeft = offsetTracker.computeLeft(); + var originTop = offsetTracker.computeTop(); + var positionLeft = offsetLeft - originLeft; + var positionTop = offsetTop - originTop; + var origRect = offsetTracker.origRect; + var width = origRect.right - origRect.left; + var height = origRect.bottom - origRect.top; + if ( + // must be within the element's bounds + positionLeft >= 0 && positionLeft < width && + positionTop >= 0 && positionTop < height) { + var hit = component.queryHit(positionLeft, positionTop, width, height); + if (hit && + ( + // make sure the hit is within activeRange, meaning it's not a deal cell + !component.props.dateProfile || // hack for DayTile + core.rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) && + (!bestHit || hit.layer > bestHit.layer)) { + // TODO: better way to re-orient rectangle + hit.rect.left += originLeft; + hit.rect.right += originLeft; + hit.rect.top += originTop; + hit.rect.bottom += originTop; + bestHit = hit; + } + } + } + } + return bestHit; + }; + return HitDragging; + }()); + function isHitsEqual(hit0, hit1) { + if (!hit0 && !hit1) { + return true; + } + if (Boolean(hit0) !== Boolean(hit1)) { + return false; + } + return core.isDateSpansEqual(hit0.dateSpan, hit1.dateSpan); + } + + /* + Monitors when the user clicks on a specific date/time of a component. + A pointerdown+pointerup on the same "hit" constitutes a click. + */ + var DateClicking = /** @class */ (function (_super) { + __extends(DateClicking, _super); + function DateClicking(settings) { + var _this = _super.call(this, settings) || this; + _this.handlePointerDown = function (ev) { + var dragging = _this.dragging; + // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired + dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl)); + }; + // won't even fire if moving was ignored + _this.handleDragEnd = function (ev) { + var component = _this.component; + var _a = component.context, calendar = _a.calendar, view = _a.view; + var pointer = _this.dragging.pointer; + if (!pointer.wasTouchScroll) { + var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit; + if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) { + calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent); + } + } + }; + var component = settings.component; + // we DO want to watch pointer moves because otherwise finalHit won't get populated + _this.dragging = new FeaturefulElementDragging(component.el); + _this.dragging.autoScroller.isEnabled = false; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings)); + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragend', _this.handleDragEnd); + return _this; + } + DateClicking.prototype.destroy = function () { + this.dragging.destroy(); + }; + return DateClicking; + }(core.Interaction)); + + /* + Tracks when the user selects a portion of time of a component, + constituted by a drag over date cells, with a possible delay at the beginning of the drag. + */ + var DateSelecting = /** @class */ (function (_super) { + __extends(DateSelecting, _super); + function DateSelecting(settings) { + var _this = _super.call(this, settings) || this; + _this.dragSelection = null; + _this.handlePointerDown = function (ev) { + var _a = _this, component = _a.component, dragging = _a.dragging; + var options = component.context.options; + var canSelect = options.selectable && + component.isValidDateDownEl(ev.origEvent.target); + // don't bother to watch expensive moves if component won't do selection + dragging.setIgnoreMove(!canSelect); + // if touch, require user to hold down + dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null; + }; + _this.handleDragStart = function (ev) { + _this.component.context.calendar.unselect(ev); // unselect previous selections + }; + _this.handleHitUpdate = function (hit, isFinal) { + var calendar = _this.component.context.calendar; + var dragSelection = null; + var isInvalid = false; + if (hit) { + dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers); + if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) { + isInvalid = true; + dragSelection = null; + } + } + if (dragSelection) { + calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection }); + } + else if (!isFinal) { // only unselect if moved away while dragging + calendar.dispatch({ type: 'UNSELECT_DATES' }); + } + if (!isInvalid) { + core.enableCursor(); + } + else { + core.disableCursor(); + } + if (!isFinal) { + _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging + } + }; + _this.handlePointerUp = function (pev) { + if (_this.dragSelection) { + // selection is already rendered, so just need to report selection + _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev); + _this.dragSelection = null; + } + }; + var component = settings.component; + var options = component.context.options; + var dragging = _this.dragging = new FeaturefulElementDragging(component.el); + dragging.touchScrollAllowed = false; + dragging.minDistance = options.selectMinDistance || 0; + dragging.autoScroller.isEnabled = options.dragScroll; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings)); + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragstart', _this.handleDragStart); + hitDragging.emitter.on('hitupdate', _this.handleHitUpdate); + hitDragging.emitter.on('pointerup', _this.handlePointerUp); + return _this; + } + DateSelecting.prototype.destroy = function () { + this.dragging.destroy(); + }; + return DateSelecting; + }(core.Interaction)); + function getComponentTouchDelay(component) { + var options = component.context.options; + var delay = options.selectLongPressDelay; + if (delay == null) { + delay = options.longPressDelay; + } + return delay; + } + function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) { + var dateSpan0 = hit0.dateSpan; + var dateSpan1 = hit1.dateSpan; + var ms = [ + dateSpan0.range.start, + dateSpan0.range.end, + dateSpan1.range.start, + dateSpan1.range.end + ]; + ms.sort(core.compareNumbers); + var props = {}; + for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) { + var transformer = dateSelectionTransformers_1[_i]; + var res = transformer(hit0, hit1); + if (res === false) { + return null; + } + else if (res) { + __assign(props, res); + } + } + props.range = { start: ms[0], end: ms[3] }; + props.allDay = dateSpan0.allDay; + return props; + } + + var EventDragging = /** @class */ (function (_super) { + __extends(EventDragging, _super); + function EventDragging(settings) { + var _this = _super.call(this, settings) || this; + // internal state + _this.subjectSeg = null; // the seg being selected/dragged + _this.isDragging = false; + _this.eventRange = null; + _this.relevantEvents = null; // the events being dragged + _this.receivingCalendar = null; + _this.validMutation = null; + _this.mutatedRelevantEvents = null; + _this.handlePointerDown = function (ev) { + var origTarget = ev.origEvent.target; + var _a = _this, component = _a.component, dragging = _a.dragging; + var mirror = dragging.mirror; + var options = component.context.options; + var initialCalendar = component.context.calendar; + var subjectSeg = _this.subjectSeg = core.getElSeg(ev.subjectEl); + var eventRange = _this.eventRange = subjectSeg.eventRange; + var eventInstanceId = eventRange.instance.instanceId; + _this.relevantEvents = core.getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId); + dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance; + dragging.delay = + // only do a touch delay if touch and this event hasn't been selected yet + (ev.isTouch && eventInstanceId !== component.props.eventSelection) ? + getComponentTouchDelay$1(component) : + null; + mirror.parentNode = initialCalendar.el; + mirror.revertDuration = options.dragRevertDuration; + var isValid = component.isValidSegDownEl(origTarget) && + !core.elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer + dragging.setIgnoreMove(!isValid); + // disable dragging for elements that are resizable (ie, selectable) + // but are not draggable + _this.isDragging = isValid && + ev.subjectEl.classList.contains('fc-draggable'); + }; + _this.handleDragStart = function (ev) { + var context = _this.component.context; + var initialCalendar = context.calendar; + var eventRange = _this.eventRange; + var eventInstanceId = eventRange.instance.instanceId; + if (ev.isTouch) { + // need to select a different event? + if (eventInstanceId !== _this.component.props.eventSelection) { + initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId }); + } + } + else { + // if now using mouse, but was previous touch interaction, clear selected event + initialCalendar.dispatch({ type: 'UNSELECT_EVENT' }); + } + if (_this.isDragging) { + initialCalendar.unselect(ev); // unselect *date* selection + initialCalendar.publiclyTrigger('eventDragStart', [ + { + el: _this.subjectSeg.el, + event: new core.EventApi(initialCalendar, eventRange.def, eventRange.instance), + jsEvent: ev.origEvent, + view: context.view + } + ]); + } + }; + _this.handleHitUpdate = function (hit, isFinal) { + if (!_this.isDragging) { + return; + } + var relevantEvents = _this.relevantEvents; + var initialHit = _this.hitDragging.initialHit; + var initialCalendar = _this.component.context.calendar; + // states based on new hit + var receivingCalendar = null; + var mutation = null; + var mutatedRelevantEvents = null; + var isInvalid = false; + var interaction = { + affectedEvents: relevantEvents, + mutatedEvents: core.createEmptyEventStore(), + isEvent: true, + origSeg: _this.subjectSeg + }; + if (hit) { + var receivingComponent = hit.component; + receivingCalendar = receivingComponent.context.calendar; + var receivingOptions = receivingComponent.context.options; + if (initialCalendar === receivingCalendar || + receivingOptions.editable && receivingOptions.droppable) { + mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers); + if (mutation) { + mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar); + interaction.mutatedEvents = mutatedRelevantEvents; + if (!receivingComponent.isInteractionValid(interaction)) { + isInvalid = true; + mutation = null; + mutatedRelevantEvents = null; + interaction.mutatedEvents = core.createEmptyEventStore(); + } + } + } + else { + receivingCalendar = null; + } + } + _this.displayDrag(receivingCalendar, interaction); + if (!isInvalid) { + core.enableCursor(); + } + else { + core.disableCursor(); + } + if (!isFinal) { + if (initialCalendar === receivingCalendar && // TODO: write test for this + isHitsEqual(initialHit, hit)) { + mutation = null; + } + _this.dragging.setMirrorNeedsRevert(!mutation); + // render the mirror if no already-rendered mirror + // TODO: wish we could somehow wait for dispatch to guarantee render + _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror')); + // assign states based on new hit + _this.receivingCalendar = receivingCalendar; + _this.validMutation = mutation; + _this.mutatedRelevantEvents = mutatedRelevantEvents; + } + }; + _this.handlePointerUp = function () { + if (!_this.isDragging) { + _this.cleanup(); // because handleDragEnd won't fire + } + }; + _this.handleDragEnd = function (ev) { + if (_this.isDragging) { + var context = _this.component.context; + var initialCalendar_1 = context.calendar; + var initialView = context.view; + var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation; + var eventDef = _this.eventRange.def; + var eventInstance = _this.eventRange.instance; + var eventApi = new core.EventApi(initialCalendar_1, eventDef, eventInstance); + var relevantEvents_1 = _this.relevantEvents; + var mutatedRelevantEvents = _this.mutatedRelevantEvents; + var finalHit = _this.hitDragging.finalHit; + _this.clearDrag(); // must happen after revert animation + initialCalendar_1.publiclyTrigger('eventDragStop', [ + { + el: _this.subjectSeg.el, + event: eventApi, + jsEvent: ev.origEvent, + view: initialView + } + ]); + if (validMutation) { + // dropped within same calendar + if (receivingCalendar === initialCalendar_1) { + initialCalendar_1.dispatch({ + type: 'MERGE_EVENTS', + eventStore: mutatedRelevantEvents + }); + var transformed = {}; + for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) { + var transformer = _b[_i]; + __assign(transformed, transformer(validMutation, initialCalendar_1)); + } + var eventDropArg = __assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new core.EventApi(// the data AFTER the mutation + initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () { + initialCalendar_1.dispatch({ + type: 'MERGE_EVENTS', + eventStore: relevantEvents_1 + }); + }, jsEvent: ev.origEvent, view: initialView }); + initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]); + // dropped in different calendar + } + else if (receivingCalendar) { + initialCalendar_1.publiclyTrigger('eventLeave', [ + { + draggedEl: ev.subjectEl, + event: eventApi, + view: initialView + } + ]); + initialCalendar_1.dispatch({ + type: 'REMOVE_EVENT_INSTANCES', + instances: _this.mutatedRelevantEvents.instances + }); + receivingCalendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: _this.mutatedRelevantEvents + }); + if (ev.isTouch) { + receivingCalendar.dispatch({ + type: 'SELECT_EVENT', + eventInstanceId: eventInstance.instanceId + }); + } + var dropArg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644 + }); + receivingCalendar.publiclyTrigger('drop', [dropArg]); + receivingCalendar.publiclyTrigger('eventReceive', [ + { + draggedEl: ev.subjectEl, + event: new core.EventApi(// the data AFTER the mutation + receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]), + view: finalHit.component // should this be finalHit.component.view? See #4644 + } + ]); + } + } + else { + initialCalendar_1.publiclyTrigger('_noEventDrop'); + } + } + _this.cleanup(); + }; + var component = _this.component; + var options = component.context.options; + var dragging = _this.dragging = new FeaturefulElementDragging(component.el); + dragging.pointer.selector = EventDragging.SELECTOR; + dragging.touchScrollAllowed = false; + dragging.autoScroller.isEnabled = options.dragScroll; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsStore); + hitDragging.useSubjectCenter = settings.useEventCenter; + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragstart', _this.handleDragStart); + hitDragging.emitter.on('hitupdate', _this.handleHitUpdate); + hitDragging.emitter.on('pointerup', _this.handlePointerUp); + hitDragging.emitter.on('dragend', _this.handleDragEnd); + return _this; + } + EventDragging.prototype.destroy = function () { + this.dragging.destroy(); + }; + // render a drag state on the next receivingCalendar + EventDragging.prototype.displayDrag = function (nextCalendar, state) { + var initialCalendar = this.component.context.calendar; + var prevCalendar = this.receivingCalendar; + // does the previous calendar need to be cleared? + if (prevCalendar && prevCalendar !== nextCalendar) { + // does the initial calendar need to be cleared? + // if so, don't clear all the way. we still need to to hide the affectedEvents + if (prevCalendar === initialCalendar) { + prevCalendar.dispatch({ + type: 'SET_EVENT_DRAG', + state: { + affectedEvents: state.affectedEvents, + mutatedEvents: core.createEmptyEventStore(), + isEvent: true, + origSeg: state.origSeg + } + }); + // completely clear the old calendar if it wasn't the initial + } + else { + prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + } + if (nextCalendar) { + nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state }); + } + }; + EventDragging.prototype.clearDrag = function () { + var initialCalendar = this.component.context.calendar; + var receivingCalendar = this.receivingCalendar; + if (receivingCalendar) { + receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + // the initial calendar might have an dummy drag state from displayDrag + if (initialCalendar !== receivingCalendar) { + initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + }; + EventDragging.prototype.cleanup = function () { + this.subjectSeg = null; + this.isDragging = false; + this.eventRange = null; + this.relevantEvents = null; + this.receivingCalendar = null; + this.validMutation = null; + this.mutatedRelevantEvents = null; + }; + EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11 + return EventDragging; + }(core.Interaction)); + function computeEventMutation(hit0, hit1, massagers) { + var dateSpan0 = hit0.dateSpan; + var dateSpan1 = hit1.dateSpan; + var date0 = dateSpan0.range.start; + var date1 = dateSpan1.range.start; + var standardProps = {}; + if (dateSpan0.allDay !== dateSpan1.allDay) { + standardProps.allDay = dateSpan1.allDay; + standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration; + if (dateSpan1.allDay) { + // means date1 is already start-of-day, + // but date0 needs to be converted + date0 = core.startOfDay(date0); + } + } + var delta = core.diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ? + hit0.component.largeUnit : + null); + if (delta.milliseconds) { // has hours/minutes/seconds + standardProps.allDay = false; + } + var mutation = { + datesDelta: delta, + standardProps: standardProps + }; + for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) { + var massager = massagers_1[_i]; + massager(mutation, hit0, hit1); + } + return mutation; + } + function getComponentTouchDelay$1(component) { + var options = component.context.options; + var delay = options.eventLongPressDelay; + if (delay == null) { + delay = options.longPressDelay; + } + return delay; + } + + var EventDragging$1 = /** @class */ (function (_super) { + __extends(EventDragging, _super); + function EventDragging(settings) { + var _this = _super.call(this, settings) || this; + // internal state + _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg? + _this.eventRange = null; + _this.relevantEvents = null; + _this.validMutation = null; + _this.mutatedRelevantEvents = null; + _this.handlePointerDown = function (ev) { + var component = _this.component; + var seg = _this.querySeg(ev); + var eventRange = _this.eventRange = seg.eventRange; + _this.dragging.minDistance = component.context.options.eventDragMinDistance; + // if touch, need to be working with a selected event + _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) || + (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId)); + }; + _this.handleDragStart = function (ev) { + var _a = _this.component.context, calendar = _a.calendar, view = _a.view; + var eventRange = _this.eventRange; + _this.relevantEvents = core.getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId); + _this.draggingSeg = _this.querySeg(ev); + calendar.unselect(); + calendar.publiclyTrigger('eventResizeStart', [ + { + el: _this.draggingSeg.el, + event: new core.EventApi(calendar, eventRange.def, eventRange.instance), + jsEvent: ev.origEvent, + view: view + } + ]); + }; + _this.handleHitUpdate = function (hit, isFinal, ev) { + var calendar = _this.component.context.calendar; + var relevantEvents = _this.relevantEvents; + var initialHit = _this.hitDragging.initialHit; + var eventInstance = _this.eventRange.instance; + var mutation = null; + var mutatedRelevantEvents = null; + var isInvalid = false; + var interaction = { + affectedEvents: relevantEvents, + mutatedEvents: core.createEmptyEventStore(), + isEvent: true, + origSeg: _this.draggingSeg + }; + if (hit) { + mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms); + } + if (mutation) { + mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar); + interaction.mutatedEvents = mutatedRelevantEvents; + if (!_this.component.isInteractionValid(interaction)) { + isInvalid = true; + mutation = null; + mutatedRelevantEvents = null; + interaction.mutatedEvents = null; + } + } + if (mutatedRelevantEvents) { + calendar.dispatch({ + type: 'SET_EVENT_RESIZE', + state: interaction + }); + } + else { + calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' }); + } + if (!isInvalid) { + core.enableCursor(); + } + else { + core.disableCursor(); + } + if (!isFinal) { + if (mutation && isHitsEqual(initialHit, hit)) { + mutation = null; + } + _this.validMutation = mutation; + _this.mutatedRelevantEvents = mutatedRelevantEvents; + } + }; + _this.handleDragEnd = function (ev) { + var _a = _this.component.context, calendar = _a.calendar, view = _a.view; + var eventDef = _this.eventRange.def; + var eventInstance = _this.eventRange.instance; + var eventApi = new core.EventApi(calendar, eventDef, eventInstance); + var relevantEvents = _this.relevantEvents; + var mutatedRelevantEvents = _this.mutatedRelevantEvents; + calendar.publiclyTrigger('eventResizeStop', [ + { + el: _this.draggingSeg.el, + event: eventApi, + jsEvent: ev.origEvent, + view: view + } + ]); + if (_this.validMutation) { + calendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: mutatedRelevantEvents + }); + calendar.publiclyTrigger('eventResize', [ + { + el: _this.draggingSeg.el, + startDelta: _this.validMutation.startDelta || core.createDuration(0), + endDelta: _this.validMutation.endDelta || core.createDuration(0), + prevEvent: eventApi, + event: new core.EventApi(// the data AFTER the mutation + calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), + revert: function () { + calendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: relevantEvents + }); + }, + jsEvent: ev.origEvent, + view: view + } + ]); + } + else { + calendar.publiclyTrigger('_noEventResize'); + } + // reset all internal state + _this.draggingSeg = null; + _this.relevantEvents = null; + _this.validMutation = null; + // okay to keep eventInstance around. useful to set it in handlePointerDown + }; + var component = settings.component; + var dragging = _this.dragging = new FeaturefulElementDragging(component.el); + dragging.pointer.selector = '.fc-resizer'; + dragging.touchScrollAllowed = false; + dragging.autoScroller.isEnabled = component.context.options.dragScroll; + var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings)); + hitDragging.emitter.on('pointerdown', _this.handlePointerDown); + hitDragging.emitter.on('dragstart', _this.handleDragStart); + hitDragging.emitter.on('hitupdate', _this.handleHitUpdate); + hitDragging.emitter.on('dragend', _this.handleDragEnd); + return _this; + } + EventDragging.prototype.destroy = function () { + this.dragging.destroy(); + }; + EventDragging.prototype.querySeg = function (ev) { + return core.getElSeg(core.elementClosest(ev.subjectEl, this.component.fgSegSelector)); + }; + return EventDragging; + }(core.Interaction)); + function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) { + var dateEnv = hit0.component.context.dateEnv; + var date0 = hit0.dateSpan.range.start; + var date1 = hit1.dateSpan.range.start; + var delta = core.diffDates(date0, date1, dateEnv, hit0.component.largeUnit); + var props = {}; + for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) { + var transform = transforms_1[_i]; + var res = transform(hit0, hit1); + if (res === false) { + return null; + } + else if (res) { + __assign(props, res); + } + } + if (isFromStart) { + if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) { + props.startDelta = delta; + return props; + } + } + else { + if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) { + props.endDelta = delta; + return props; + } + } + return null; + } + + var UnselectAuto = /** @class */ (function () { + function UnselectAuto(calendar) { + var _this = this; + this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system + this.onSelect = function (selectInfo) { + if (selectInfo.jsEvent) { + _this.isRecentPointerDateSelect = true; + } + }; + this.onDocumentPointerUp = function (pev) { + var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer; + var state = calendar.state; + // touch-scrolling should never unfocus any type of selection + if (!documentPointer.wasTouchScroll) { + if (state.dateSelection && // an existing date selection? + !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp? + ) { + var unselectAuto = calendar.viewOpt('unselectAuto'); + var unselectCancel = calendar.viewOpt('unselectCancel'); + if (unselectAuto && (!unselectAuto || !core.elementClosest(documentPointer.downEl, unselectCancel))) { + calendar.unselect(pev); + } + } + if (state.eventSelection && // an existing event selected? + !core.elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event + ) { + calendar.dispatch({ type: 'UNSELECT_EVENT' }); + } + } + _this.isRecentPointerDateSelect = false; + }; + this.calendar = calendar; + var documentPointer = this.documentPointer = new PointerDragging(document); + documentPointer.shouldIgnoreMove = true; + documentPointer.shouldWatchScroll = false; + documentPointer.emitter.on('pointerup', this.onDocumentPointerUp); + /* + TODO: better way to know about whether there was a selection with the pointer + */ + calendar.on('select', this.onSelect); + } + UnselectAuto.prototype.destroy = function () { + this.calendar.off('select', this.onSelect); + this.documentPointer.destroy(); + }; + return UnselectAuto; + }()); + + /* + Given an already instantiated draggable object for one-or-more elements, + Interprets any dragging as an attempt to drag an events that lives outside + of a calendar onto a calendar. + */ + var ExternalElementDragging = /** @class */ (function () { + function ExternalElementDragging(dragging, suppliedDragMeta) { + var _this = this; + this.receivingCalendar = null; + this.droppableEvent = null; // will exist for all drags, even if create:false + this.suppliedDragMeta = null; + this.dragMeta = null; + this.handleDragStart = function (ev) { + _this.dragMeta = _this.buildDragMeta(ev.subjectEl); + }; + this.handleHitUpdate = function (hit, isFinal, ev) { + var dragging = _this.hitDragging.dragging; + var receivingCalendar = null; + var droppableEvent = null; + var isInvalid = false; + var interaction = { + affectedEvents: core.createEmptyEventStore(), + mutatedEvents: core.createEmptyEventStore(), + isEvent: _this.dragMeta.create, + origSeg: null + }; + if (hit) { + receivingCalendar = hit.component.context.calendar; + if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) { + droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar); + interaction.mutatedEvents = core.eventTupleToStore(droppableEvent); + isInvalid = !core.isInteractionValid(interaction, receivingCalendar); + if (isInvalid) { + interaction.mutatedEvents = core.createEmptyEventStore(); + droppableEvent = null; + } + } + } + _this.displayDrag(receivingCalendar, interaction); + // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?) + // TODO: wish we could somehow wait for dispatch to guarantee render + dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror')); + if (!isInvalid) { + core.enableCursor(); + } + else { + core.disableCursor(); + } + if (!isFinal) { + dragging.setMirrorNeedsRevert(!droppableEvent); + _this.receivingCalendar = receivingCalendar; + _this.droppableEvent = droppableEvent; + } + }; + this.handleDragEnd = function (pev) { + var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent; + _this.clearDrag(); + if (receivingCalendar && droppableEvent) { + var finalHit = _this.hitDragging.finalHit; + var finalView = finalHit.component.context.view; + var dragMeta = _this.dragMeta; + var arg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView }); + receivingCalendar.publiclyTrigger('drop', [arg]); + if (dragMeta.create) { + receivingCalendar.dispatch({ + type: 'MERGE_EVENTS', + eventStore: core.eventTupleToStore(droppableEvent) + }); + if (pev.isTouch) { + receivingCalendar.dispatch({ + type: 'SELECT_EVENT', + eventInstanceId: droppableEvent.instance.instanceId + }); + } + // signal that an external event landed + receivingCalendar.publiclyTrigger('eventReceive', [ + { + draggedEl: pev.subjectEl, + event: new core.EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance), + view: finalView + } + ]); + } + } + _this.receivingCalendar = null; + _this.droppableEvent = null; + }; + var hitDragging = this.hitDragging = new HitDragging(dragging, core.interactionSettingsStore); + hitDragging.requireInitial = false; // will start outside of a component + hitDragging.emitter.on('dragstart', this.handleDragStart); + hitDragging.emitter.on('hitupdate', this.handleHitUpdate); + hitDragging.emitter.on('dragend', this.handleDragEnd); + this.suppliedDragMeta = suppliedDragMeta; + } + ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) { + if (typeof this.suppliedDragMeta === 'object') { + return core.parseDragMeta(this.suppliedDragMeta); + } + else if (typeof this.suppliedDragMeta === 'function') { + return core.parseDragMeta(this.suppliedDragMeta(subjectEl)); + } + else { + return getDragMetaFromEl(subjectEl); + } + }; + ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) { + var prevCalendar = this.receivingCalendar; + if (prevCalendar && prevCalendar !== nextCalendar) { + prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + if (nextCalendar) { + nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state }); + } + }; + ExternalElementDragging.prototype.clearDrag = function () { + if (this.receivingCalendar) { + this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' }); + } + }; + ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) { + var dropAccept = receivingCalendar.opt('dropAccept'); + if (typeof dropAccept === 'function') { + return dropAccept(el); + } + else if (typeof dropAccept === 'string' && dropAccept) { + return Boolean(core.elementMatches(el, dropAccept)); + } + return true; + }; + return ExternalElementDragging; + }()); + // Utils for computing event store from the DragMeta + // ---------------------------------------------------------------------------------------------------- + function computeEventForDateSpan(dateSpan, dragMeta, calendar) { + var defProps = __assign({}, dragMeta.leftoverProps); + for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) { + var transform = _a[_i]; + __assign(defProps, transform(dateSpan, dragMeta)); + } + var def = core.parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd + calendar); + var start = dateSpan.range.start; + // only rely on time info if drop zone is all-day, + // otherwise, we already know the time + if (dateSpan.allDay && dragMeta.startTime) { + start = calendar.dateEnv.add(start, dragMeta.startTime); + } + var end = dragMeta.duration ? + calendar.dateEnv.add(start, dragMeta.duration) : + calendar.getDefaultEventEnd(dateSpan.allDay, start); + var instance = core.createEventInstance(def.defId, { start: start, end: end }); + return { def: def, instance: instance }; + } + // Utils for extracting data from element + // ---------------------------------------------------------------------------------------------------- + function getDragMetaFromEl(el) { + var str = getEmbeddedElData(el, 'event'); + var obj = str ? + JSON.parse(str) : + { create: false }; // if no embedded data, assume no event creation + return core.parseDragMeta(obj); + } + core.config.dataAttrPrefix = ''; + function getEmbeddedElData(el, name) { + var prefix = core.config.dataAttrPrefix; + var prefixedName = (prefix ? prefix + '-' : '') + name; + return el.getAttribute('data-' + prefixedName) || ''; + } + + /* + Makes an element (that is *external* to any calendar) draggable. + Can pass in data that determines how an event will be created when dropped onto a calendar. + Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system. + */ + var ExternalDraggable = /** @class */ (function () { + function ExternalDraggable(el, settings) { + var _this = this; + if (settings === void 0) { settings = {}; } + this.handlePointerDown = function (ev) { + var dragging = _this.dragging; + var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay; + dragging.minDistance = + minDistance != null ? + minDistance : + (ev.isTouch ? 0 : core.globalDefaults.eventDragMinDistance); + dragging.delay = + ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv + (longPressDelay != null ? longPressDelay : core.globalDefaults.longPressDelay) : + 0; + }; + this.handleDragStart = function (ev) { + if (ev.isTouch && + _this.dragging.delay && + ev.subjectEl.classList.contains('fc-event')) { + _this.dragging.mirror.getMirrorEl().classList.add('fc-selected'); + } + }; + this.settings = settings; + var dragging = this.dragging = new FeaturefulElementDragging(el); + dragging.touchScrollAllowed = false; + if (settings.itemSelector != null) { + dragging.pointer.selector = settings.itemSelector; + } + if (settings.appendTo != null) { + dragging.mirror.parentNode = settings.appendTo; // TODO: write tests + } + dragging.emitter.on('pointerdown', this.handlePointerDown); + dragging.emitter.on('dragstart', this.handleDragStart); + new ExternalElementDragging(dragging, settings.eventData); + } + ExternalDraggable.prototype.destroy = function () { + this.dragging.destroy(); + }; + return ExternalDraggable; + }()); + + /* + Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements. + The third-party system is responsible for drawing the visuals effects of the drag. + This class simply monitors for pointer movements and fires events. + It also has the ability to hide the moving element (the "mirror") during the drag. + */ + var InferredElementDragging = /** @class */ (function (_super) { + __extends(InferredElementDragging, _super); + function InferredElementDragging(containerEl) { + var _this = _super.call(this, containerEl) || this; + _this.shouldIgnoreMove = false; + _this.mirrorSelector = ''; + _this.currentMirrorEl = null; + _this.handlePointerDown = function (ev) { + _this.emitter.trigger('pointerdown', ev); + if (!_this.shouldIgnoreMove) { + // fire dragstart right away. does not support delay or min-distance + _this.emitter.trigger('dragstart', ev); + } + }; + _this.handlePointerMove = function (ev) { + if (!_this.shouldIgnoreMove) { + _this.emitter.trigger('dragmove', ev); + } + }; + _this.handlePointerUp = function (ev) { + _this.emitter.trigger('pointerup', ev); + if (!_this.shouldIgnoreMove) { + // fire dragend right away. does not support a revert animation + _this.emitter.trigger('dragend', ev); + } + }; + var pointer = _this.pointer = new PointerDragging(containerEl); + pointer.emitter.on('pointerdown', _this.handlePointerDown); + pointer.emitter.on('pointermove', _this.handlePointerMove); + pointer.emitter.on('pointerup', _this.handlePointerUp); + return _this; + } + InferredElementDragging.prototype.destroy = function () { + this.pointer.destroy(); + }; + InferredElementDragging.prototype.setIgnoreMove = function (bool) { + this.shouldIgnoreMove = bool; + }; + InferredElementDragging.prototype.setMirrorIsVisible = function (bool) { + if (bool) { + // restore a previously hidden element. + // use the reference in case the selector class has already been removed. + if (this.currentMirrorEl) { + this.currentMirrorEl.style.visibility = ''; + this.currentMirrorEl = null; + } + } + else { + var mirrorEl = this.mirrorSelector ? + document.querySelector(this.mirrorSelector) : + null; + if (mirrorEl) { + this.currentMirrorEl = mirrorEl; + mirrorEl.style.visibility = 'hidden'; + } + } + }; + return InferredElementDragging; + }(core.ElementDragging)); + + /* + Bridges third-party drag-n-drop systems with FullCalendar. + Must be instantiated and destroyed by caller. + */ + var ThirdPartyDraggable = /** @class */ (function () { + function ThirdPartyDraggable(containerOrSettings, settings) { + var containerEl = document; + if ( + // wish we could just test instanceof EventTarget, but doesn't work in IE11 + containerOrSettings === document || + containerOrSettings instanceof Element) { + containerEl = containerOrSettings; + settings = settings || {}; + } + else { + settings = (containerOrSettings || {}); + } + var dragging = this.dragging = new InferredElementDragging(containerEl); + if (typeof settings.itemSelector === 'string') { + dragging.pointer.selector = settings.itemSelector; + } + else if (containerEl === document) { + dragging.pointer.selector = '[data-event]'; + } + if (typeof settings.mirrorSelector === 'string') { + dragging.mirrorSelector = settings.mirrorSelector; + } + new ExternalElementDragging(dragging, settings.eventData); + } + ThirdPartyDraggable.prototype.destroy = function () { + this.dragging.destroy(); + }; + return ThirdPartyDraggable; + }()); + + var main = core.createPlugin({ + componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1], + calendarInteractions: [UnselectAuto], + elementDraggingImpl: FeaturefulElementDragging + }); + + exports.Draggable = ExternalDraggable; + exports.FeaturefulElementDragging = FeaturefulElementDragging; + exports.PointerDragging = PointerDragging; + exports.ThirdPartyDraggable = ThirdPartyDraggable; + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/main/resources/static/packages/interaction/main.js.map b/src/main/resources/static/packages/interaction/main.js.map new file mode 100644 index 00000000..7a9ad278 --- /dev/null +++ b/src/main/resources/static/packages/interaction/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sources":["../../../tmp/tsc-output/packages/interaction/src/dnd/PointerDragging.js","../../../tmp/tsc-output/packages/interaction/src/dnd/ElementMirror.js","../../../tmp/tsc-output/packages/interaction/src/scroll-geom-cache.js","../../../tmp/tsc-output/packages/interaction/src/dnd/AutoScroller.js","../../../tmp/tsc-output/packages/interaction/src/dnd/FeaturefulElementDragging.js","../../../tmp/tsc-output/packages/interaction/src/OffsetTracker.js","../../../tmp/tsc-output/packages/interaction/src/interactions/HitDragging.js","../../../tmp/tsc-output/packages/interaction/src/interactions/DateClicking.js","../../../tmp/tsc-output/packages/interaction/src/interactions/DateSelecting.js","../../../tmp/tsc-output/packages/interaction/src/interactions/EventDragging.js","../../../tmp/tsc-output/packages/interaction/src/interactions/EventResizing.js","../../../tmp/tsc-output/packages/interaction/src/interactions/UnselectAuto.js","../../../tmp/tsc-output/packages/interaction/src/interactions-external/ExternalElementDragging.js","../../../tmp/tsc-output/packages/interaction/src/interactions-external/ExternalDraggable.js","../../../tmp/tsc-output/packages/interaction/src/interactions-external/InferredElementDragging.js","../../../tmp/tsc-output/packages/interaction/src/interactions-external/ThirdPartyDraggable.js","../../../tmp/tsc-output/packages/interaction/src/main.js"],"sourcesContent":["import { config, elementClosest, EmitterMixin } from '@fullcalendar/core';\nconfig.touchMouseIgnoreWait = 500;\nvar ignoreMouseDepth = 0;\nvar listenerCnt = 0;\nvar isWindowTouchMoveCancelled = false;\n/*\nUses a \"pointer\" abstraction, which monitors UI events for both mouse and touch.\nTracks when the pointer \"drags\" on a certain element, meaning down+move+up.\n\nAlso, tracks if there was touch-scrolling.\nAlso, can prevent touch-scrolling from happening.\nAlso, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.\n\nemits:\n- pointerdown\n- pointermove\n- pointerup\n*/\nvar PointerDragging = /** @class */ (function () {\n function PointerDragging(containerEl) {\n var _this = this;\n this.subjectEl = null;\n this.downEl = null;\n // options that can be directly assigned by caller\n this.selector = ''; // will cause subjectEl in all emitted events to be this element\n this.handleSelector = '';\n this.shouldIgnoreMove = false;\n this.shouldWatchScroll = true; // for simulating pointermove on scroll\n // internal states\n this.isDragging = false;\n this.isTouchDragging = false;\n this.wasTouchScroll = false;\n // Mouse\n // ----------------------------------------------------------------------------------------------------\n this.handleMouseDown = function (ev) {\n if (!_this.shouldIgnoreMouse() &&\n isPrimaryMouseButton(ev) &&\n _this.tryStart(ev)) {\n var pev = _this.createEventFromMouse(ev, true);\n _this.emitter.trigger('pointerdown', pev);\n _this.initScrollWatch(pev);\n if (!_this.shouldIgnoreMove) {\n document.addEventListener('mousemove', _this.handleMouseMove);\n }\n document.addEventListener('mouseup', _this.handleMouseUp);\n }\n };\n this.handleMouseMove = function (ev) {\n var pev = _this.createEventFromMouse(ev);\n _this.recordCoords(pev);\n _this.emitter.trigger('pointermove', pev);\n };\n this.handleMouseUp = function (ev) {\n document.removeEventListener('mousemove', _this.handleMouseMove);\n document.removeEventListener('mouseup', _this.handleMouseUp);\n _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));\n _this.cleanup(); // call last so that pointerup has access to props\n };\n // Touch\n // ----------------------------------------------------------------------------------------------------\n this.handleTouchStart = function (ev) {\n if (_this.tryStart(ev)) {\n _this.isTouchDragging = true;\n var pev = _this.createEventFromTouch(ev, true);\n _this.emitter.trigger('pointerdown', pev);\n _this.initScrollWatch(pev);\n // unlike mouse, need to attach to target, not document\n // https://stackoverflow.com/a/45760014\n var target = ev.target;\n if (!_this.shouldIgnoreMove) {\n target.addEventListener('touchmove', _this.handleTouchMove);\n }\n target.addEventListener('touchend', _this.handleTouchEnd);\n target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end\n // attach a handler to get called when ANY scroll action happens on the page.\n // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n // http://stackoverflow.com/a/32954565/96342\n window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture\n );\n }\n };\n this.handleTouchMove = function (ev) {\n var pev = _this.createEventFromTouch(ev);\n _this.recordCoords(pev);\n _this.emitter.trigger('pointermove', pev);\n };\n this.handleTouchEnd = function (ev) {\n if (_this.isDragging) { // done to guard against touchend followed by touchcancel\n var target = ev.target;\n target.removeEventListener('touchmove', _this.handleTouchMove);\n target.removeEventListener('touchend', _this.handleTouchEnd);\n target.removeEventListener('touchcancel', _this.handleTouchEnd);\n window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true\n _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));\n _this.cleanup(); // call last so that pointerup has access to props\n _this.isTouchDragging = false;\n startIgnoringMouse();\n }\n };\n this.handleTouchScroll = function () {\n _this.wasTouchScroll = true;\n };\n this.handleScroll = function (ev) {\n if (!_this.shouldIgnoreMove) {\n var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX;\n var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY;\n _this.emitter.trigger('pointermove', {\n origEvent: ev,\n isTouch: _this.isTouchDragging,\n subjectEl: _this.subjectEl,\n pageX: pageX,\n pageY: pageY,\n deltaX: pageX - _this.origPageX,\n deltaY: pageY - _this.origPageY\n });\n }\n };\n this.containerEl = containerEl;\n this.emitter = new EmitterMixin();\n containerEl.addEventListener('mousedown', this.handleMouseDown);\n containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });\n listenerCreated();\n }\n PointerDragging.prototype.destroy = function () {\n this.containerEl.removeEventListener('mousedown', this.handleMouseDown);\n this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });\n listenerDestroyed();\n };\n PointerDragging.prototype.tryStart = function (ev) {\n var subjectEl = this.querySubjectEl(ev);\n var downEl = ev.target;\n if (subjectEl &&\n (!this.handleSelector || elementClosest(downEl, this.handleSelector))) {\n this.subjectEl = subjectEl;\n this.downEl = downEl;\n this.isDragging = true; // do this first so cancelTouchScroll will work\n this.wasTouchScroll = false;\n return true;\n }\n return false;\n };\n PointerDragging.prototype.cleanup = function () {\n isWindowTouchMoveCancelled = false;\n this.isDragging = false;\n this.subjectEl = null;\n this.downEl = null;\n // keep wasTouchScroll around for later access\n this.destroyScrollWatch();\n };\n PointerDragging.prototype.querySubjectEl = function (ev) {\n if (this.selector) {\n return elementClosest(ev.target, this.selector);\n }\n else {\n return this.containerEl;\n }\n };\n PointerDragging.prototype.shouldIgnoreMouse = function () {\n return ignoreMouseDepth || this.isTouchDragging;\n };\n // can be called by user of this class, to cancel touch-based scrolling for the current drag\n PointerDragging.prototype.cancelTouchScroll = function () {\n if (this.isDragging) {\n isWindowTouchMoveCancelled = true;\n }\n };\n // Scrolling that simulates pointermoves\n // ----------------------------------------------------------------------------------------------------\n PointerDragging.prototype.initScrollWatch = function (ev) {\n if (this.shouldWatchScroll) {\n this.recordCoords(ev);\n window.addEventListener('scroll', this.handleScroll, true); // useCapture=true\n }\n };\n PointerDragging.prototype.recordCoords = function (ev) {\n if (this.shouldWatchScroll) {\n this.prevPageX = ev.pageX;\n this.prevPageY = ev.pageY;\n this.prevScrollX = window.pageXOffset;\n this.prevScrollY = window.pageYOffset;\n }\n };\n PointerDragging.prototype.destroyScrollWatch = function () {\n if (this.shouldWatchScroll) {\n window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true\n }\n };\n // Event Normalization\n // ----------------------------------------------------------------------------------------------------\n PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) {\n var deltaX = 0;\n var deltaY = 0;\n // TODO: repeat code\n if (isFirst) {\n this.origPageX = ev.pageX;\n this.origPageY = ev.pageY;\n }\n else {\n deltaX = ev.pageX - this.origPageX;\n deltaY = ev.pageY - this.origPageY;\n }\n return {\n origEvent: ev,\n isTouch: false,\n subjectEl: this.subjectEl,\n pageX: ev.pageX,\n pageY: ev.pageY,\n deltaX: deltaX,\n deltaY: deltaY\n };\n };\n PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) {\n var touches = ev.touches;\n var pageX;\n var pageY;\n var deltaX = 0;\n var deltaY = 0;\n // if touch coords available, prefer,\n // because FF would give bad ev.pageX ev.pageY\n if (touches && touches.length) {\n pageX = touches[0].pageX;\n pageY = touches[0].pageY;\n }\n else {\n pageX = ev.pageX;\n pageY = ev.pageY;\n }\n // TODO: repeat code\n if (isFirst) {\n this.origPageX = pageX;\n this.origPageY = pageY;\n }\n else {\n deltaX = pageX - this.origPageX;\n deltaY = pageY - this.origPageY;\n }\n return {\n origEvent: ev,\n isTouch: true,\n subjectEl: this.subjectEl,\n pageX: pageX,\n pageY: pageY,\n deltaX: deltaX,\n deltaY: deltaY\n };\n };\n return PointerDragging;\n}());\nexport default PointerDragging;\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\nfunction isPrimaryMouseButton(ev) {\n return ev.button === 0 && !ev.ctrlKey;\n}\n// Ignoring fake mouse events generated by touch\n// ----------------------------------------------------------------------------------------------------\nfunction startIgnoringMouse() {\n ignoreMouseDepth++;\n setTimeout(function () {\n ignoreMouseDepth--;\n }, config.touchMouseIgnoreWait);\n}\n// We want to attach touchmove as early as possible for Safari\n// ----------------------------------------------------------------------------------------------------\nfunction listenerCreated() {\n if (!(listenerCnt++)) {\n window.addEventListener('touchmove', onWindowTouchMove, { passive: false });\n }\n}\nfunction listenerDestroyed() {\n if (!(--listenerCnt)) {\n window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });\n }\n}\nfunction onWindowTouchMove(ev) {\n if (isWindowTouchMoveCancelled) {\n ev.preventDefault();\n }\n}\n","import { removeElement, applyStyle, whenTransitionDone } from '@fullcalendar/core';\n/*\nAn effect in which an element follows the movement of a pointer across the screen.\nThe moving element is a clone of some other element.\nMust call start + handleMove + stop.\n*/\nvar ElementMirror = /** @class */ (function () {\n function ElementMirror() {\n this.isVisible = false; // must be explicitly enabled\n this.sourceEl = null;\n this.mirrorEl = null;\n this.sourceElRect = null; // screen coords relative to viewport\n // options that can be set directly by caller\n this.parentNode = document.body;\n this.zIndex = 9999;\n this.revertDuration = 0;\n }\n ElementMirror.prototype.start = function (sourceEl, pageX, pageY) {\n this.sourceEl = sourceEl;\n this.sourceElRect = this.sourceEl.getBoundingClientRect();\n this.origScreenX = pageX - window.pageXOffset;\n this.origScreenY = pageY - window.pageYOffset;\n this.deltaX = 0;\n this.deltaY = 0;\n this.updateElPosition();\n };\n ElementMirror.prototype.handleMove = function (pageX, pageY) {\n this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;\n this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;\n this.updateElPosition();\n };\n // can be called before start\n ElementMirror.prototype.setIsVisible = function (bool) {\n if (bool) {\n if (!this.isVisible) {\n if (this.mirrorEl) {\n this.mirrorEl.style.display = '';\n }\n this.isVisible = bool; // needs to happen before updateElPosition\n this.updateElPosition(); // because was not updating the position while invisible\n }\n }\n else {\n if (this.isVisible) {\n if (this.mirrorEl) {\n this.mirrorEl.style.display = 'none';\n }\n this.isVisible = bool;\n }\n }\n };\n // always async\n ElementMirror.prototype.stop = function (needsRevertAnimation, callback) {\n var _this = this;\n var done = function () {\n _this.cleanup();\n callback();\n };\n if (needsRevertAnimation &&\n this.mirrorEl &&\n this.isVisible &&\n this.revertDuration && // if 0, transition won't work\n (this.deltaX || this.deltaY) // if same coords, transition won't work\n ) {\n this.doRevertAnimation(done, this.revertDuration);\n }\n else {\n setTimeout(done, 0);\n }\n };\n ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) {\n var mirrorEl = this.mirrorEl;\n var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened\n mirrorEl.style.transition =\n 'top ' + revertDuration + 'ms,' +\n 'left ' + revertDuration + 'ms';\n applyStyle(mirrorEl, {\n left: finalSourceElRect.left,\n top: finalSourceElRect.top\n });\n whenTransitionDone(mirrorEl, function () {\n mirrorEl.style.transition = '';\n callback();\n });\n };\n ElementMirror.prototype.cleanup = function () {\n if (this.mirrorEl) {\n removeElement(this.mirrorEl);\n this.mirrorEl = null;\n }\n this.sourceEl = null;\n };\n ElementMirror.prototype.updateElPosition = function () {\n if (this.sourceEl && this.isVisible) {\n applyStyle(this.getMirrorEl(), {\n left: this.sourceElRect.left + this.deltaX,\n top: this.sourceElRect.top + this.deltaY\n });\n }\n };\n ElementMirror.prototype.getMirrorEl = function () {\n var sourceElRect = this.sourceElRect;\n var mirrorEl = this.mirrorEl;\n if (!mirrorEl) {\n mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true\n // we don't want long taps or any mouse interaction causing selection/menus.\n // would use preventSelection(), but that prevents selectstart, causing problems.\n mirrorEl.classList.add('fc-unselectable');\n mirrorEl.classList.add('fc-dragging');\n applyStyle(mirrorEl, {\n position: 'fixed',\n zIndex: this.zIndex,\n visibility: '',\n boxSizing: 'border-box',\n width: sourceElRect.right - sourceElRect.left,\n height: sourceElRect.bottom - sourceElRect.top,\n right: 'auto',\n bottom: 'auto',\n margin: 0\n });\n this.parentNode.appendChild(mirrorEl);\n }\n return mirrorEl;\n };\n return ElementMirror;\n}());\nexport default ElementMirror;\n","import * as tslib_1 from \"tslib\";\nimport { computeInnerRect, ScrollController, ElementScrollController, WindowScrollController } from '@fullcalendar/core';\n/*\nIs a cache for a given element's scroll information (all the info that ScrollController stores)\nin addition the \"client rectangle\" of the element.. the area within the scrollbars.\n\nThe cache can be in one of two modes:\n- doesListening:false - ignores when the container is scrolled by someone else\n- doesListening:true - watch for scrolling and update the cache\n*/\nvar ScrollGeomCache = /** @class */ (function (_super) {\n tslib_1.__extends(ScrollGeomCache, _super);\n function ScrollGeomCache(scrollController, doesListening) {\n var _this = _super.call(this) || this;\n _this.handleScroll = function () {\n _this.scrollTop = _this.scrollController.getScrollTop();\n _this.scrollLeft = _this.scrollController.getScrollLeft();\n _this.handleScrollChange();\n };\n _this.scrollController = scrollController;\n _this.doesListening = doesListening;\n _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop();\n _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft();\n _this.scrollWidth = scrollController.getScrollWidth();\n _this.scrollHeight = scrollController.getScrollHeight();\n _this.clientWidth = scrollController.getClientWidth();\n _this.clientHeight = scrollController.getClientHeight();\n _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values\n if (_this.doesListening) {\n _this.getEventTarget().addEventListener('scroll', _this.handleScroll);\n }\n return _this;\n }\n ScrollGeomCache.prototype.destroy = function () {\n if (this.doesListening) {\n this.getEventTarget().removeEventListener('scroll', this.handleScroll);\n }\n };\n ScrollGeomCache.prototype.getScrollTop = function () {\n return this.scrollTop;\n };\n ScrollGeomCache.prototype.getScrollLeft = function () {\n return this.scrollLeft;\n };\n ScrollGeomCache.prototype.setScrollTop = function (top) {\n this.scrollController.setScrollTop(top);\n if (!this.doesListening) {\n // we are not relying on the element to normalize out-of-bounds scroll values\n // so we need to sanitize ourselves\n this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);\n this.handleScrollChange();\n }\n };\n ScrollGeomCache.prototype.setScrollLeft = function (top) {\n this.scrollController.setScrollLeft(top);\n if (!this.doesListening) {\n // we are not relying on the element to normalize out-of-bounds scroll values\n // so we need to sanitize ourselves\n this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);\n this.handleScrollChange();\n }\n };\n ScrollGeomCache.prototype.getClientWidth = function () {\n return this.clientWidth;\n };\n ScrollGeomCache.prototype.getClientHeight = function () {\n return this.clientHeight;\n };\n ScrollGeomCache.prototype.getScrollWidth = function () {\n return this.scrollWidth;\n };\n ScrollGeomCache.prototype.getScrollHeight = function () {\n return this.scrollHeight;\n };\n ScrollGeomCache.prototype.handleScrollChange = function () {\n };\n return ScrollGeomCache;\n}(ScrollController));\nexport { ScrollGeomCache };\nvar ElementScrollGeomCache = /** @class */ (function (_super) {\n tslib_1.__extends(ElementScrollGeomCache, _super);\n function ElementScrollGeomCache(el, doesListening) {\n return _super.call(this, new ElementScrollController(el), doesListening) || this;\n }\n ElementScrollGeomCache.prototype.getEventTarget = function () {\n return this.scrollController.el;\n };\n ElementScrollGeomCache.prototype.computeClientRect = function () {\n return computeInnerRect(this.scrollController.el);\n };\n return ElementScrollGeomCache;\n}(ScrollGeomCache));\nexport { ElementScrollGeomCache };\nvar WindowScrollGeomCache = /** @class */ (function (_super) {\n tslib_1.__extends(WindowScrollGeomCache, _super);\n function WindowScrollGeomCache(doesListening) {\n return _super.call(this, new WindowScrollController(), doesListening) || this;\n }\n WindowScrollGeomCache.prototype.getEventTarget = function () {\n return window;\n };\n WindowScrollGeomCache.prototype.computeClientRect = function () {\n return {\n left: this.scrollLeft,\n right: this.scrollLeft + this.clientWidth,\n top: this.scrollTop,\n bottom: this.scrollTop + this.clientHeight\n };\n };\n // the window is the only scroll object that changes it's rectangle relative\n // to the document's topleft as it scrolls\n WindowScrollGeomCache.prototype.handleScrollChange = function () {\n this.clientRect = this.computeClientRect();\n };\n return WindowScrollGeomCache;\n}(ScrollGeomCache));\nexport { WindowScrollGeomCache };\n","import { ElementScrollGeomCache, WindowScrollGeomCache } from '../scroll-geom-cache';\n// If available we are using native \"performance\" API instead of \"Date\"\n// Read more about it on MDN:\n// https://developer.mozilla.org/en-US/docs/Web/API/Performance\nvar getTime = typeof performance === 'function' ? performance.now : Date.now;\n/*\nFor a pointer interaction, automatically scrolls certain scroll containers when the pointer\napproaches the edge.\n\nThe caller must call start + handleMove + stop.\n*/\nvar AutoScroller = /** @class */ (function () {\n function AutoScroller() {\n var _this = this;\n // options that can be set by caller\n this.isEnabled = true;\n this.scrollQuery = [window, '.fc-scroller'];\n this.edgeThreshold = 50; // pixels\n this.maxVelocity = 300; // pixels per second\n // internal state\n this.pointerScreenX = null;\n this.pointerScreenY = null;\n this.isAnimating = false;\n this.scrollCaches = null;\n // protect against the initial pointerdown being too close to an edge and starting the scroll\n this.everMovedUp = false;\n this.everMovedDown = false;\n this.everMovedLeft = false;\n this.everMovedRight = false;\n this.animate = function () {\n if (_this.isAnimating) { // wasn't cancelled between animation calls\n var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset);\n if (edge) {\n var now = getTime();\n _this.handleSide(edge, (now - _this.msSinceRequest) / 1000);\n _this.requestAnimation(now);\n }\n else {\n _this.isAnimating = false; // will stop animation\n }\n }\n };\n }\n AutoScroller.prototype.start = function (pageX, pageY) {\n if (this.isEnabled) {\n this.scrollCaches = this.buildCaches();\n this.pointerScreenX = null;\n this.pointerScreenY = null;\n this.everMovedUp = false;\n this.everMovedDown = false;\n this.everMovedLeft = false;\n this.everMovedRight = false;\n this.handleMove(pageX, pageY);\n }\n };\n AutoScroller.prototype.handleMove = function (pageX, pageY) {\n if (this.isEnabled) {\n var pointerScreenX = pageX - window.pageXOffset;\n var pointerScreenY = pageY - window.pageYOffset;\n var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;\n var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;\n if (yDelta < 0) {\n this.everMovedUp = true;\n }\n else if (yDelta > 0) {\n this.everMovedDown = true;\n }\n if (xDelta < 0) {\n this.everMovedLeft = true;\n }\n else if (xDelta > 0) {\n this.everMovedRight = true;\n }\n this.pointerScreenX = pointerScreenX;\n this.pointerScreenY = pointerScreenY;\n if (!this.isAnimating) {\n this.isAnimating = true;\n this.requestAnimation(getTime());\n }\n }\n };\n AutoScroller.prototype.stop = function () {\n if (this.isEnabled) {\n this.isAnimating = false; // will stop animation\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n scrollCache.destroy();\n }\n this.scrollCaches = null;\n }\n };\n AutoScroller.prototype.requestAnimation = function (now) {\n this.msSinceRequest = now;\n requestAnimationFrame(this.animate);\n };\n AutoScroller.prototype.handleSide = function (edge, seconds) {\n var scrollCache = edge.scrollCache;\n var edgeThreshold = this.edgeThreshold;\n var invDistance = edgeThreshold - edge.distance;\n var velocity = // the closer to the edge, the faster we scroll\n (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic\n this.maxVelocity * seconds;\n var sign = 1;\n switch (edge.name) {\n case 'left':\n sign = -1;\n // falls through\n case 'right':\n scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);\n break;\n case 'top':\n sign = -1;\n // falls through\n case 'bottom':\n scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);\n break;\n }\n };\n // left/top are relative to document topleft\n AutoScroller.prototype.computeBestEdge = function (left, top) {\n var edgeThreshold = this.edgeThreshold;\n var bestSide = null;\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n var rect = scrollCache.clientRect;\n var leftDist = left - rect.left;\n var rightDist = rect.right - left;\n var topDist = top - rect.top;\n var bottomDist = rect.bottom - top;\n // completely within the rect?\n if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {\n if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&\n (!bestSide || bestSide.distance > topDist)) {\n bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist };\n }\n if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&\n (!bestSide || bestSide.distance > bottomDist)) {\n bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist };\n }\n if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&\n (!bestSide || bestSide.distance > leftDist)) {\n bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist };\n }\n if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&\n (!bestSide || bestSide.distance > rightDist)) {\n bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist };\n }\n }\n }\n return bestSide;\n };\n AutoScroller.prototype.buildCaches = function () {\n return this.queryScrollEls().map(function (el) {\n if (el === window) {\n return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls\n }\n else {\n return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls\n }\n });\n };\n AutoScroller.prototype.queryScrollEls = function () {\n var els = [];\n for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) {\n var query = _a[_i];\n if (typeof query === 'object') {\n els.push(query);\n }\n else {\n els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query)));\n }\n }\n return els;\n };\n return AutoScroller;\n}());\nexport default AutoScroller;\n","import * as tslib_1 from \"tslib\";\nimport { preventSelection, allowSelection, preventContextMenu, allowContextMenu, ElementDragging } from '@fullcalendar/core';\nimport PointerDragging from './PointerDragging';\nimport ElementMirror from './ElementMirror';\nimport AutoScroller from './AutoScroller';\n/*\nMonitors dragging on an element. Has a number of high-level features:\n- minimum distance required before dragging\n- minimum wait time (\"delay\") before dragging\n- a mirror element that follows the pointer\n*/\nvar FeaturefulElementDragging = /** @class */ (function (_super) {\n tslib_1.__extends(FeaturefulElementDragging, _super);\n function FeaturefulElementDragging(containerEl) {\n var _this = _super.call(this, containerEl) || this;\n // options that can be directly set by caller\n // the caller can also set the PointerDragging's options as well\n _this.delay = null;\n _this.minDistance = 0;\n _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag\n _this.mirrorNeedsRevert = false;\n _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup\n _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation\n _this.isDelayEnded = false;\n _this.isDistanceSurpassed = false;\n _this.delayTimeoutId = null;\n _this.onPointerDown = function (ev) {\n if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going\n _this.isInteracting = true;\n _this.isDelayEnded = false;\n _this.isDistanceSurpassed = false;\n preventSelection(document.body);\n preventContextMenu(document.body);\n // prevent links from being visited if there's an eventual drag.\n // also prevents selection in older browsers (maybe?).\n // not necessary for touch, besides, browser would complain about passiveness.\n if (!ev.isTouch) {\n ev.origEvent.preventDefault();\n }\n _this.emitter.trigger('pointerdown', ev);\n if (!_this.pointer.shouldIgnoreMove) {\n // actions related to initiating dragstart+dragmove+dragend...\n _this.mirror.setIsVisible(false); // reset. caller must set-visible\n _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down\n _this.startDelay(ev);\n if (!_this.minDistance) {\n _this.handleDistanceSurpassed(ev);\n }\n }\n }\n };\n _this.onPointerMove = function (ev) {\n if (_this.isInteracting) { // if false, still waiting for previous drag's revert\n _this.emitter.trigger('pointermove', ev);\n if (!_this.isDistanceSurpassed) {\n var minDistance = _this.minDistance;\n var distanceSq = void 0; // current distance from the origin, squared\n var deltaX = ev.deltaX, deltaY = ev.deltaY;\n distanceSq = deltaX * deltaX + deltaY * deltaY;\n if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n _this.handleDistanceSurpassed(ev);\n }\n }\n if (_this.isDragging) {\n // a real pointer move? (not one simulated by scrolling)\n if (ev.origEvent.type !== 'scroll') {\n _this.mirror.handleMove(ev.pageX, ev.pageY);\n _this.autoScroller.handleMove(ev.pageX, ev.pageY);\n }\n _this.emitter.trigger('dragmove', ev);\n }\n }\n };\n _this.onPointerUp = function (ev) {\n if (_this.isInteracting) { // if false, still waiting for previous drag's revert\n _this.isInteracting = false;\n allowSelection(document.body);\n allowContextMenu(document.body);\n _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert\n if (_this.isDragging) {\n _this.autoScroller.stop();\n _this.tryStopDrag(ev); // which will stop the mirror\n }\n if (_this.delayTimeoutId) {\n clearTimeout(_this.delayTimeoutId);\n _this.delayTimeoutId = null;\n }\n }\n };\n var pointer = _this.pointer = new PointerDragging(containerEl);\n pointer.emitter.on('pointerdown', _this.onPointerDown);\n pointer.emitter.on('pointermove', _this.onPointerMove);\n pointer.emitter.on('pointerup', _this.onPointerUp);\n _this.mirror = new ElementMirror();\n _this.autoScroller = new AutoScroller();\n return _this;\n }\n FeaturefulElementDragging.prototype.destroy = function () {\n this.pointer.destroy();\n };\n FeaturefulElementDragging.prototype.startDelay = function (ev) {\n var _this = this;\n if (typeof this.delay === 'number') {\n this.delayTimeoutId = setTimeout(function () {\n _this.delayTimeoutId = null;\n _this.handleDelayEnd(ev);\n }, this.delay); // not assignable to number!\n }\n else {\n this.handleDelayEnd(ev);\n }\n };\n FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) {\n this.isDelayEnded = true;\n this.tryStartDrag(ev);\n };\n FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) {\n this.isDistanceSurpassed = true;\n this.tryStartDrag(ev);\n };\n FeaturefulElementDragging.prototype.tryStartDrag = function (ev) {\n if (this.isDelayEnded && this.isDistanceSurpassed) {\n if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {\n this.isDragging = true;\n this.mirrorNeedsRevert = false;\n this.autoScroller.start(ev.pageX, ev.pageY);\n this.emitter.trigger('dragstart', ev);\n if (this.touchScrollAllowed === false) {\n this.pointer.cancelTouchScroll();\n }\n }\n }\n };\n FeaturefulElementDragging.prototype.tryStopDrag = function (ev) {\n // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events\n // that come from the document to fire beforehand. much more convenient this way.\n this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args\n );\n };\n FeaturefulElementDragging.prototype.stopDrag = function (ev) {\n this.isDragging = false;\n this.emitter.trigger('dragend', ev);\n };\n // fill in the implementations...\n FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) {\n this.pointer.shouldIgnoreMove = bool;\n };\n FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) {\n this.mirror.setIsVisible(bool);\n };\n FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) {\n this.mirrorNeedsRevert = bool;\n };\n FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) {\n this.autoScroller.isEnabled = bool;\n };\n return FeaturefulElementDragging;\n}(ElementDragging));\nexport default FeaturefulElementDragging;\n","import { getClippingParents, computeRect, pointInsideRect } from '@fullcalendar/core';\nimport { ElementScrollGeomCache } from './scroll-geom-cache';\n/*\nWhen this class is instantiated, it records the offset of an element (relative to the document topleft),\nand continues to monitor scrolling, updating the cached coordinates if it needs to.\nDoes not access the DOM after instantiation, so highly performant.\n\nAlso keeps track of all scrolling/overflow:hidden containers that are parents of the given element\nand an determine if a given point is inside the combined clipping rectangle.\n*/\nvar OffsetTracker = /** @class */ (function () {\n function OffsetTracker(el) {\n this.origRect = computeRect(el);\n // will work fine for divs that have overflow:hidden\n this.scrollCaches = getClippingParents(el).map(function (el) {\n return new ElementScrollGeomCache(el, true); // listen=true\n });\n }\n OffsetTracker.prototype.destroy = function () {\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n scrollCache.destroy();\n }\n };\n OffsetTracker.prototype.computeLeft = function () {\n var left = this.origRect.left;\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();\n }\n return left;\n };\n OffsetTracker.prototype.computeTop = function () {\n var top = this.origRect.top;\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n top += scrollCache.origScrollTop - scrollCache.getScrollTop();\n }\n return top;\n };\n OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) {\n var point = { left: pageX, top: pageY };\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n if (!isIgnoredClipping(scrollCache.getEventTarget()) &&\n !pointInsideRect(point, scrollCache.clientRect)) {\n return false;\n }\n }\n return true;\n };\n return OffsetTracker;\n}());\nexport default OffsetTracker;\n// certain clipping containers should never constrain interactions, like and \n// https://github.com/fullcalendar/fullcalendar/issues/3615\nfunction isIgnoredClipping(node) {\n var tagName = node.tagName;\n return tagName === 'HTML' || tagName === 'BODY';\n}\n","import { EmitterMixin, isDateSpansEqual, computeRect, constrainPoint, intersectRects, getRectCenter, diffPoints, rangeContainsRange, mapHash } from '@fullcalendar/core';\nimport OffsetTracker from '../OffsetTracker';\n/*\nTracks movement over multiple droppable areas (aka \"hits\")\nthat exist in one or more DateComponents.\nRelies on an existing draggable.\n\nemits:\n- pointerdown\n- dragstart\n- hitchange - fires initially, even if not over a hit\n- pointerup\n- (hitchange - again, to null, if ended over a hit)\n- dragend\n*/\nvar HitDragging = /** @class */ (function () {\n function HitDragging(dragging, droppableStore) {\n var _this = this;\n // options that can be set by caller\n this.useSubjectCenter = false;\n this.requireInitial = true; // if doesn't start out on a hit, won't emit any events\n this.initialHit = null;\n this.movingHit = null;\n this.finalHit = null; // won't ever be populated if shouldIgnoreMove\n this.handlePointerDown = function (ev) {\n var dragging = _this.dragging;\n _this.initialHit = null;\n _this.movingHit = null;\n _this.finalHit = null;\n _this.prepareHits();\n _this.processFirstCoord(ev);\n if (_this.initialHit || !_this.requireInitial) {\n dragging.setIgnoreMove(false);\n _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(\n }\n else {\n dragging.setIgnoreMove(true);\n }\n };\n this.handleDragStart = function (ev) {\n _this.emitter.trigger('dragstart', ev);\n _this.handleMove(ev, true); // force = fire even if initially null\n };\n this.handleDragMove = function (ev) {\n _this.emitter.trigger('dragmove', ev);\n _this.handleMove(ev);\n };\n this.handlePointerUp = function (ev) {\n _this.releaseHits();\n _this.emitter.trigger('pointerup', ev);\n };\n this.handleDragEnd = function (ev) {\n if (_this.movingHit) {\n _this.emitter.trigger('hitupdate', null, true, ev);\n }\n _this.finalHit = _this.movingHit;\n _this.movingHit = null;\n _this.emitter.trigger('dragend', ev);\n };\n this.droppableStore = droppableStore;\n dragging.emitter.on('pointerdown', this.handlePointerDown);\n dragging.emitter.on('dragstart', this.handleDragStart);\n dragging.emitter.on('dragmove', this.handleDragMove);\n dragging.emitter.on('pointerup', this.handlePointerUp);\n dragging.emitter.on('dragend', this.handleDragEnd);\n this.dragging = dragging;\n this.emitter = new EmitterMixin();\n }\n // sets initialHit\n // sets coordAdjust\n HitDragging.prototype.processFirstCoord = function (ev) {\n var origPoint = { left: ev.pageX, top: ev.pageY };\n var adjustedPoint = origPoint;\n var subjectEl = ev.subjectEl;\n var subjectRect;\n if (subjectEl !== document) {\n subjectRect = computeRect(subjectEl);\n adjustedPoint = constrainPoint(adjustedPoint, subjectRect);\n }\n var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);\n if (initialHit) {\n if (this.useSubjectCenter && subjectRect) {\n var slicedSubjectRect = intersectRects(subjectRect, initialHit.rect);\n if (slicedSubjectRect) {\n adjustedPoint = getRectCenter(slicedSubjectRect);\n }\n }\n this.coordAdjust = diffPoints(adjustedPoint, origPoint);\n }\n else {\n this.coordAdjust = { left: 0, top: 0 };\n }\n };\n HitDragging.prototype.handleMove = function (ev, forceHandle) {\n var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);\n if (forceHandle || !isHitsEqual(this.movingHit, hit)) {\n this.movingHit = hit;\n this.emitter.trigger('hitupdate', hit, false, ev);\n }\n };\n HitDragging.prototype.prepareHits = function () {\n this.offsetTrackers = mapHash(this.droppableStore, function (interactionSettings) {\n interactionSettings.component.buildPositionCaches();\n return new OffsetTracker(interactionSettings.el);\n });\n };\n HitDragging.prototype.releaseHits = function () {\n var offsetTrackers = this.offsetTrackers;\n for (var id in offsetTrackers) {\n offsetTrackers[id].destroy();\n }\n this.offsetTrackers = {};\n };\n HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) {\n var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers;\n var bestHit = null;\n for (var id in droppableStore) {\n var component = droppableStore[id].component;\n var offsetTracker = offsetTrackers[id];\n if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {\n var originLeft = offsetTracker.computeLeft();\n var originTop = offsetTracker.computeTop();\n var positionLeft = offsetLeft - originLeft;\n var positionTop = offsetTop - originTop;\n var origRect = offsetTracker.origRect;\n var width = origRect.right - origRect.left;\n var height = origRect.bottom - origRect.top;\n if (\n // must be within the element's bounds\n positionLeft >= 0 && positionLeft < width &&\n positionTop >= 0 && positionTop < height) {\n var hit = component.queryHit(positionLeft, positionTop, width, height);\n if (hit &&\n (\n // make sure the hit is within activeRange, meaning it's not a deal cell\n !component.props.dateProfile || // hack for DayTile\n rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) &&\n (!bestHit || hit.layer > bestHit.layer)) {\n // TODO: better way to re-orient rectangle\n hit.rect.left += originLeft;\n hit.rect.right += originLeft;\n hit.rect.top += originTop;\n hit.rect.bottom += originTop;\n bestHit = hit;\n }\n }\n }\n }\n return bestHit;\n };\n return HitDragging;\n}());\nexport default HitDragging;\nexport function isHitsEqual(hit0, hit1) {\n if (!hit0 && !hit1) {\n return true;\n }\n if (Boolean(hit0) !== Boolean(hit1)) {\n return false;\n }\n return isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);\n}\n","import * as tslib_1 from \"tslib\";\nimport { Interaction, interactionSettingsToStore } from '@fullcalendar/core';\nimport FeaturefulElementDragging from '../dnd/FeaturefulElementDragging';\nimport HitDragging, { isHitsEqual } from './HitDragging';\n/*\nMonitors when the user clicks on a specific date/time of a component.\nA pointerdown+pointerup on the same \"hit\" constitutes a click.\n*/\nvar DateClicking = /** @class */ (function (_super) {\n tslib_1.__extends(DateClicking, _super);\n function DateClicking(settings) {\n var _this = _super.call(this, settings) || this;\n _this.handlePointerDown = function (ev) {\n var dragging = _this.dragging;\n // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired\n dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl));\n };\n // won't even fire if moving was ignored\n _this.handleDragEnd = function (ev) {\n var component = _this.component;\n var _a = component.context, calendar = _a.calendar, view = _a.view;\n var pointer = _this.dragging.pointer;\n if (!pointer.wasTouchScroll) {\n var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit;\n if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {\n calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent);\n }\n }\n };\n var component = settings.component;\n // we DO want to watch pointer moves because otherwise finalHit won't get populated\n _this.dragging = new FeaturefulElementDragging(component.el);\n _this.dragging.autoScroller.isEnabled = false;\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragend', _this.handleDragEnd);\n return _this;\n }\n DateClicking.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return DateClicking;\n}(Interaction));\nexport default DateClicking;\n","import * as tslib_1 from \"tslib\";\nimport { compareNumbers, enableCursor, disableCursor, Interaction, interactionSettingsToStore } from '@fullcalendar/core';\nimport HitDragging from './HitDragging';\nimport FeaturefulElementDragging from '../dnd/FeaturefulElementDragging';\nimport { __assign } from 'tslib';\n/*\nTracks when the user selects a portion of time of a component,\nconstituted by a drag over date cells, with a possible delay at the beginning of the drag.\n*/\nvar DateSelecting = /** @class */ (function (_super) {\n tslib_1.__extends(DateSelecting, _super);\n function DateSelecting(settings) {\n var _this = _super.call(this, settings) || this;\n _this.dragSelection = null;\n _this.handlePointerDown = function (ev) {\n var _a = _this, component = _a.component, dragging = _a.dragging;\n var options = component.context.options;\n var canSelect = options.selectable &&\n component.isValidDateDownEl(ev.origEvent.target);\n // don't bother to watch expensive moves if component won't do selection\n dragging.setIgnoreMove(!canSelect);\n // if touch, require user to hold down\n dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null;\n };\n _this.handleDragStart = function (ev) {\n _this.component.context.calendar.unselect(ev); // unselect previous selections\n };\n _this.handleHitUpdate = function (hit, isFinal) {\n var calendar = _this.component.context.calendar;\n var dragSelection = null;\n var isInvalid = false;\n if (hit) {\n dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers);\n if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) {\n isInvalid = true;\n dragSelection = null;\n }\n }\n if (dragSelection) {\n calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection });\n }\n else if (!isFinal) { // only unselect if moved away while dragging\n calendar.dispatch({ type: 'UNSELECT_DATES' });\n }\n if (!isInvalid) {\n enableCursor();\n }\n else {\n disableCursor();\n }\n if (!isFinal) {\n _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging\n }\n };\n _this.handlePointerUp = function (pev) {\n if (_this.dragSelection) {\n // selection is already rendered, so just need to report selection\n _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev);\n _this.dragSelection = null;\n }\n };\n var component = settings.component;\n var options = component.context.options;\n var dragging = _this.dragging = new FeaturefulElementDragging(component.el);\n dragging.touchScrollAllowed = false;\n dragging.minDistance = options.selectMinDistance || 0;\n dragging.autoScroller.isEnabled = options.dragScroll;\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragstart', _this.handleDragStart);\n hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);\n hitDragging.emitter.on('pointerup', _this.handlePointerUp);\n return _this;\n }\n DateSelecting.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return DateSelecting;\n}(Interaction));\nexport default DateSelecting;\nfunction getComponentTouchDelay(component) {\n var options = component.context.options;\n var delay = options.selectLongPressDelay;\n if (delay == null) {\n delay = options.longPressDelay;\n }\n return delay;\n}\nfunction joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {\n var dateSpan0 = hit0.dateSpan;\n var dateSpan1 = hit1.dateSpan;\n var ms = [\n dateSpan0.range.start,\n dateSpan0.range.end,\n dateSpan1.range.start,\n dateSpan1.range.end\n ];\n ms.sort(compareNumbers);\n var props = {};\n for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) {\n var transformer = dateSelectionTransformers_1[_i];\n var res = transformer(hit0, hit1);\n if (res === false) {\n return null;\n }\n else if (res) {\n __assign(props, res);\n }\n }\n props.range = { start: ms[0], end: ms[3] };\n props.allDay = dateSpan0.allDay;\n return props;\n}\n","import * as tslib_1 from \"tslib\";\nimport { applyMutationToEventStore, startOfDay, elementClosest, getRelevantEvents, createEmptyEventStore, diffDates, enableCursor, disableCursor, getElSeg, EventApi, Interaction, interactionSettingsStore } from '@fullcalendar/core';\nimport HitDragging, { isHitsEqual } from './HitDragging';\nimport FeaturefulElementDragging from '../dnd/FeaturefulElementDragging';\nimport { __assign } from 'tslib';\nvar EventDragging = /** @class */ (function (_super) {\n tslib_1.__extends(EventDragging, _super);\n function EventDragging(settings) {\n var _this = _super.call(this, settings) || this;\n // internal state\n _this.subjectSeg = null; // the seg being selected/dragged\n _this.isDragging = false;\n _this.eventRange = null;\n _this.relevantEvents = null; // the events being dragged\n _this.receivingCalendar = null;\n _this.validMutation = null;\n _this.mutatedRelevantEvents = null;\n _this.handlePointerDown = function (ev) {\n var origTarget = ev.origEvent.target;\n var _a = _this, component = _a.component, dragging = _a.dragging;\n var mirror = dragging.mirror;\n var options = component.context.options;\n var initialCalendar = component.context.calendar;\n var subjectSeg = _this.subjectSeg = getElSeg(ev.subjectEl);\n var eventRange = _this.eventRange = subjectSeg.eventRange;\n var eventInstanceId = eventRange.instance.instanceId;\n _this.relevantEvents = getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId);\n dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;\n dragging.delay =\n // only do a touch delay if touch and this event hasn't been selected yet\n (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?\n getComponentTouchDelay(component) :\n null;\n mirror.parentNode = initialCalendar.el;\n mirror.revertDuration = options.dragRevertDuration;\n var isValid = component.isValidSegDownEl(origTarget) &&\n !elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer\n dragging.setIgnoreMove(!isValid);\n // disable dragging for elements that are resizable (ie, selectable)\n // but are not draggable\n _this.isDragging = isValid &&\n ev.subjectEl.classList.contains('fc-draggable');\n };\n _this.handleDragStart = function (ev) {\n var context = _this.component.context;\n var initialCalendar = context.calendar;\n var eventRange = _this.eventRange;\n var eventInstanceId = eventRange.instance.instanceId;\n if (ev.isTouch) {\n // need to select a different event?\n if (eventInstanceId !== _this.component.props.eventSelection) {\n initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId });\n }\n }\n else {\n // if now using mouse, but was previous touch interaction, clear selected event\n initialCalendar.dispatch({ type: 'UNSELECT_EVENT' });\n }\n if (_this.isDragging) {\n initialCalendar.unselect(ev); // unselect *date* selection\n initialCalendar.publiclyTrigger('eventDragStart', [\n {\n el: _this.subjectSeg.el,\n event: new EventApi(initialCalendar, eventRange.def, eventRange.instance),\n jsEvent: ev.origEvent,\n view: context.view\n }\n ]);\n }\n };\n _this.handleHitUpdate = function (hit, isFinal) {\n if (!_this.isDragging) {\n return;\n }\n var relevantEvents = _this.relevantEvents;\n var initialHit = _this.hitDragging.initialHit;\n var initialCalendar = _this.component.context.calendar;\n // states based on new hit\n var receivingCalendar = null;\n var mutation = null;\n var mutatedRelevantEvents = null;\n var isInvalid = false;\n var interaction = {\n affectedEvents: relevantEvents,\n mutatedEvents: createEmptyEventStore(),\n isEvent: true,\n origSeg: _this.subjectSeg\n };\n if (hit) {\n var receivingComponent = hit.component;\n receivingCalendar = receivingComponent.context.calendar;\n var receivingOptions = receivingComponent.context.options;\n if (initialCalendar === receivingCalendar ||\n receivingOptions.editable && receivingOptions.droppable) {\n mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers);\n if (mutation) {\n mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar);\n interaction.mutatedEvents = mutatedRelevantEvents;\n if (!receivingComponent.isInteractionValid(interaction)) {\n isInvalid = true;\n mutation = null;\n mutatedRelevantEvents = null;\n interaction.mutatedEvents = createEmptyEventStore();\n }\n }\n }\n else {\n receivingCalendar = null;\n }\n }\n _this.displayDrag(receivingCalendar, interaction);\n if (!isInvalid) {\n enableCursor();\n }\n else {\n disableCursor();\n }\n if (!isFinal) {\n if (initialCalendar === receivingCalendar && // TODO: write test for this\n isHitsEqual(initialHit, hit)) {\n mutation = null;\n }\n _this.dragging.setMirrorNeedsRevert(!mutation);\n // render the mirror if no already-rendered mirror\n // TODO: wish we could somehow wait for dispatch to guarantee render\n _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror'));\n // assign states based on new hit\n _this.receivingCalendar = receivingCalendar;\n _this.validMutation = mutation;\n _this.mutatedRelevantEvents = mutatedRelevantEvents;\n }\n };\n _this.handlePointerUp = function () {\n if (!_this.isDragging) {\n _this.cleanup(); // because handleDragEnd won't fire\n }\n };\n _this.handleDragEnd = function (ev) {\n if (_this.isDragging) {\n var context = _this.component.context;\n var initialCalendar_1 = context.calendar;\n var initialView = context.view;\n var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation;\n var eventDef = _this.eventRange.def;\n var eventInstance = _this.eventRange.instance;\n var eventApi = new EventApi(initialCalendar_1, eventDef, eventInstance);\n var relevantEvents_1 = _this.relevantEvents;\n var mutatedRelevantEvents = _this.mutatedRelevantEvents;\n var finalHit = _this.hitDragging.finalHit;\n _this.clearDrag(); // must happen after revert animation\n initialCalendar_1.publiclyTrigger('eventDragStop', [\n {\n el: _this.subjectSeg.el,\n event: eventApi,\n jsEvent: ev.origEvent,\n view: initialView\n }\n ]);\n if (validMutation) {\n // dropped within same calendar\n if (receivingCalendar === initialCalendar_1) {\n initialCalendar_1.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents\n });\n var transformed = {};\n for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) {\n var transformer = _b[_i];\n __assign(transformed, transformer(validMutation, initialCalendar_1));\n }\n var eventDropArg = tslib_1.__assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new EventApi(// the data AFTER the mutation\n initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () {\n initialCalendar_1.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents_1\n });\n }, jsEvent: ev.origEvent, view: initialView });\n initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]);\n // dropped in different calendar\n }\n else if (receivingCalendar) {\n initialCalendar_1.publiclyTrigger('eventLeave', [\n {\n draggedEl: ev.subjectEl,\n event: eventApi,\n view: initialView\n }\n ]);\n initialCalendar_1.dispatch({\n type: 'REMOVE_EVENT_INSTANCES',\n instances: _this.mutatedRelevantEvents.instances\n });\n receivingCalendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: _this.mutatedRelevantEvents\n });\n if (ev.isTouch) {\n receivingCalendar.dispatch({\n type: 'SELECT_EVENT',\n eventInstanceId: eventInstance.instanceId\n });\n }\n var dropArg = tslib_1.__assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644\n });\n receivingCalendar.publiclyTrigger('drop', [dropArg]);\n receivingCalendar.publiclyTrigger('eventReceive', [\n {\n draggedEl: ev.subjectEl,\n event: new EventApi(// the data AFTER the mutation\n receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]),\n view: finalHit.component // should this be finalHit.component.view? See #4644\n }\n ]);\n }\n }\n else {\n initialCalendar_1.publiclyTrigger('_noEventDrop');\n }\n }\n _this.cleanup();\n };\n var component = _this.component;\n var options = component.context.options;\n var dragging = _this.dragging = new FeaturefulElementDragging(component.el);\n dragging.pointer.selector = EventDragging.SELECTOR;\n dragging.touchScrollAllowed = false;\n dragging.autoScroller.isEnabled = options.dragScroll;\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsStore);\n hitDragging.useSubjectCenter = settings.useEventCenter;\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragstart', _this.handleDragStart);\n hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);\n hitDragging.emitter.on('pointerup', _this.handlePointerUp);\n hitDragging.emitter.on('dragend', _this.handleDragEnd);\n return _this;\n }\n EventDragging.prototype.destroy = function () {\n this.dragging.destroy();\n };\n // render a drag state on the next receivingCalendar\n EventDragging.prototype.displayDrag = function (nextCalendar, state) {\n var initialCalendar = this.component.context.calendar;\n var prevCalendar = this.receivingCalendar;\n // does the previous calendar need to be cleared?\n if (prevCalendar && prevCalendar !== nextCalendar) {\n // does the initial calendar need to be cleared?\n // if so, don't clear all the way. we still need to to hide the affectedEvents\n if (prevCalendar === initialCalendar) {\n prevCalendar.dispatch({\n type: 'SET_EVENT_DRAG',\n state: {\n affectedEvents: state.affectedEvents,\n mutatedEvents: createEmptyEventStore(),\n isEvent: true,\n origSeg: state.origSeg\n }\n });\n // completely clear the old calendar if it wasn't the initial\n }\n else {\n prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n }\n if (nextCalendar) {\n nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });\n }\n };\n EventDragging.prototype.clearDrag = function () {\n var initialCalendar = this.component.context.calendar;\n var receivingCalendar = this.receivingCalendar;\n if (receivingCalendar) {\n receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n // the initial calendar might have an dummy drag state from displayDrag\n if (initialCalendar !== receivingCalendar) {\n initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n };\n EventDragging.prototype.cleanup = function () {\n this.subjectSeg = null;\n this.isDragging = false;\n this.eventRange = null;\n this.relevantEvents = null;\n this.receivingCalendar = null;\n this.validMutation = null;\n this.mutatedRelevantEvents = null;\n };\n EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11\n return EventDragging;\n}(Interaction));\nexport default EventDragging;\nfunction computeEventMutation(hit0, hit1, massagers) {\n var dateSpan0 = hit0.dateSpan;\n var dateSpan1 = hit1.dateSpan;\n var date0 = dateSpan0.range.start;\n var date1 = dateSpan1.range.start;\n var standardProps = {};\n if (dateSpan0.allDay !== dateSpan1.allDay) {\n standardProps.allDay = dateSpan1.allDay;\n standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration;\n if (dateSpan1.allDay) {\n // means date1 is already start-of-day,\n // but date0 needs to be converted\n date0 = startOfDay(date0);\n }\n }\n var delta = diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ?\n hit0.component.largeUnit :\n null);\n if (delta.milliseconds) { // has hours/minutes/seconds\n standardProps.allDay = false;\n }\n var mutation = {\n datesDelta: delta,\n standardProps: standardProps\n };\n for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) {\n var massager = massagers_1[_i];\n massager(mutation, hit0, hit1);\n }\n return mutation;\n}\nfunction getComponentTouchDelay(component) {\n var options = component.context.options;\n var delay = options.eventLongPressDelay;\n if (delay == null) {\n delay = options.longPressDelay;\n }\n return delay;\n}\n","import * as tslib_1 from \"tslib\";\nimport { applyMutationToEventStore, elementClosest, getRelevantEvents, createEmptyEventStore, diffDates, enableCursor, disableCursor, EventApi, getElSeg, createDuration, Interaction, interactionSettingsToStore } from '@fullcalendar/core';\nimport HitDragging, { isHitsEqual } from './HitDragging';\nimport FeaturefulElementDragging from '../dnd/FeaturefulElementDragging';\nimport { __assign } from 'tslib';\nvar EventDragging = /** @class */ (function (_super) {\n tslib_1.__extends(EventDragging, _super);\n function EventDragging(settings) {\n var _this = _super.call(this, settings) || this;\n // internal state\n _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?\n _this.eventRange = null;\n _this.relevantEvents = null;\n _this.validMutation = null;\n _this.mutatedRelevantEvents = null;\n _this.handlePointerDown = function (ev) {\n var component = _this.component;\n var seg = _this.querySeg(ev);\n var eventRange = _this.eventRange = seg.eventRange;\n _this.dragging.minDistance = component.context.options.eventDragMinDistance;\n // if touch, need to be working with a selected event\n _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) ||\n (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId));\n };\n _this.handleDragStart = function (ev) {\n var _a = _this.component.context, calendar = _a.calendar, view = _a.view;\n var eventRange = _this.eventRange;\n _this.relevantEvents = getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId);\n _this.draggingSeg = _this.querySeg(ev);\n calendar.unselect();\n calendar.publiclyTrigger('eventResizeStart', [\n {\n el: _this.draggingSeg.el,\n event: new EventApi(calendar, eventRange.def, eventRange.instance),\n jsEvent: ev.origEvent,\n view: view\n }\n ]);\n };\n _this.handleHitUpdate = function (hit, isFinal, ev) {\n var calendar = _this.component.context.calendar;\n var relevantEvents = _this.relevantEvents;\n var initialHit = _this.hitDragging.initialHit;\n var eventInstance = _this.eventRange.instance;\n var mutation = null;\n var mutatedRelevantEvents = null;\n var isInvalid = false;\n var interaction = {\n affectedEvents: relevantEvents,\n mutatedEvents: createEmptyEventStore(),\n isEvent: true,\n origSeg: _this.draggingSeg\n };\n if (hit) {\n mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms);\n }\n if (mutation) {\n mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar);\n interaction.mutatedEvents = mutatedRelevantEvents;\n if (!_this.component.isInteractionValid(interaction)) {\n isInvalid = true;\n mutation = null;\n mutatedRelevantEvents = null;\n interaction.mutatedEvents = null;\n }\n }\n if (mutatedRelevantEvents) {\n calendar.dispatch({\n type: 'SET_EVENT_RESIZE',\n state: interaction\n });\n }\n else {\n calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' });\n }\n if (!isInvalid) {\n enableCursor();\n }\n else {\n disableCursor();\n }\n if (!isFinal) {\n if (mutation && isHitsEqual(initialHit, hit)) {\n mutation = null;\n }\n _this.validMutation = mutation;\n _this.mutatedRelevantEvents = mutatedRelevantEvents;\n }\n };\n _this.handleDragEnd = function (ev) {\n var _a = _this.component.context, calendar = _a.calendar, view = _a.view;\n var eventDef = _this.eventRange.def;\n var eventInstance = _this.eventRange.instance;\n var eventApi = new EventApi(calendar, eventDef, eventInstance);\n var relevantEvents = _this.relevantEvents;\n var mutatedRelevantEvents = _this.mutatedRelevantEvents;\n calendar.publiclyTrigger('eventResizeStop', [\n {\n el: _this.draggingSeg.el,\n event: eventApi,\n jsEvent: ev.origEvent,\n view: view\n }\n ]);\n if (_this.validMutation) {\n calendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents\n });\n calendar.publiclyTrigger('eventResize', [\n {\n el: _this.draggingSeg.el,\n startDelta: _this.validMutation.startDelta || createDuration(0),\n endDelta: _this.validMutation.endDelta || createDuration(0),\n prevEvent: eventApi,\n event: new EventApi(// the data AFTER the mutation\n calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),\n revert: function () {\n calendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents\n });\n },\n jsEvent: ev.origEvent,\n view: view\n }\n ]);\n }\n else {\n calendar.publiclyTrigger('_noEventResize');\n }\n // reset all internal state\n _this.draggingSeg = null;\n _this.relevantEvents = null;\n _this.validMutation = null;\n // okay to keep eventInstance around. useful to set it in handlePointerDown\n };\n var component = settings.component;\n var dragging = _this.dragging = new FeaturefulElementDragging(component.el);\n dragging.pointer.selector = '.fc-resizer';\n dragging.touchScrollAllowed = false;\n dragging.autoScroller.isEnabled = component.context.options.dragScroll;\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragstart', _this.handleDragStart);\n hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);\n hitDragging.emitter.on('dragend', _this.handleDragEnd);\n return _this;\n }\n EventDragging.prototype.destroy = function () {\n this.dragging.destroy();\n };\n EventDragging.prototype.querySeg = function (ev) {\n return getElSeg(elementClosest(ev.subjectEl, this.component.fgSegSelector));\n };\n return EventDragging;\n}(Interaction));\nexport default EventDragging;\nfunction computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) {\n var dateEnv = hit0.component.context.dateEnv;\n var date0 = hit0.dateSpan.range.start;\n var date1 = hit1.dateSpan.range.start;\n var delta = diffDates(date0, date1, dateEnv, hit0.component.largeUnit);\n var props = {};\n for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) {\n var transform = transforms_1[_i];\n var res = transform(hit0, hit1);\n if (res === false) {\n return null;\n }\n else if (res) {\n __assign(props, res);\n }\n }\n if (isFromStart) {\n if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {\n props.startDelta = delta;\n return props;\n }\n }\n else {\n if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {\n props.endDelta = delta;\n return props;\n }\n }\n return null;\n}\n","import { elementClosest } from '@fullcalendar/core';\nimport PointerDragging from '../dnd/PointerDragging';\nimport EventDragging from './EventDragging';\nvar UnselectAuto = /** @class */ (function () {\n function UnselectAuto(calendar) {\n var _this = this;\n this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system\n this.onSelect = function (selectInfo) {\n if (selectInfo.jsEvent) {\n _this.isRecentPointerDateSelect = true;\n }\n };\n this.onDocumentPointerUp = function (pev) {\n var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer;\n var state = calendar.state;\n // touch-scrolling should never unfocus any type of selection\n if (!documentPointer.wasTouchScroll) {\n if (state.dateSelection && // an existing date selection?\n !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?\n ) {\n var unselectAuto = calendar.viewOpt('unselectAuto');\n var unselectCancel = calendar.viewOpt('unselectCancel');\n if (unselectAuto && (!unselectAuto || !elementClosest(documentPointer.downEl, unselectCancel))) {\n calendar.unselect(pev);\n }\n }\n if (state.eventSelection && // an existing event selected?\n !elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event\n ) {\n calendar.dispatch({ type: 'UNSELECT_EVENT' });\n }\n }\n _this.isRecentPointerDateSelect = false;\n };\n this.calendar = calendar;\n var documentPointer = this.documentPointer = new PointerDragging(document);\n documentPointer.shouldIgnoreMove = true;\n documentPointer.shouldWatchScroll = false;\n documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);\n /*\n TODO: better way to know about whether there was a selection with the pointer\n */\n calendar.on('select', this.onSelect);\n }\n UnselectAuto.prototype.destroy = function () {\n this.calendar.off('select', this.onSelect);\n this.documentPointer.destroy();\n };\n return UnselectAuto;\n}());\nexport default UnselectAuto;\n","import * as tslib_1 from \"tslib\";\nimport { interactionSettingsStore, parseEventDef, createEventInstance, createEmptyEventStore, eventTupleToStore, config, parseDragMeta, EventApi, elementMatches, enableCursor, disableCursor, isInteractionValid } from '@fullcalendar/core';\nimport HitDragging from '../interactions/HitDragging';\nimport { __assign } from 'tslib';\n/*\nGiven an already instantiated draggable object for one-or-more elements,\nInterprets any dragging as an attempt to drag an events that lives outside\nof a calendar onto a calendar.\n*/\nvar ExternalElementDragging = /** @class */ (function () {\n function ExternalElementDragging(dragging, suppliedDragMeta) {\n var _this = this;\n this.receivingCalendar = null;\n this.droppableEvent = null; // will exist for all drags, even if create:false\n this.suppliedDragMeta = null;\n this.dragMeta = null;\n this.handleDragStart = function (ev) {\n _this.dragMeta = _this.buildDragMeta(ev.subjectEl);\n };\n this.handleHitUpdate = function (hit, isFinal, ev) {\n var dragging = _this.hitDragging.dragging;\n var receivingCalendar = null;\n var droppableEvent = null;\n var isInvalid = false;\n var interaction = {\n affectedEvents: createEmptyEventStore(),\n mutatedEvents: createEmptyEventStore(),\n isEvent: _this.dragMeta.create,\n origSeg: null\n };\n if (hit) {\n receivingCalendar = hit.component.context.calendar;\n if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) {\n droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar);\n interaction.mutatedEvents = eventTupleToStore(droppableEvent);\n isInvalid = !isInteractionValid(interaction, receivingCalendar);\n if (isInvalid) {\n interaction.mutatedEvents = createEmptyEventStore();\n droppableEvent = null;\n }\n }\n }\n _this.displayDrag(receivingCalendar, interaction);\n // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)\n // TODO: wish we could somehow wait for dispatch to guarantee render\n dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror'));\n if (!isInvalid) {\n enableCursor();\n }\n else {\n disableCursor();\n }\n if (!isFinal) {\n dragging.setMirrorNeedsRevert(!droppableEvent);\n _this.receivingCalendar = receivingCalendar;\n _this.droppableEvent = droppableEvent;\n }\n };\n this.handleDragEnd = function (pev) {\n var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent;\n _this.clearDrag();\n if (receivingCalendar && droppableEvent) {\n var finalHit = _this.hitDragging.finalHit;\n var finalView = finalHit.component.context.view;\n var dragMeta = _this.dragMeta;\n var arg = tslib_1.__assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView });\n receivingCalendar.publiclyTrigger('drop', [arg]);\n if (dragMeta.create) {\n receivingCalendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: eventTupleToStore(droppableEvent)\n });\n if (pev.isTouch) {\n receivingCalendar.dispatch({\n type: 'SELECT_EVENT',\n eventInstanceId: droppableEvent.instance.instanceId\n });\n }\n // signal that an external event landed\n receivingCalendar.publiclyTrigger('eventReceive', [\n {\n draggedEl: pev.subjectEl,\n event: new EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance),\n view: finalView\n }\n ]);\n }\n }\n _this.receivingCalendar = null;\n _this.droppableEvent = null;\n };\n var hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore);\n hitDragging.requireInitial = false; // will start outside of a component\n hitDragging.emitter.on('dragstart', this.handleDragStart);\n hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n hitDragging.emitter.on('dragend', this.handleDragEnd);\n this.suppliedDragMeta = suppliedDragMeta;\n }\n ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) {\n if (typeof this.suppliedDragMeta === 'object') {\n return parseDragMeta(this.suppliedDragMeta);\n }\n else if (typeof this.suppliedDragMeta === 'function') {\n return parseDragMeta(this.suppliedDragMeta(subjectEl));\n }\n else {\n return getDragMetaFromEl(subjectEl);\n }\n };\n ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) {\n var prevCalendar = this.receivingCalendar;\n if (prevCalendar && prevCalendar !== nextCalendar) {\n prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n if (nextCalendar) {\n nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });\n }\n };\n ExternalElementDragging.prototype.clearDrag = function () {\n if (this.receivingCalendar) {\n this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n };\n ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) {\n var dropAccept = receivingCalendar.opt('dropAccept');\n if (typeof dropAccept === 'function') {\n return dropAccept(el);\n }\n else if (typeof dropAccept === 'string' && dropAccept) {\n return Boolean(elementMatches(el, dropAccept));\n }\n return true;\n };\n return ExternalElementDragging;\n}());\nexport default ExternalElementDragging;\n// Utils for computing event store from the DragMeta\n// ----------------------------------------------------------------------------------------------------\nfunction computeEventForDateSpan(dateSpan, dragMeta, calendar) {\n var defProps = tslib_1.__assign({}, dragMeta.leftoverProps);\n for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) {\n var transform = _a[_i];\n __assign(defProps, transform(dateSpan, dragMeta));\n }\n var def = parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd\n calendar);\n var start = dateSpan.range.start;\n // only rely on time info if drop zone is all-day,\n // otherwise, we already know the time\n if (dateSpan.allDay && dragMeta.startTime) {\n start = calendar.dateEnv.add(start, dragMeta.startTime);\n }\n var end = dragMeta.duration ?\n calendar.dateEnv.add(start, dragMeta.duration) :\n calendar.getDefaultEventEnd(dateSpan.allDay, start);\n var instance = createEventInstance(def.defId, { start: start, end: end });\n return { def: def, instance: instance };\n}\n// Utils for extracting data from element\n// ----------------------------------------------------------------------------------------------------\nfunction getDragMetaFromEl(el) {\n var str = getEmbeddedElData(el, 'event');\n var obj = str ?\n JSON.parse(str) :\n { create: false }; // if no embedded data, assume no event creation\n return parseDragMeta(obj);\n}\nconfig.dataAttrPrefix = '';\nfunction getEmbeddedElData(el, name) {\n var prefix = config.dataAttrPrefix;\n var prefixedName = (prefix ? prefix + '-' : '') + name;\n return el.getAttribute('data-' + prefixedName) || '';\n}\n","import { globalDefaults } from '@fullcalendar/core';\nimport FeaturefulElementDragging from '../dnd/FeaturefulElementDragging';\nimport ExternalElementDragging from './ExternalElementDragging';\n/*\nMakes an element (that is *external* to any calendar) draggable.\nCan pass in data that determines how an event will be created when dropped onto a calendar.\nLeverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.\n*/\nvar ExternalDraggable = /** @class */ (function () {\n function ExternalDraggable(el, settings) {\n var _this = this;\n if (settings === void 0) { settings = {}; }\n this.handlePointerDown = function (ev) {\n var dragging = _this.dragging;\n var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay;\n dragging.minDistance =\n minDistance != null ?\n minDistance :\n (ev.isTouch ? 0 : globalDefaults.eventDragMinDistance);\n dragging.delay =\n ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv\n (longPressDelay != null ? longPressDelay : globalDefaults.longPressDelay) :\n 0;\n };\n this.handleDragStart = function (ev) {\n if (ev.isTouch &&\n _this.dragging.delay &&\n ev.subjectEl.classList.contains('fc-event')) {\n _this.dragging.mirror.getMirrorEl().classList.add('fc-selected');\n }\n };\n this.settings = settings;\n var dragging = this.dragging = new FeaturefulElementDragging(el);\n dragging.touchScrollAllowed = false;\n if (settings.itemSelector != null) {\n dragging.pointer.selector = settings.itemSelector;\n }\n if (settings.appendTo != null) {\n dragging.mirror.parentNode = settings.appendTo; // TODO: write tests\n }\n dragging.emitter.on('pointerdown', this.handlePointerDown);\n dragging.emitter.on('dragstart', this.handleDragStart);\n new ExternalElementDragging(dragging, settings.eventData);\n }\n ExternalDraggable.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return ExternalDraggable;\n}());\nexport default ExternalDraggable;\n","import * as tslib_1 from \"tslib\";\nimport { ElementDragging } from '@fullcalendar/core';\nimport PointerDragging from '../dnd/PointerDragging';\n/*\nDetects when a *THIRD-PARTY* drag-n-drop system interacts with elements.\nThe third-party system is responsible for drawing the visuals effects of the drag.\nThis class simply monitors for pointer movements and fires events.\nIt also has the ability to hide the moving element (the \"mirror\") during the drag.\n*/\nvar InferredElementDragging = /** @class */ (function (_super) {\n tslib_1.__extends(InferredElementDragging, _super);\n function InferredElementDragging(containerEl) {\n var _this = _super.call(this, containerEl) || this;\n _this.shouldIgnoreMove = false;\n _this.mirrorSelector = '';\n _this.currentMirrorEl = null;\n _this.handlePointerDown = function (ev) {\n _this.emitter.trigger('pointerdown', ev);\n if (!_this.shouldIgnoreMove) {\n // fire dragstart right away. does not support delay or min-distance\n _this.emitter.trigger('dragstart', ev);\n }\n };\n _this.handlePointerMove = function (ev) {\n if (!_this.shouldIgnoreMove) {\n _this.emitter.trigger('dragmove', ev);\n }\n };\n _this.handlePointerUp = function (ev) {\n _this.emitter.trigger('pointerup', ev);\n if (!_this.shouldIgnoreMove) {\n // fire dragend right away. does not support a revert animation\n _this.emitter.trigger('dragend', ev);\n }\n };\n var pointer = _this.pointer = new PointerDragging(containerEl);\n pointer.emitter.on('pointerdown', _this.handlePointerDown);\n pointer.emitter.on('pointermove', _this.handlePointerMove);\n pointer.emitter.on('pointerup', _this.handlePointerUp);\n return _this;\n }\n InferredElementDragging.prototype.destroy = function () {\n this.pointer.destroy();\n };\n InferredElementDragging.prototype.setIgnoreMove = function (bool) {\n this.shouldIgnoreMove = bool;\n };\n InferredElementDragging.prototype.setMirrorIsVisible = function (bool) {\n if (bool) {\n // restore a previously hidden element.\n // use the reference in case the selector class has already been removed.\n if (this.currentMirrorEl) {\n this.currentMirrorEl.style.visibility = '';\n this.currentMirrorEl = null;\n }\n }\n else {\n var mirrorEl = this.mirrorSelector ?\n document.querySelector(this.mirrorSelector) :\n null;\n if (mirrorEl) {\n this.currentMirrorEl = mirrorEl;\n mirrorEl.style.visibility = 'hidden';\n }\n }\n };\n return InferredElementDragging;\n}(ElementDragging));\nexport default InferredElementDragging;\n","import ExternalElementDragging from './ExternalElementDragging';\nimport InferredElementDragging from './InferredElementDragging';\n/*\nBridges third-party drag-n-drop systems with FullCalendar.\nMust be instantiated and destroyed by caller.\n*/\nvar ThirdPartyDraggable = /** @class */ (function () {\n function ThirdPartyDraggable(containerOrSettings, settings) {\n var containerEl = document;\n if (\n // wish we could just test instanceof EventTarget, but doesn't work in IE11\n containerOrSettings === document ||\n containerOrSettings instanceof Element) {\n containerEl = containerOrSettings;\n settings = settings || {};\n }\n else {\n settings = (containerOrSettings || {});\n }\n var dragging = this.dragging = new InferredElementDragging(containerEl);\n if (typeof settings.itemSelector === 'string') {\n dragging.pointer.selector = settings.itemSelector;\n }\n else if (containerEl === document) {\n dragging.pointer.selector = '[data-event]';\n }\n if (typeof settings.mirrorSelector === 'string') {\n dragging.mirrorSelector = settings.mirrorSelector;\n }\n new ExternalElementDragging(dragging, settings.eventData);\n }\n ThirdPartyDraggable.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return ThirdPartyDraggable;\n}());\nexport default ThirdPartyDraggable;\n","import { createPlugin } from '@fullcalendar/core';\nimport DateClicking from './interactions/DateClicking';\nimport DateSelecting from './interactions/DateSelecting';\nimport EventDragging from './interactions/EventDragging';\nimport EventResizing from './interactions/EventResizing';\nimport UnselectAuto from './interactions/UnselectAuto';\nimport FeaturefulElementDragging from './dnd/FeaturefulElementDragging';\nexport default createPlugin({\n componentInteractions: [DateClicking, DateSelecting, EventDragging, EventResizing],\n calendarInteractions: [UnselectAuto],\n elementDraggingImpl: FeaturefulElementDragging\n});\nexport { FeaturefulElementDragging };\nexport { default as PointerDragging } from './dnd/PointerDragging';\nexport { default as Draggable } from './interactions-external/ExternalDraggable';\nexport { default as ThirdPartyDraggable } from './interactions-external/ThirdPartyDraggable';\n"],"names":["tslib_1.__extends","getComponentTouchDelay","tslib_1.__assign","EventDragging","EventResizing"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/interaction/main.min.js b/src/main/resources/static/packages/interaction/main.min.js new file mode 100644 index 00000000..f8e5bc35 --- /dev/null +++ b/src/main/resources/static/packages/interaction/main.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Interaction Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarInteraction={},e.FullCalendar)}(this,function(e,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var i=function(){return(i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&(this.everMovedDown=!0),o<0?this.everMovedLeft=!0:o>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(p()))}},e.prototype.stop=function(){if(this.isEnabled){this.isAnimating=!1;for(var e=0,t=this.scrollCaches;e=0&&c>=0&&d>=0&&g>=0&&(d<=n&&this.everMovedUp&&a.canScrollUp()&&(!r||r.distance>d)&&(r={scrollCache:a,name:"top",distance:d}),g<=n&&this.everMovedDown&&a.canScrollDown()&&(!r||r.distance>g)&&(r={scrollCache:a,name:"bottom",distance:g}),s<=n&&this.everMovedLeft&&a.canScrollLeft()&&(!r||r.distance>s)&&(r={scrollCache:a,name:"left",distance:s}),c<=n&&this.everMovedRight&&a.canScrollRight()&&(!r||r.distance>c)&&(r={scrollCache:a,name:"right",distance:c}))}return r},e.prototype.buildCaches=function(){return this.queryScrollEls().map(function(e){return e===window?new h(!1):new u(e,!1)})},e.prototype.queryScrollEls=function(){for(var e=[],t=0,n=this.scrollQuery;t=t*t&&r.handleDistanceSurpassed(e)}r.isDragging&&("scroll"!==e.origEvent.type&&(r.mirror.handleMove(e.pageX,e.pageY),r.autoScroller.handleMove(e.pageX,e.pageY)),r.emitter.trigger("dragmove",e))}},r.onPointerUp=function(e){r.isInteracting&&(r.isInteracting=!1,t.allowSelection(document.body),t.allowContextMenu(document.body),r.emitter.trigger("pointerup",e),r.isDragging&&(r.autoScroller.stop(),r.tryStopDrag(e)),r.delayTimeoutId&&(clearTimeout(r.delayTimeoutId),r.delayTimeoutId=null))};var i=r.pointer=new s(n);return i.emitter.on("pointerdown",r.onPointerDown),i.emitter.on("pointermove",r.onPointerMove),i.emitter.on("pointerup",r.onPointerUp),r.mirror=new d,r.autoScroller=new v,r}return r(n,e),n.prototype.destroy=function(){this.pointer.destroy()},n.prototype.startDelay=function(e){var t=this;"number"==typeof this.delay?this.delayTimeoutId=setTimeout(function(){t.delayTimeoutId=null,t.handleDelayEnd(e)},this.delay):this.handleDelayEnd(e)},n.prototype.handleDelayEnd=function(e){this.isDelayEnded=!0,this.tryStartDrag(e)},n.prototype.handleDistanceSurpassed=function(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)},n.prototype.tryStartDrag=function(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))},n.prototype.tryStopDrag=function(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))},n.prototype.stopDrag=function(e){this.isDragging=!1,this.emitter.trigger("dragend",e)},n.prototype.setIgnoreMove=function(e){this.pointer.shouldIgnoreMove=e},n.prototype.setMirrorIsVisible=function(e){this.mirror.setIsVisible(e)},n.prototype.setMirrorNeedsRevert=function(e){this.mirrorNeedsRevert=e},n.prototype.setAutoScrollEnabled=function(e){this.autoScroller.isEnabled=e},n}(t.ElementDragging),E=function(){function e(e){this.origRect=t.computeRect(e),this.scrollCaches=t.getClippingParents(e).map(function(e){return new u(e,!0)})}return e.prototype.destroy=function(){for(var e=0,t=this.scrollCaches;e=0&&g=0&&uo.layer)||(f.rect.left+=c,f.rect.right+=c,f.rect.top+=d,f.rect.bottom+=d,o=f)}}}return o},e}();function S(e,n){return!e&&!n||Boolean(e)===Boolean(n)&&t.isDateSpansEqual(e.dateSpan,n.dateSpan)}var y=function(e){function n(n){var r=e.call(this,n)||this;r.handlePointerDown=function(e){var t=r.dragging;t.setIgnoreMove(!r.component.isValidDateDownEl(t.pointer.downEl))},r.handleDragEnd=function(e){var t=r.component.context,n=t.calendar,i=t.view;if(!r.dragging.pointer.wasTouchScroll){var o=r.hitDragging,a=o.initialHit,l=o.finalHit;a&&l&&S(a,l)&&n.triggerDateClick(a.dateSpan,a.dayEl,i,e.origEvent)}};var i=n.component;r.dragging=new f(i.el),r.dragging.autoScroller.isEnabled=!1;var o=r.hitDragging=new m(r.dragging,t.interactionSettingsToStore(n));return o.emitter.on("pointerdown",r.handlePointerDown),o.emitter.on("dragend",r.handleDragEnd),r}return r(n,e),n.prototype.destroy=function(){this.dragging.destroy()},n}(t.Interaction),D=function(e){function n(n){var r=e.call(this,n)||this;r.dragSelection=null,r.handlePointerDown=function(e){var t=r,n=t.component,i=t.dragging,o=n.context.options.selectable&&n.isValidDateDownEl(e.origEvent.target);i.setIgnoreMove(!o),i.delay=e.isTouch?function(e){var t=e.context.options,n=t.selectLongPressDelay;null==n&&(n=t.longPressDelay);return n}(n):null},r.handleDragStart=function(e){r.component.context.calendar.unselect(e)},r.handleHitUpdate=function(e,n){var o=r.component.context.calendar,a=null,l=!1;e&&((a=function(e,n,r){var o=e.dateSpan,a=n.dateSpan,l=[o.range.start,o.range.end,a.range.start,a.range.end];l.sort(t.compareNumbers);for(var s={},c=0,d=r;co.start)return g.endDelta=d,g;return null}(s,e,o.subjectEl.classList.contains("fc-start-resizer"),c.range,a.pluginSystem.hooks.eventResizeJoinTransforms)),d&&(g=t.applyMutationToEventStore(l,a.eventUiBases,d,a),h.mutatedEvents=g,r.component.isInteractionValid(h)||(u=!0,d=null,g=null,h.mutatedEvents=null)),g?a.dispatch({type:"SET_EVENT_RESIZE",state:h}):a.dispatch({type:"UNSET_EVENT_RESIZE"}),u?t.disableCursor():t.enableCursor(),n||(d&&S(s,e)&&(d=null),r.validMutation=d,r.mutatedRelevantEvents=g)},r.handleDragEnd=function(e){var n=r.component.context,i=n.calendar,o=n.view,a=r.eventRange.def,l=r.eventRange.instance,s=new t.EventApi(i,a,l),c=r.relevantEvents,d=r.mutatedRelevantEvents;i.publiclyTrigger("eventResizeStop",[{el:r.draggingSeg.el,event:s,jsEvent:e.origEvent,view:o}]),r.validMutation?(i.dispatch({type:"MERGE_EVENTS",eventStore:d}),i.publiclyTrigger("eventResize",[{el:r.draggingSeg.el,startDelta:r.validMutation.startDelta||t.createDuration(0),endDelta:r.validMutation.endDelta||t.createDuration(0),prevEvent:s,event:new t.EventApi(i,d.defs[a.defId],l?d.instances[l.instanceId]:null),revert:function(){i.dispatch({type:"MERGE_EVENTS",eventStore:c})},jsEvent:e.origEvent,view:o}])):i.publiclyTrigger("_noEventResize"),r.draggingSeg=null,r.relevantEvents=null,r.validMutation=null};var o=n.component,a=r.dragging=new f(o.el);a.pointer.selector=".fc-resizer",a.touchScrollAllowed=!1,a.autoScroller.isEnabled=o.context.options.dragScroll;var l=r.hitDragging=new m(r.dragging,t.interactionSettingsToStore(n));return l.emitter.on("pointerdown",r.handlePointerDown),l.emitter.on("dragstart",r.handleDragStart),l.emitter.on("hitupdate",r.handleHitUpdate),l.emitter.on("dragend",r.handleDragEnd),r}return r(n,e),n.prototype.destroy=function(){this.dragging.destroy()},n.prototype.querySeg=function(e){return t.getElSeg(t.elementClosest(e.subjectEl,this.component.fgSegSelector))},n}(t.Interaction);var M=function(){function e(e){var n=this;this.isRecentPointerDateSelect=!1,this.onSelect=function(e){e.jsEvent&&(n.isRecentPointerDateSelect=!0)},this.onDocumentPointerUp=function(e){var r=n,i=r.calendar,o=r.documentPointer,a=i.state;if(!o.wasTouchScroll){if(a.dateSelection&&!n.isRecentPointerDateSelect){var l=i.viewOpt("unselectAuto"),s=i.viewOpt("unselectCancel");!l||l&&t.elementClosest(o.downEl,s)||i.unselect(e)}a.eventSelection&&!t.elementClosest(o.downEl,w.SELECTOR)&&i.dispatch({type:"UNSELECT_EVENT"})}n.isRecentPointerDateSelect=!1},this.calendar=e;var r=this.documentPointer=new s(document);r.shouldIgnoreMove=!0,r.shouldWatchScroll=!1,r.emitter.on("pointerup",this.onDocumentPointerUp),e.on("select",this.onSelect)}return e.prototype.destroy=function(){this.calendar.off("select",this.onSelect),this.documentPointer.destroy()},e}(),b=function(){function e(e,n){var r=this;this.receivingCalendar=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=function(e){r.dragMeta=r.buildDragMeta(e.subjectEl)},this.handleHitUpdate=function(e,n,o){var a=r.hitDragging.dragging,l=null,s=null,c=!1,d={affectedEvents:t.createEmptyEventStore(),mutatedEvents:t.createEmptyEventStore(),isEvent:r.dragMeta.create,origSeg:null};e&&(l=e.component.context.calendar,r.canDropElOnCalendar(o.subjectEl,l)&&(s=function(e,n,r){for(var o=i({},n.leftoverProps),a=0,l=r.pluginSystem.hooks.externalDefTransforms;a tag */ + text-decoration: none; + color: inherit; +} + +.fc-list-item-title a[href]:hover { + /* hover effect only on titles with hrefs */ + text-decoration: underline; +} + +/* message when no events */ +.fc-list-empty-wrap2 { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.fc-list-empty-wrap1 { + width: 100%; + height: 100%; + display: table; +} + +.fc-list-empty { + display: table-cell; + vertical-align: middle; + text-align: center; +} + +.fc-unthemed .fc-list-empty { + /* theme will provide own background */ + background-color: #eee; +} \ No newline at end of file diff --git a/src/main/resources/static/packages/list/main.d.ts b/src/main/resources/static/packages/list/main.d.ts new file mode 100644 index 00000000..ecbb4967 --- /dev/null +++ b/src/main/resources/static/packages/list/main.d.ts @@ -0,0 +1,36 @@ +// Generated by dts-bundle v0.7.3-fork.1 +// Dependencies for this module: +// ../../../../../@fullcalendar/core + +declare module '@fullcalendar/list' { + import ListView from '@fullcalendar/list/ListView'; + export { ListView }; + const _default: import("@fullcalendar/core").PluginDef; + export default _default; +} + +declare module '@fullcalendar/list/ListView' { + import { View, ViewProps, ScrollComponent, DateMarker, DateRange, ComponentContext, EventUiHash, EventRenderRange, EventStore, Seg, ViewSpec } from '@fullcalendar/core'; + export { ListView as default, ListView }; + class ListView extends View { + scroller: ScrollComponent; + contentEl: HTMLElement; + dayDates: DateMarker[]; + constructor(viewSpec: ViewSpec, parentEl: HTMLElement); + firstContext(context: ComponentContext): void; + render(props: ViewProps, context: ComponentContext): void; + destroy(): void; + _renderSkeleton(context: ComponentContext): void; + _unrenderSkeleton(): void; + updateSize(isResize: any, viewHeight: any, isAuto: any): void; + computeScrollerHeight(viewHeight: any): number; + _eventStoreToSegs(eventStore: EventStore, eventUiBases: EventUiHash, dayRanges: DateRange[]): Seg[]; + eventRangesToSegs(eventRanges: EventRenderRange[], dayRanges: DateRange[]): any[]; + eventRangeToSegs(eventRange: EventRenderRange, dayRanges: DateRange[]): any[]; + renderEmptyMessage(): void; + renderSegList(allSegs: any): void; + groupSegsByDay(segs: any): any[]; + buildDayHeaderRow(dayDate: any): HTMLTableRowElement; + } +} + diff --git a/src/main/resources/static/packages/list/main.esm.js b/src/main/resources/static/packages/list/main.esm.js new file mode 100644 index 00000000..34471ff3 --- /dev/null +++ b/src/main/resources/static/packages/list/main.esm.js @@ -0,0 +1,348 @@ +/*! +FullCalendar List View Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +import { getAllDayHtml, isMultiDayRange, htmlEscape, FgEventRenderer, memoize, memoizeRendering, ScrollComponent, subtractInnerElHeight, sliceEventStore, intersectRanges, htmlToElement, createFormatter, createElement, buildGotoAnchorHtml, View, startOfDay, addDays, createPlugin } from '@fullcalendar/core'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var ListEventRenderer = /** @class */ (function (_super) { + __extends(ListEventRenderer, _super); + function ListEventRenderer(listView) { + var _this = _super.call(this) || this; + _this.listView = listView; + return _this; + } + ListEventRenderer.prototype.attachSegs = function (segs) { + if (!segs.length) { + this.listView.renderEmptyMessage(); + } + else { + this.listView.renderSegList(segs); + } + }; + ListEventRenderer.prototype.detachSegs = function () { + }; + // generates the HTML for a single event row + ListEventRenderer.prototype.renderSegHtml = function (seg) { + var _a = this.context, theme = _a.theme, options = _a.options; + var eventRange = seg.eventRange; + var eventDef = eventRange.def; + var eventInstance = eventRange.instance; + var eventUi = eventRange.ui; + var url = eventDef.url; + var classes = ['fc-list-item'].concat(eventUi.classNames); + var bgColor = eventUi.backgroundColor; + var timeHtml; + if (eventDef.allDay) { + timeHtml = getAllDayHtml(options); + } + else if (isMultiDayRange(eventRange.range)) { + if (seg.isStart) { + timeHtml = htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay + )); + } + else if (seg.isEnd) { + timeHtml = htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay + )); + } + else { // inner segment that lasts the whole day + timeHtml = getAllDayHtml(options); + } + } + else { + // Display the normal time text for the *event's* times + timeHtml = htmlEscape(this.getTimeText(eventRange)); + } + if (url) { + classes.push('fc-has-url'); + } + return '' + + (this.displayEventTime ? + '' + + (timeHtml || '') + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + htmlEscape(eventDef.title || '') + + '' + + '' + + ''; + }; + // like "4:00am" + ListEventRenderer.prototype.computeEventTimeFormat = function () { + return { + hour: 'numeric', + minute: '2-digit', + meridiem: 'short' + }; + }; + return ListEventRenderer; +}(FgEventRenderer)); + +/* +Responsible for the scroller, and forwarding event-related actions into the "grid". +*/ +var ListView = /** @class */ (function (_super) { + __extends(ListView, _super); + function ListView(viewSpec, parentEl) { + var _this = _super.call(this, viewSpec, parentEl) || this; + _this.computeDateVars = memoize(computeDateVars); + _this.eventStoreToSegs = memoize(_this._eventStoreToSegs); + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this); + _this.renderContent = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]); + return _this; + } + ListView.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { + el: this.el + // TODO: make aware that it doesn't do Hits + }); + }; + ListView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); + var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges; + this.dayDates = dayDates; + this.renderSkeleton(context); + this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)); + }; + ListView.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + this.renderContent.unrender(); + this.context.calendar.unregisterInteractiveComponent(this); + }; + ListView.prototype._renderSkeleton = function (context) { + var theme = context.theme; + this.el.classList.add('fc-list-view'); + var listViewClassNames = (theme.getClass('listView') || '').split(' '); // wish we didn't have to do this + for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) { + var listViewClassName = listViewClassNames_1[_i]; + if (listViewClassName) { // in case input was empty string + this.el.classList.add(listViewClassName); + } + } + this.scroller = new ScrollComponent('hidden', // overflow x + 'auto' // overflow y + ); + this.el.appendChild(this.scroller.el); + this.contentEl = this.scroller.el; // shortcut + }; + ListView.prototype._unrenderSkeleton = function () { + // TODO: remove classNames + this.scroller.destroy(); // will remove the Grid too + }; + ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) { + _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); + this.eventRenderer.computeSizes(isResize); + this.eventRenderer.assignSizes(isResize); + this.scroller.clear(); // sets height to 'auto' and clears overflow + if (!isAuto) { + this.scroller.setHeight(this.computeScrollerHeight(viewHeight)); + } + }; + ListView.prototype.computeScrollerHeight = function (viewHeight) { + return viewHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }; + ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) { + return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges); + }; + ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) { + var segs = []; + for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) { + var eventRange = eventRanges_1[_i]; + segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges)); + } + return segs; + }; + ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) { + var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold; + var range = eventRange.range; + var allDay = eventRange.def.allDay; + var dayIndex; + var segRange; + var seg; + var segs = []; + for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) { + segRange = intersectRanges(range, dayRanges[dayIndex]); + if (segRange) { + seg = { + component: this, + eventRange: eventRange, + start: segRange.start, + end: segRange.end, + isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(), + isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(), + dayIndex: dayIndex + }; + segs.push(seg); + // detect when range won't go fully into the next day, + // and mutate the latest seg to the be the end. + if (!seg.isEnd && !allDay && + dayIndex + 1 < dayRanges.length && + range.end < + dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) { + seg.end = range.end; + seg.isEnd = true; + break; + } + } + } + return segs; + }; + ListView.prototype.renderEmptyMessage = function () { + this.contentEl.innerHTML = + '
' + // TODO: try less wraps + '
' + + '
' + + htmlEscape(this.context.options.noEventsMessage) + + '
' + + '
' + + '
'; + }; + // called by ListEventRenderer + ListView.prototype.renderSegList = function (allSegs) { + var theme = this.context.theme; + var segsByDay = this.groupSegsByDay(allSegs); // sparse array + var dayIndex; + var daySegs; + var i; + var tableEl = htmlToElement('
'); + var tbodyEl = tableEl.querySelector('tbody'); + for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { + daySegs = segsByDay[dayIndex]; + if (daySegs) { // sparse array, so might be undefined + // append a day header + tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex])); + daySegs = this.eventRenderer.sortEventSegs(daySegs); + for (i = 0; i < daySegs.length; i++) { + tbodyEl.appendChild(daySegs[i].el); // append event row + } + } + } + this.contentEl.innerHTML = ''; + this.contentEl.appendChild(tableEl); + }; + // Returns a sparse array of arrays, segs grouped by their dayIndex + ListView.prototype.groupSegsByDay = function (segs) { + var segsByDay = []; // sparse array + var i; + var seg; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])) + .push(seg); + } + return segsByDay; + }; + // generates the HTML for the day headers that live amongst the event rows + ListView.prototype.buildDayHeaderRow = function (dayDate) { + var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options; + var mainFormat = createFormatter(options.listDayFormat); // TODO: cache + var altFormat = createFormatter(options.listDayAltFormat); // TODO: cache + return createElement('tr', { + className: 'fc-list-heading', + 'data-date': dateEnv.formatIso(dayDate, { omitTime: true }) + }, '' + + (mainFormat ? + buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML + ) : + '') + + (altFormat ? + buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML + ) : + '') + + ''); + }; + return ListView; +}(View)); +ListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions +function computeDateVars(dateProfile) { + var dayStart = startOfDay(dateProfile.renderRange.start); + var viewEnd = dateProfile.renderRange.end; + var dayDates = []; + var dayRanges = []; + while (dayStart < viewEnd) { + dayDates.push(dayStart); + dayRanges.push({ + start: dayStart, + end: addDays(dayStart, 1) + }); + dayStart = addDays(dayStart, 1); + } + return { dayDates: dayDates, dayRanges: dayRanges }; +} + +var main = createPlugin({ + views: { + list: { + class: ListView, + buttonTextKey: 'list', + listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like "January 1, 2016" + }, + listDay: { + type: 'list', + duration: { days: 1 }, + listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header + }, + listWeek: { + type: 'list', + duration: { weeks: 1 }, + listDayFormat: { weekday: 'long' }, + listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' } + }, + listMonth: { + type: 'list', + duration: { month: 1 }, + listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have + }, + listYear: { + type: 'list', + duration: { year: 1 }, + listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have + } + } +}); + +export default main; +export { ListView }; diff --git a/src/main/resources/static/packages/list/main.js b/src/main/resources/static/packages/list/main.js new file mode 100644 index 00000000..259691f7 --- /dev/null +++ b/src/main/resources/static/packages/list/main.js @@ -0,0 +1,356 @@ +/*! +FullCalendar List View Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : + typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) : + (global = global || self, factory(global.FullCalendarList = {}, global.FullCalendar)); +}(this, function (exports, core) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var ListEventRenderer = /** @class */ (function (_super) { + __extends(ListEventRenderer, _super); + function ListEventRenderer(listView) { + var _this = _super.call(this) || this; + _this.listView = listView; + return _this; + } + ListEventRenderer.prototype.attachSegs = function (segs) { + if (!segs.length) { + this.listView.renderEmptyMessage(); + } + else { + this.listView.renderSegList(segs); + } + }; + ListEventRenderer.prototype.detachSegs = function () { + }; + // generates the HTML for a single event row + ListEventRenderer.prototype.renderSegHtml = function (seg) { + var _a = this.context, theme = _a.theme, options = _a.options; + var eventRange = seg.eventRange; + var eventDef = eventRange.def; + var eventInstance = eventRange.instance; + var eventUi = eventRange.ui; + var url = eventDef.url; + var classes = ['fc-list-item'].concat(eventUi.classNames); + var bgColor = eventUi.backgroundColor; + var timeHtml; + if (eventDef.allDay) { + timeHtml = core.getAllDayHtml(options); + } + else if (core.isMultiDayRange(eventRange.range)) { + if (seg.isStart) { + timeHtml = core.htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay + )); + } + else if (seg.isEnd) { + timeHtml = core.htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay + )); + } + else { // inner segment that lasts the whole day + timeHtml = core.getAllDayHtml(options); + } + } + else { + // Display the normal time text for the *event's* times + timeHtml = core.htmlEscape(this.getTimeText(eventRange)); + } + if (url) { + classes.push('fc-has-url'); + } + return '' + + (this.displayEventTime ? + '' + + (timeHtml || '') + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + core.htmlEscape(eventDef.title || '') + + '' + + '' + + ''; + }; + // like "4:00am" + ListEventRenderer.prototype.computeEventTimeFormat = function () { + return { + hour: 'numeric', + minute: '2-digit', + meridiem: 'short' + }; + }; + return ListEventRenderer; + }(core.FgEventRenderer)); + + /* + Responsible for the scroller, and forwarding event-related actions into the "grid". + */ + var ListView = /** @class */ (function (_super) { + __extends(ListView, _super); + function ListView(viewSpec, parentEl) { + var _this = _super.call(this, viewSpec, parentEl) || this; + _this.computeDateVars = core.memoize(computeDateVars); + _this.eventStoreToSegs = core.memoize(_this._eventStoreToSegs); + _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this); + _this.renderContent = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]); + return _this; + } + ListView.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { + el: this.el + // TODO: make aware that it doesn't do Hits + }); + }; + ListView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); + var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges; + this.dayDates = dayDates; + this.renderSkeleton(context); + this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)); + }; + ListView.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + this.renderContent.unrender(); + this.context.calendar.unregisterInteractiveComponent(this); + }; + ListView.prototype._renderSkeleton = function (context) { + var theme = context.theme; + this.el.classList.add('fc-list-view'); + var listViewClassNames = (theme.getClass('listView') || '').split(' '); // wish we didn't have to do this + for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) { + var listViewClassName = listViewClassNames_1[_i]; + if (listViewClassName) { // in case input was empty string + this.el.classList.add(listViewClassName); + } + } + this.scroller = new core.ScrollComponent('hidden', // overflow x + 'auto' // overflow y + ); + this.el.appendChild(this.scroller.el); + this.contentEl = this.scroller.el; // shortcut + }; + ListView.prototype._unrenderSkeleton = function () { + // TODO: remove classNames + this.scroller.destroy(); // will remove the Grid too + }; + ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) { + _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); + this.eventRenderer.computeSizes(isResize); + this.eventRenderer.assignSizes(isResize); + this.scroller.clear(); // sets height to 'auto' and clears overflow + if (!isAuto) { + this.scroller.setHeight(this.computeScrollerHeight(viewHeight)); + } + }; + ListView.prototype.computeScrollerHeight = function (viewHeight) { + return viewHeight - + core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }; + ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) { + return this.eventRangesToSegs(core.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges); + }; + ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) { + var segs = []; + for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) { + var eventRange = eventRanges_1[_i]; + segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges)); + } + return segs; + }; + ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) { + var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold; + var range = eventRange.range; + var allDay = eventRange.def.allDay; + var dayIndex; + var segRange; + var seg; + var segs = []; + for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) { + segRange = core.intersectRanges(range, dayRanges[dayIndex]); + if (segRange) { + seg = { + component: this, + eventRange: eventRange, + start: segRange.start, + end: segRange.end, + isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(), + isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(), + dayIndex: dayIndex + }; + segs.push(seg); + // detect when range won't go fully into the next day, + // and mutate the latest seg to the be the end. + if (!seg.isEnd && !allDay && + dayIndex + 1 < dayRanges.length && + range.end < + dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) { + seg.end = range.end; + seg.isEnd = true; + break; + } + } + } + return segs; + }; + ListView.prototype.renderEmptyMessage = function () { + this.contentEl.innerHTML = + '
' + // TODO: try less wraps + '
' + + '
' + + core.htmlEscape(this.context.options.noEventsMessage) + + '
' + + '
' + + '
'; + }; + // called by ListEventRenderer + ListView.prototype.renderSegList = function (allSegs) { + var theme = this.context.theme; + var segsByDay = this.groupSegsByDay(allSegs); // sparse array + var dayIndex; + var daySegs; + var i; + var tableEl = core.htmlToElement('
'); + var tbodyEl = tableEl.querySelector('tbody'); + for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { + daySegs = segsByDay[dayIndex]; + if (daySegs) { // sparse array, so might be undefined + // append a day header + tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex])); + daySegs = this.eventRenderer.sortEventSegs(daySegs); + for (i = 0; i < daySegs.length; i++) { + tbodyEl.appendChild(daySegs[i].el); // append event row + } + } + } + this.contentEl.innerHTML = ''; + this.contentEl.appendChild(tableEl); + }; + // Returns a sparse array of arrays, segs grouped by their dayIndex + ListView.prototype.groupSegsByDay = function (segs) { + var segsByDay = []; // sparse array + var i; + var seg; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])) + .push(seg); + } + return segsByDay; + }; + // generates the HTML for the day headers that live amongst the event rows + ListView.prototype.buildDayHeaderRow = function (dayDate) { + var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options; + var mainFormat = core.createFormatter(options.listDayFormat); // TODO: cache + var altFormat = core.createFormatter(options.listDayAltFormat); // TODO: cache + return core.createElement('tr', { + className: 'fc-list-heading', + 'data-date': dateEnv.formatIso(dayDate, { omitTime: true }) + }, '' + + (mainFormat ? + core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, core.htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML + ) : + '') + + (altFormat ? + core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, core.htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML + ) : + '') + + ''); + }; + return ListView; + }(core.View)); + ListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions + function computeDateVars(dateProfile) { + var dayStart = core.startOfDay(dateProfile.renderRange.start); + var viewEnd = dateProfile.renderRange.end; + var dayDates = []; + var dayRanges = []; + while (dayStart < viewEnd) { + dayDates.push(dayStart); + dayRanges.push({ + start: dayStart, + end: core.addDays(dayStart, 1) + }); + dayStart = core.addDays(dayStart, 1); + } + return { dayDates: dayDates, dayRanges: dayRanges }; + } + + var main = core.createPlugin({ + views: { + list: { + class: ListView, + buttonTextKey: 'list', + listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like "January 1, 2016" + }, + listDay: { + type: 'list', + duration: { days: 1 }, + listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header + }, + listWeek: { + type: 'list', + duration: { weeks: 1 }, + listDayFormat: { weekday: 'long' }, + listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' } + }, + listMonth: { + type: 'list', + duration: { month: 1 }, + listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have + }, + listYear: { + type: 'list', + duration: { year: 1 }, + listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have + } + } + }); + + exports.ListView = ListView; + exports.default = main; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/main/resources/static/packages/list/main.js.map b/src/main/resources/static/packages/list/main.js.map new file mode 100644 index 00000000..5d7f600f --- /dev/null +++ b/src/main/resources/static/packages/list/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sources":["../../../tmp/tsc-output/packages/list/src/ListEventRenderer.js","../../../tmp/tsc-output/packages/list/src/ListView.js","../../../tmp/tsc-output/packages/list/src/main.js"],"sourcesContent":["import * as tslib_1 from \"tslib\";\nimport { htmlEscape, FgEventRenderer, isMultiDayRange, getAllDayHtml } from '@fullcalendar/core';\nvar ListEventRenderer = /** @class */ (function (_super) {\n tslib_1.__extends(ListEventRenderer, _super);\n function ListEventRenderer(listView) {\n var _this = _super.call(this) || this;\n _this.listView = listView;\n return _this;\n }\n ListEventRenderer.prototype.attachSegs = function (segs) {\n if (!segs.length) {\n this.listView.renderEmptyMessage();\n }\n else {\n this.listView.renderSegList(segs);\n }\n };\n ListEventRenderer.prototype.detachSegs = function () {\n };\n // generates the HTML for a single event row\n ListEventRenderer.prototype.renderSegHtml = function (seg) {\n var _a = this.context, theme = _a.theme, options = _a.options;\n var eventRange = seg.eventRange;\n var eventDef = eventRange.def;\n var eventInstance = eventRange.instance;\n var eventUi = eventRange.ui;\n var url = eventDef.url;\n var classes = ['fc-list-item'].concat(eventUi.classNames);\n var bgColor = eventUi.backgroundColor;\n var timeHtml;\n if (eventDef.allDay) {\n timeHtml = getAllDayHtml(options);\n }\n else if (isMultiDayRange(eventRange.range)) {\n if (seg.isStart) {\n timeHtml = htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay\n ));\n }\n else if (seg.isEnd) {\n timeHtml = htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay\n ));\n }\n else { // inner segment that lasts the whole day\n timeHtml = getAllDayHtml(options);\n }\n }\n else {\n // Display the normal time text for the *event's* times\n timeHtml = htmlEscape(this.getTimeText(eventRange));\n }\n if (url) {\n classes.push('fc-has-url');\n }\n return '' +\n (this.displayEventTime ?\n '' +\n (timeHtml || '') +\n '' :\n '') +\n '' +\n '' +\n '' +\n '' +\n '' +\n htmlEscape(eventDef.title || '') +\n '' +\n '' +\n '';\n };\n // like \"4:00am\"\n ListEventRenderer.prototype.computeEventTimeFormat = function () {\n return {\n hour: 'numeric',\n minute: '2-digit',\n meridiem: 'short'\n };\n };\n return ListEventRenderer;\n}(FgEventRenderer));\nexport default ListEventRenderer;\n","import * as tslib_1 from \"tslib\";\nimport { htmlToElement, createElement, htmlEscape, subtractInnerElHeight, View, ScrollComponent, addDays, startOfDay, createFormatter, intersectRanges, buildGotoAnchorHtml, sliceEventStore, memoize, memoizeRendering } from '@fullcalendar/core';\nimport ListEventRenderer from './ListEventRenderer';\n/*\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\n*/\nvar ListView = /** @class */ (function (_super) {\n tslib_1.__extends(ListView, _super);\n function ListView(viewSpec, parentEl) {\n var _this = _super.call(this, viewSpec, parentEl) || this;\n _this.computeDateVars = memoize(computeDateVars);\n _this.eventStoreToSegs = memoize(_this._eventStoreToSegs);\n _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);\n var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this);\n _this.renderContent = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]);\n return _this;\n }\n ListView.prototype.firstContext = function (context) {\n context.calendar.registerInteractiveComponent(this, {\n el: this.el\n // TODO: make aware that it doesn't do Hits\n });\n };\n ListView.prototype.render = function (props, context) {\n _super.prototype.render.call(this, props, context);\n var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges;\n this.dayDates = dayDates;\n this.renderSkeleton(context);\n this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges));\n };\n ListView.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderSkeleton.unrender();\n this.renderContent.unrender();\n this.context.calendar.unregisterInteractiveComponent(this);\n };\n ListView.prototype._renderSkeleton = function (context) {\n var theme = context.theme;\n this.el.classList.add('fc-list-view');\n var listViewClassNames = (theme.getClass('listView') || '').split(' '); // wish we didn't have to do this\n for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) {\n var listViewClassName = listViewClassNames_1[_i];\n if (listViewClassName) { // in case input was empty string\n this.el.classList.add(listViewClassName);\n }\n }\n this.scroller = new ScrollComponent('hidden', // overflow x\n 'auto' // overflow y\n );\n this.el.appendChild(this.scroller.el);\n this.contentEl = this.scroller.el; // shortcut\n };\n ListView.prototype._unrenderSkeleton = function () {\n // TODO: remove classNames\n this.scroller.destroy(); // will remove the Grid too\n };\n ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) {\n _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto);\n this.eventRenderer.computeSizes(isResize);\n this.eventRenderer.assignSizes(isResize);\n this.scroller.clear(); // sets height to 'auto' and clears overflow\n if (!isAuto) {\n this.scroller.setHeight(this.computeScrollerHeight(viewHeight));\n }\n };\n ListView.prototype.computeScrollerHeight = function (viewHeight) {\n return viewHeight -\n subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n };\n ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) {\n return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges);\n };\n ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) {\n var segs = [];\n for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {\n var eventRange = eventRanges_1[_i];\n segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges));\n }\n return segs;\n };\n ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) {\n var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold;\n var range = eventRange.range;\n var allDay = eventRange.def.allDay;\n var dayIndex;\n var segRange;\n var seg;\n var segs = [];\n for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\n segRange = intersectRanges(range, dayRanges[dayIndex]);\n if (segRange) {\n seg = {\n component: this,\n eventRange: eventRange,\n start: segRange.start,\n end: segRange.end,\n isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),\n isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),\n dayIndex: dayIndex\n };\n segs.push(seg);\n // detect when range won't go fully into the next day,\n // and mutate the latest seg to the be the end.\n if (!seg.isEnd && !allDay &&\n dayIndex + 1 < dayRanges.length &&\n range.end <\n dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {\n seg.end = range.end;\n seg.isEnd = true;\n break;\n }\n }\n }\n return segs;\n };\n ListView.prototype.renderEmptyMessage = function () {\n this.contentEl.innerHTML =\n '
' + // TODO: try less wraps\n '
' +\n '
' +\n htmlEscape(this.context.options.noEventsMessage) +\n '
' +\n '
' +\n '
';\n };\n // called by ListEventRenderer\n ListView.prototype.renderSegList = function (allSegs) {\n var theme = this.context.theme;\n var segsByDay = this.groupSegsByDay(allSegs); // sparse array\n var dayIndex;\n var daySegs;\n var i;\n var tableEl = htmlToElement('
');\n var tbodyEl = tableEl.querySelector('tbody');\n for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\n daySegs = segsByDay[dayIndex];\n if (daySegs) { // sparse array, so might be undefined\n // append a day header\n tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex]));\n daySegs = this.eventRenderer.sortEventSegs(daySegs);\n for (i = 0; i < daySegs.length; i++) {\n tbodyEl.appendChild(daySegs[i].el); // append event row\n }\n }\n }\n this.contentEl.innerHTML = '';\n this.contentEl.appendChild(tableEl);\n };\n // Returns a sparse array of arrays, segs grouped by their dayIndex\n ListView.prototype.groupSegsByDay = function (segs) {\n var segsByDay = []; // sparse array\n var i;\n var seg;\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\n .push(seg);\n }\n return segsByDay;\n };\n // generates the HTML for the day headers that live amongst the event rows\n ListView.prototype.buildDayHeaderRow = function (dayDate) {\n var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;\n var mainFormat = createFormatter(options.listDayFormat); // TODO: cache\n var altFormat = createFormatter(options.listDayAltFormat); // TODO: cache\n return createElement('tr', {\n className: 'fc-list-heading',\n 'data-date': dateEnv.formatIso(dayDate, { omitTime: true })\n }, '' +\n (mainFormat ?\n buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML\n ) :\n '') +\n (altFormat ?\n buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML\n ) :\n '') +\n '');\n };\n return ListView;\n}(View));\nexport default ListView;\nListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions\nfunction computeDateVars(dateProfile) {\n var dayStart = startOfDay(dateProfile.renderRange.start);\n var viewEnd = dateProfile.renderRange.end;\n var dayDates = [];\n var dayRanges = [];\n while (dayStart < viewEnd) {\n dayDates.push(dayStart);\n dayRanges.push({\n start: dayStart,\n end: addDays(dayStart, 1)\n });\n dayStart = addDays(dayStart, 1);\n }\n return { dayDates: dayDates, dayRanges: dayRanges };\n}\n","import { createPlugin } from '@fullcalendar/core';\nimport ListView from './ListView';\nexport { ListView };\nexport default createPlugin({\n views: {\n list: {\n class: ListView,\n buttonTextKey: 'list',\n listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like \"January 1, 2016\"\n },\n listDay: {\n type: 'list',\n duration: { days: 1 },\n listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header\n },\n listWeek: {\n type: 'list',\n duration: { weeks: 1 },\n listDayFormat: { weekday: 'long' },\n listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' }\n },\n listMonth: {\n type: 'list',\n duration: { month: 1 },\n listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have\n },\n listYear: {\n type: 'list',\n duration: { year: 1 },\n listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have\n }\n }\n});\n"],"names":["tslib_1.__extends"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/packages/list/main.min.css b/src/main/resources/static/packages/list/main.min.css new file mode 100644 index 00000000..18446f44 --- /dev/null +++ b/src/main/resources/static/packages/list/main.min.css @@ -0,0 +1 @@ +.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} \ No newline at end of file diff --git a/src/main/resources/static/packages/list/main.min.js b/src/main/resources/static/packages/list/main.min.js new file mode 100644 index 00000000..92dd8ab6 --- /dev/null +++ b/src/main/resources/static/packages/list/main.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar List View Plugin v4.4.0 +Docs & License: https://fullcalendar.io/ +(c) 2019 Adam Shaw +*/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarList={},e.FullCalendar)}(this,function(e,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var s=function(e){function n(t){var n=e.call(this)||this;return n.listView=t,n}return r(n,e),n.prototype.attachSegs=function(e){e.length?this.listView.renderSegList(e):this.listView.renderEmptyMessage()},n.prototype.detachSegs=function(){},n.prototype.renderSegHtml=function(e){var n,r=this.context,s=r.theme,o=r.options,i=e.eventRange,a=i.def,l=i.instance,d=i.ui,c=a.url,p=["fc-list-item"].concat(d.classNames),h=d.backgroundColor;return n=a.allDay?t.getAllDayHtml(o):t.isMultiDayRange(i.range)?e.isStart?t.htmlEscape(this._getTimeText(l.range.start,e.end,!1)):e.isEnd?t.htmlEscape(this._getTimeText(e.start,l.range.end,!1)):t.getAllDayHtml(o):t.htmlEscape(this.getTimeText(i)),c&&p.push("fc-has-url"),''+(this.displayEventTime?''+(n||"")+"":"")+'"+t.htmlEscape(a.title||"")+""},n.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},n}(t.FgEventRenderer),o=function(e){function n(n,r){var o=e.call(this,n,r)||this;o.computeDateVars=t.memoize(i),o.eventStoreToSegs=t.memoize(o._eventStoreToSegs),o.renderSkeleton=t.memoizeRendering(o._renderSkeleton,o._unrenderSkeleton);var a=o.eventRenderer=new s(o);return o.renderContent=t.memoizeRendering(a.renderSegs.bind(a),a.unrender.bind(a),[o.renderSkeleton]),o}return r(n,e),n.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.el})},n.prototype.render=function(t,n){e.prototype.render.call(this,t,n);var r=this.computeDateVars(t.dateProfile),s=r.dayDates,o=r.dayRanges;this.dayDates=s,this.renderSkeleton(n),this.renderContent(n,this.eventStoreToSegs(t.eventStore,t.eventUiBases,o))},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender(),this.renderContent.unrender(),this.context.calendar.unregisterInteractiveComponent(this)},n.prototype._renderSkeleton=function(e){var n=e.theme;this.el.classList.add("fc-list-view");for(var r=0,s=(n.getClass("listView")||"").split(" ");r
'+t.htmlEscape(this.context.options.noEventsMessage)+"
"},n.prototype.renderSegList=function(e){var n,r,s,o=this.context.theme,i=this.groupSegsByDay(e),a=t.htmlToElement('
'),l=a.querySelector("tbody");for(n=0;n'+(i?t.buildGotoAnchorHtml(o,s,e,{class:"fc-list-heading-main"},t.htmlEscape(s.format(e,i))):"")+(a?t.buildGotoAnchorHtml(o,s,e,{class:"fc-list-heading-alt"},t.htmlEscape(s.format(e,a))):"")+"")},n}(t.View);function i(e){for(var n=t.startOfDay(e.renderRange.start),r=e.renderRange.end,s=[],o=[];n
+ + +

선호하는 이름

+ +

비밀번호

+

임시 로그인 코드를 사용하고 싶지 않으면 비밀번호를 설정할 수 있습니다.

+
+

위험 구역

+ +
+
+ + + \ No newline at end of file From 873e20f1c2ced0511e2383bfacb91c136b0bee33 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 27 Apr 2023 12:55:56 +0900 Subject: [PATCH 180/895] =?UTF-8?q?[FEAT]MemberController=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index f695831c..a40117ad 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -14,11 +14,18 @@ import com.effourt.calenkit.service.MyPageService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.List; @Slf4j @@ -179,6 +186,40 @@ public String AdminDelete(@ModelAttribute Member member) throws MemberNotFoundEx } /** 마이 페이지 */ + + //MyPage 이동 + @GetMapping(value = "/myPage") + public String MyPage() { + return "myPage"; + } + + //파일 upload 기본 틀 + @PostMapping("/upload") + public String upload(@RequestParam("file") MultipartFile file, Model model, @ModelAttribute Member member) throws IOException { + if (file.isEmpty()) { + return "member/upload_fail"; + } + + String originalFilename = file.getOriginalFilename(); + String extension = FilenameUtils.getExtension(originalFilename); + String uploadFilename = FilenameUtils.getBaseName(originalFilename) + "_" + System.currentTimeMillis() + "." + extension; + String uploadDirectory = "/resources/images/member/"; + + Path uploadPath = Paths.get(uploadDirectory); + if (!Files.exists(uploadPath)) { + Files.createDirectories(uploadPath); + } + + Path filePath = uploadPath.resolve(uploadFilename); + Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); + + model.addAttribute("originalFilename", originalFilename); + model.addAttribute("uploadFilename", uploadFilename); + + return ""; + } + + // MyPage // 멤버 닉네임 검색 후 중복 확인(GET) // Ajax 처리를 위해 닉네임 값 반환 From d319b8817a449bb3d22204271b23ca597302fe14 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 27 Apr 2023 12:56:44 +0900 Subject: [PATCH 181/895] =?UTF-8?q?[FEAT]admin.html=20Ajax=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/admin.html | 28 +++++++++++++++---------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html index 2ed7a2ba..66ba3ceb 100644 --- a/src/main/resources/templates/admin.html +++ b/src/main/resources/templates/admin.html @@ -1,5 +1,4 @@ - 관리자 페이지 @@ -7,6 +6,10 @@ + + + +

알람리스트 출력 확인용

-
+
  1. ${alarm.alNo} = [[${alarm.alNo}]]
  2. ${alarm.alTime} = [[${alarm.alTime}]]
  3. @@ -23,6 +23,6 @@

    알람리스트 출력 확인용

-
+ \ No newline at end of file From 54efcb7eb5f92a7a73d07bd153b51b2cade07f36 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Fri, 28 Apr 2023 14:26:22 +0900 Subject: [PATCH 246/895] =?UTF-8?q?[ETC]=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/{library/bootstrap => }/css/login-form-style.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/static/{library/bootstrap => }/css/login-form-style.css (100%) diff --git a/src/main/resources/static/library/bootstrap/css/login-form-style.css b/src/main/resources/static/css/login-form-style.css similarity index 100% rename from src/main/resources/static/library/bootstrap/css/login-form-style.css rename to src/main/resources/static/css/login-form-style.css From 8a453a4113f1e59c2170158cfce92fbe095b3784 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Fri, 28 Apr 2023 14:26:47 +0900 Subject: [PATCH 247/895] =?UTF-8?q?[ETC]=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20link?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/login.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 1b2b02bc..313b964d 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -5,7 +5,7 @@ Calenkit - + From 6da49aa8fadf973894d63fdc7f7d49768e05a692 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 29 Apr 2023 20:20:57 +0900 Subject: [PATCH 248/895] =?UTF-8?q?[FEAT]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8/?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EB=A7=8C=EB=93=A4=EC=96=B4?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=EC=84=B8=EC=85=98Key=EB=A1=9C=20UUID?= =?UTF-8?q?=EA=B0=80=20=EC=A0=80=EC=9E=A5=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/util/EmailSend.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/util/EmailSend.java b/src/main/java/com/effourt/calenkit/util/EmailSend.java index cfcd88da..d1031d40 100644 --- a/src/main/java/com/effourt/calenkit/util/EmailSend.java +++ b/src/main/java/com/effourt/calenkit/util/EmailSend.java @@ -40,6 +40,8 @@ public void sendMail(EmailMessage emailMessage) { } //로그인/회원가입 코드 생성 + //세션명 : loginCode + //세션 Value : ${id}ACCESS public String createAccessCode(String id, HttpSession session) { String accessCode = UUID.randomUUID().toString(); session.setAttribute(accessCode, id + "ACCESS"); From 75fdc161db6dfce18d699f3ab6e435e405da3ce7 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 29 Apr 2023 20:23:21 +0900 Subject: [PATCH 249/895] =?UTF-8?q?[FEAT]=20=EC=95=84=EC=9D=B4=EB=94=94,?= =?UTF-8?q?=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EC=A1=B4=EC=9E=AC=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=20=EC=B2=B4=ED=81=AC=20=EC=A4=91=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=BD=94=EB=93=9C=EB=A5=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=A9=94=EC=9D=BC=EB=A1=9C=20=EC=A0=84=EC=86=A1=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EA=B3=A0,=20=EC=B2=B4=ED=81=AC=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=ED=9B=84=EC=97=90=20ajax=EB=A1=9C=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/login.html | 98 ++++++++++++++++--------- 1 file changed, 62 insertions(+), 36 deletions(-) diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 313b964d..ed74f86a 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -5,7 +5,7 @@ Calenkit - + @@ -20,39 +20,37 @@
-

Log In

-
- - - +

로그인

+
+
- +
-
@@ -65,7 +63,7 @@

Log In

- + \ No newline at end of file From dd5520c7fb2a541d4cbb909d9cd0f7b8be317bd1 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 29 Apr 2023 20:23:43 +0900 Subject: [PATCH 250/895] =?UTF-8?q?[STYLE]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=ED=8F=BC=20=EB=B0=B0=EA=B2=BD=EC=83=89=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/css/login-form-style.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/static/css/login-form-style.css b/src/main/resources/static/css/login-form-style.css index 01839c18..540c6033 100644 --- a/src/main/resources/static/css/login-form-style.css +++ b/src/main/resources/static/css/login-form-style.css @@ -9,8 +9,8 @@ body{ font-weight: 300; font-size: 15px; line-height: 1.7; - color: #c4c3ca; - background-color: #1f2029; + color: #000000; + background-color: #fffff0; overflow-x: hidden; } a { @@ -112,7 +112,7 @@ h6 span{ .card-front, .card-back { width: 100%; height: 100%; - background-color: #2a2b38; + background-color: #e6dbb9; background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/1462889/pat.svg'); background-position: bottom center; background-repeat: no-repeat; @@ -164,7 +164,7 @@ h6 span{ letter-spacing: 0.5px; outline: none; color: #c4c3ca; - background-color: #1f2029; + background-color: #ffffff; border: none; -webkit-transition: all 200ms linear; transition: all 200ms linear; From 6af49d029798905e96d5800b8b09049038659f62 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 29 Apr 2023 20:24:49 +0900 Subject: [PATCH 251/895] =?UTF-8?q?[ETC]=20=EC=97=90=EB=9F=AC=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=20=EC=A7=80=EC=A0=90=20=EC=A3=BC=EC=84=9D=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/main.html | 50 +++++++++++++------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html index 0d10a4c3..37bcac73 100644 --- a/src/main/resources/templates/main.html +++ b/src/main/resources/templates/main.html @@ -16,24 +16,24 @@ @@ -21,30 +22,28 @@
-

Log In

-
+

회원가입

+
- - +
- +
- +
- +
- +
-

Forgot your password?

@@ -57,6 +56,14 @@

Log In

- + + + \ No newline at end of file From 3a6c635dbd9d89fdf393ac9f4efd1f4663571332 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 29 Apr 2023 20:26:26 +0900 Subject: [PATCH 253/895] =?UTF-8?q?[DOCS]=20=EC=9C=A0=EC=A0=80=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EC=B2=B4=ED=81=AC=EC=9A=A9=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=EC=85=89=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/interceptor/UserAuthInterceptor.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java diff --git a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java new file mode 100644 index 00000000..c53a98d0 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.util.interceptor; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@Slf4j +public class UserAuthInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + return HandlerInterceptor.super.preHandle(request, response, handler); + } +} From 33fb5865c4bd8f34c73a87fed82c2fb36ced30b2 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 29 Apr 2023 20:26:59 +0900 Subject: [PATCH 254/895] =?UTF-8?q?[FEAT]=20=EC=95=84=EC=9D=B4=EB=94=94,?= =?UTF-8?q?=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EC=B2=B4=ED=81=AC=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8/=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EC=BD=94=EB=93=9C=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=EC=A0=84=EC=86=A1=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 71 ++++++++++--------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 74526fe9..8ecc9354 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -2,34 +2,25 @@ import com.effourt.calenkit.domain.Auth; import com.effourt.calenkit.domain.Member; -import com.effourt.calenkit.dto.AuthUserInfoResponse; -import com.effourt.calenkit.dto.EmailMessage; import com.effourt.calenkit.dto.AccessTokenRequest; import com.effourt.calenkit.dto.AccessTokenResponse; -import com.effourt.calenkit.exception.MemberNotFoundException; +import com.effourt.calenkit.dto.AuthUserInfoResponse; +import com.effourt.calenkit.dto.EmailMessage; import com.effourt.calenkit.repository.AuthRepository; import com.effourt.calenkit.repository.MemberRepository; -import com.effourt.calenkit.service.AdminService; import com.effourt.calenkit.service.JoinService; import com.effourt.calenkit.service.LoginService; -import com.effourt.calenkit.service.MyPageService; import com.effourt.calenkit.util.EmailSend; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.FilenameUtils; import org.springframework.context.MessageSource; +import org.springframework.http.HttpEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpSession; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.List; +import java.util.Map; @Slf4j @Controller @@ -51,36 +42,46 @@ public class MemberController { * 아이디 존재 O, 비밀번호 O : PASSWORD_LOGIN * 아이디 존재 O, 비밀번호 X : CODE_LOGIN * 아이디 존재 X, 비밀번호 X : JOIN_LOGIN - * @param memId - * @param session + * @param idMap * @return */ - @PostMapping("/login/check") @ResponseBody - public String checkId(@RequestBody String memId, HttpSession session) { + @PostMapping("/login/check") + public String checkId(@RequestBody Map idMap) { + String memId = idMap.get("id"); String loginType = loginService.checkMember(memId); log.info("loginType={}", loginType); //코드로 로그인하거나 회원가입 후 로그인할 때, 랜덤 코드를 이메일로 전송 if (loginType.equals("CODE_LOGIN") || loginType.equals("JOIN_LOGIN")) { - String subject = ms.getMessage("mail.login-code.subject", null, null); - String message = ms.getMessage( - "mail.login-code.message", - new Object[]{emailSend.createAccessCode(memId, session)}, - null); - - EmailMessage emailMessage = EmailMessage.builder() - .recipient(memId) - .subject(subject) - .message(message) - .build(); - - log.info("email id={}", memId); - log.info("subject={}", subject); - log.info("message={}", message); + } return loginType; } + @PostMapping("/login/send-code") + @ResponseBody + public String sendCode(@RequestBody Map idMap, HttpSession session) { + String memId = idMap.get("id"); + String subject = ms.getMessage("mail.login-code.subject", null, null); + String message = ms.getMessage( + "mail.login-code.message", + new Object[]{emailSend.createAccessCode(memId, session)}, + null); + + EmailMessage emailMessage = EmailMessage.builder() + .recipient(memId) + .subject(subject) + .message(message) + .build(); + //이메일 전송 + emailSend.sendMail(emailMessage); + + log.info("email id={}", memId); + log.info("subject={}", subject); + log.info("message={}", message); + return "ok"; + } + /** * 로그인창으로 이동 @@ -124,14 +125,14 @@ public String loginByCode(String memId, String loginCode, HttpSession session) { /** * 회원가입 코드로 회원가입 후 이메일 로그인 * @param memId - * @param code + * @param registerCode * @param session * @param model * @return */ @PostMapping("/login/register-code") - public String loginByJoin(String memId, String code, HttpSession session, Model model) { - String joinCode = (String) session.getAttribute(code); + public String loginByJoin(String memId, String registerCode, HttpSession session, Model model) { + String joinCode = (String) session.getAttribute(registerCode); if (joinCode.equals(memId + "ACCESS")) { model.addAttribute("memId", memId); } From 31a72888271028cf0186eea376cc2897a5b19d9d Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 00:46:40 +0900 Subject: [PATCH 255/895] =?UTF-8?q?[FEAT]=20=EA=B0=9C=EC=9D=B8=EC=95=8C?= =?UTF-8?q?=EB=9E=8C=20=EB=A6=AC=EC=86=8C=EC=8A=A4=EB=A5=BC=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=9A=94=EC=B2=AD=EC=B2=98=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/AlarmController.java | 98 +++++++++---------- 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/AlarmController.java b/src/main/java/com/effourt/calenkit/controller/AlarmController.java index 8e1d9da3..065d0b31 100644 --- a/src/main/java/com/effourt/calenkit/controller/AlarmController.java +++ b/src/main/java/com/effourt/calenkit/controller/AlarmController.java @@ -7,15 +7,13 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; +import java.util.ArrayList; import java.util.List; -// return : redirect 이동 혹은 객체로 응답할 예정 @Controller @RequiredArgsConstructor @RequestMapping("/alarms") @@ -24,61 +22,59 @@ public class AlarmController { private final AlarmRepository alarmRepository; private final ScheduleRepository scheduleRepository; private final AlarmService alarmService; - //private final MyScheduleService myScheduleService; - //개인알람리스트 조회 - //권한처리(로그인한 회원만 요청 가능) - //[GET] : http://localhost:8080/alarms - -// @GetMapping - public String a(){ - // - return "teamPopup"; - } - - //알람 -// @PostMapping - //[POST] : http://localhost:8080/alarms - public String b(){ - return "teamPopup"; - } -// @GetMapping - public String c() { - return "teamPopup"; - } - /* - @GetMapping("") - public String showMyAlarmList(Model model){ - String loginId = "member"; - List alarmList = alarmRepository.findByAlMid(loginId); - model.addAttribute("alarmList", alarmList); - return "test"; - } - */ - /* - @GetMapping("") - public String showAlarmList(HttpSession session, Model model){ + /** + * 개인알람 리소스를 리스트로 조회 + * @param alMid + * @return + */ + // http://localhost:8080/alarms/{alMid} + @GetMapping("/{alMid}") + @ResponseBody + public List showMyAlarmList(@PathVariable String alMid, HttpSession session){ String loginId = (String)session.getAttribute("loginId"); - List alarmList = alarmRepository.findByAlMid(loginId); - model.addAttribute("alarmList", alarmList); - return "test"; + //String loginId = "member"; + List alarmList = new ArrayList<>(); + if(loginId.equals(alMid)){ + alarmList = alarmRepository.findByAlMid(loginId); + return alarmList; + } else { + return null; + } } + /* + [ + { + "alNo": 1, + "alScno": 1, + "alMid": "member", + "alStatus": 1, + "alTime": "2023-04-27", + "alCate": 1 + }, + { + "alNo": 111, + "alScno": 1, + "alMid": "member", + "alStatus": 1, + "alTime": "2023-04-27", + "alCate": 1 + } + ] */ + /** + * 일정 수정 일어날 시 알람 리소스 추가 + * @return + */ /* - //리다이렉트해서 여기서 요청 처리될 수 있도록 만들 것임 (일정 삭제 or 일정 수정) - //권한처리(로그인한 회원만 요청 가능) - @RequestMapping ("/add/") - public String AddAlarmBySchedule(Integer scNo){ - if(scheduleRepository.findByScNo(scNo).getScStatus()==0){ //일정 삭제 시 - alarmService.addAlarmDeleteSchedule(scNo); - } else { //일정 수정 시 - alarmService.addAlarmByModifySchedule(scNo); - } - return "test"; + // http://localhost:8080/alarms?scNo=1 + @GetMapping("/") + @ResponseBody + public String addAlarms(@RequestParam int scNo) { + } */ - //1. 일정 수정 >> 비동기로 스케줄테이블 수정 처리하는 요청 처리 메소드 PATCH //2. 일정 수정 >> 동행에게 알람을 울리기 위한 요청 처리 메소드 From 555289d039f67eb243b3920785a3ee643eab4a7e Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 00:47:35 +0900 Subject: [PATCH 256/895] =?UTF-8?q?[DOCS]=20=EB=A9=94=EB=AA=A8=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/resources/templates/detail.html diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html new file mode 100644 index 00000000..f0ac10a5 --- /dev/null +++ b/src/main/resources/templates/detail.html @@ -0,0 +1,32 @@ + + + + + CKEditor + + + + +

메모장

+
+ +

+
+ + + + + + \ No newline at end of file From b94e64f2ef3c761ad65ad52c0f90baed747b9a4f Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sun, 30 Apr 2023 10:05:15 +0900 Subject: [PATCH 257/895] =?UTF-8?q?[DOCS]=20=EC=9D=B8=ED=84=B0=EC=85=89?= =?UTF-8?q?=ED=84=B0=20=EC=84=A4=EC=A0=95=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/config/InterceptorConfig.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/config/InterceptorConfig.java diff --git a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java new file mode 100644 index 00000000..fcf4be3c --- /dev/null +++ b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java @@ -0,0 +1,18 @@ +package com.effourt.calenkit.config; + +import com.effourt.calenkit.util.interceptor.UserAuthInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new UserAuthInterceptor()) + .order(1) + .addPathPatterns("") + .excludePathPatterns(""); + } +} From 3a57cf611316e7fe69257d6c9d8124f126513c3d Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sun, 30 Apr 2023 10:14:20 +0900 Subject: [PATCH 258/895] =?UTF-8?q?[FEAT]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=EC=85=89=ED=84=B0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/util/interceptor/UserAuthInterceptor.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java index c53a98d0..5be1341c 100644 --- a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java +++ b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java @@ -5,12 +5,19 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; @Slf4j public class UserAuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - return HandlerInterceptor.super.preHandle(request, response, handler); + HttpSession session = request.getSession(); + String loginId = (String) session.getAttribute("loginId"); + log.info("UserAuthInterceptor loginId={}", loginId); + if (loginId == null) { + response.sendRedirect(request.getContextPath() + "/login/form"); + } + return true; } } From 198af88a15ebe7e57a8be34ffaa8b19681ee523e Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sun, 30 Apr 2023 10:15:09 +0900 Subject: [PATCH 259/895] =?UTF-8?q?[DOCS]=20UserAuthInterceptor.java?= =?UTF-8?q?=EB=A5=BC=20LoginInterceptor.java=EB=A1=9C=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/config/InterceptorConfig.java | 4 ++-- .../{UserAuthInterceptor.java => LoginInterceptor.java} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/com/effourt/calenkit/util/interceptor/{UserAuthInterceptor.java => LoginInterceptor.java} (91%) diff --git a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java index fcf4be3c..c66abfb6 100644 --- a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java +++ b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java @@ -1,6 +1,6 @@ package com.effourt.calenkit.config; -import com.effourt.calenkit.util.interceptor.UserAuthInterceptor; +import com.effourt.calenkit.util.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -10,7 +10,7 @@ public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new UserAuthInterceptor()) + registry.addInterceptor(new LoginInterceptor()) .order(1) .addPathPatterns("") .excludePathPatterns(""); diff --git a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java b/src/main/java/com/effourt/calenkit/util/interceptor/LoginInterceptor.java similarity index 91% rename from src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java rename to src/main/java/com/effourt/calenkit/util/interceptor/LoginInterceptor.java index 5be1341c..41c57f3e 100644 --- a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java +++ b/src/main/java/com/effourt/calenkit/util/interceptor/LoginInterceptor.java @@ -8,7 +8,7 @@ import javax.servlet.http.HttpSession; @Slf4j -public class UserAuthInterceptor implements HandlerInterceptor { +public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { From 0151ed88c9706e1cf62d1e4579ed929c2eab6b53 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 11:19:15 +0900 Subject: [PATCH 260/895] =?UTF-8?q?[FEAT]=20homecontroller=EC=97=90=20test?= =?UTF-8?q?=20=EC=9A=94=EC=B2=AD=EC=B2=98=EB=A6=AC=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=ED=95=B4=EB=91=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/HomeController.java | 59 +++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/HomeController.java b/src/main/java/com/effourt/calenkit/controller/HomeController.java index 561b4399..5ec23b52 100644 --- a/src/main/java/com/effourt/calenkit/controller/HomeController.java +++ b/src/main/java/com/effourt/calenkit/controller/HomeController.java @@ -1,14 +1,65 @@ package com.effourt.calenkit.controller; +import com.effourt.calenkit.domain.Alarm; +import com.effourt.calenkit.domain.Team; +import com.effourt.calenkit.repository.AlarmRepository; +import com.effourt.calenkit.repository.ScheduleRepository; +import com.effourt.calenkit.repository.TeamRepository; +import com.effourt.calenkit.service.AlarmService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpSession; +import java.util.ArrayList; +import java.util.List; @Controller +@RequiredArgsConstructor public class HomeController { + private final AlarmRepository alarmRepository; + private final TeamRepository teamRepository; + //private final MyScheduleService myScheduleService; + + + // => 권한처리 (로그인한 회원만 요청 가능한 요청처리메소드) + // http://localhost:8080/hihi + @GetMapping("/hihi") + public String main( HttpSession session, Model model){ + + model.addAttribute("testTitle", "일정제목"); + + //세션에서 로그인아이디 반환받아 저장 + //String loginId = (String)session.getAttribute("loginId"); + String loginId = "member"; - //http://localhost:8080/ - /* @GetMapping("/") - public String home(){ + //개인 알람리스트 조회 + List alarmList = alarmRepository.findByAlMid(loginId); + if(alarmList.size()!=0){ + model.addAttribute("alarmList", alarmList); + } + + //개인 스케줄리스트 조회 +// List teamList = teamRepository.findByMid(loginId); +// if(teamList.size()!=0){ +// model.addAttribute("teamList", teamList); +// } + + //개인 북마크한 스케줄리스트 조회 +// List bookmarkList = new ArrayList<>(); +// for (Team team : teamList) { +// if (team.getTeamBookmark().equals(1)) { +// bookmarkList.add(team); +// } +// } +// if(teamList.size()!=0) { +// model.addAttribute("bookmarkList", bookmarkList); +// } return "main"; - }*/ + } + + + } From 475f6264cbcdd1e1665e3ee07a0da86040472828 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Fri, 28 Apr 2023 19:25:46 +0900 Subject: [PATCH 261/895] =?UTF-8?q?[TEST]=EC=82=AC=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=EB=B0=94=20=EC=9E=84=EC=8B=9C=20=EB=B9=84=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/layout.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/layout.html b/src/main/resources/templates/layout.html index 2c113856..aa485246 100644 --- a/src/main/resources/templates/layout.html +++ b/src/main/resources/templates/layout.html @@ -17,9 +17,9 @@
-
+ + + +
+ + + + + + + + + + + + \ No newline at end of file From 731b4ca8c1e0de597a8722b6ad3c15d9cf7d32d7 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 11:21:37 +0900 Subject: [PATCH 278/895] =?UTF-8?q?[DOCS]=20test.html=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/test.html | 28 -------------------------- 1 file changed, 28 deletions(-) delete mode 100644 src/main/resources/templates/test.html diff --git a/src/main/resources/templates/test.html b/src/main/resources/templates/test.html deleted file mode 100644 index 960f612b..00000000 --- a/src/main/resources/templates/test.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - 테스트 페이지 - - - - -

알람리스트 출력 확인용

-
-
    -
  1. ${alarm.alNo} = [[${alarm.alNo}]]
  2. -
  3. ${alarm.alTime} = [[${alarm.alTime}]]
  4. -
  5. ${alarm.alStatus} = [[${alarm.alStatus}]]
  6. -
  7. ${alarm.alScno} = [[${alarm.alScno}]]
  8. -
  9. ${alarm.alMid} = [[${alarm.alMid}]]
  10. -
  11. ${alarm.alCate} = [[${alarm.alCate}]]
  12. -
  13. - - - - -
  14. -
-
- - \ No newline at end of file From 0ac7e034356491c30aa0ecd9b62f9c9a52a41387 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 11:22:12 +0900 Subject: [PATCH 279/895] =?UTF-8?q?[DESIGN]=20bootstrap=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/layout.html | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/resources/templates/layout.html b/src/main/resources/templates/layout.html index 2c113856..3252fc44 100644 --- a/src/main/resources/templates/layout.html +++ b/src/main/resources/templates/layout.html @@ -4,26 +4,23 @@ - - - - - + + +
-
- \ No newline at end of file From 716a166211ba97b22cb02fca24a962917060c21e Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 11:23:49 +0900 Subject: [PATCH 280/895] =?UTF-8?q?[DESIGN]=20style=20=ED=83=9C=EA=B7=B8?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/member/myPage.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/templates/member/myPage.html b/src/main/resources/templates/member/myPage.html index 99e8136d..c45a46ca 100644 --- a/src/main/resources/templates/member/myPage.html +++ b/src/main/resources/templates/member/myPage.html @@ -7,6 +7,7 @@ + From 4b585ce1b0b0a9a89af337c0ca68243e2a7fe318 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 11:58:37 +0900 Subject: [PATCH 281/895] =?UTF-8?q?[FEAT]=20controller=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/AlarmController.java | 4 +-- .../calenkit/controller/HomeController.java | 26 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/AlarmController.java b/src/main/java/com/effourt/calenkit/controller/AlarmController.java index 065d0b31..dfcf18d9 100644 --- a/src/main/java/com/effourt/calenkit/controller/AlarmController.java +++ b/src/main/java/com/effourt/calenkit/controller/AlarmController.java @@ -32,8 +32,8 @@ public class AlarmController { @GetMapping("/{alMid}") @ResponseBody public List showMyAlarmList(@PathVariable String alMid, HttpSession session){ - String loginId = (String)session.getAttribute("loginId"); - //String loginId = "member"; + //String loginId = (String)session.getAttribute("loginId"); + String loginId = "member"; List alarmList = new ArrayList<>(); if(loginId.equals(alMid)){ alarmList = alarmRepository.findByAlMid(loginId); diff --git a/src/main/java/com/effourt/calenkit/controller/HomeController.java b/src/main/java/com/effourt/calenkit/controller/HomeController.java index 5ec23b52..add29dfd 100644 --- a/src/main/java/com/effourt/calenkit/controller/HomeController.java +++ b/src/main/java/com/effourt/calenkit/controller/HomeController.java @@ -42,21 +42,21 @@ public String main( HttpSession session, Model model){ } //개인 스케줄리스트 조회 -// List teamList = teamRepository.findByMid(loginId); -// if(teamList.size()!=0){ -// model.addAttribute("teamList", teamList); -// } + List teamList = teamRepository.findByMid(loginId); + if(teamList.size()!=0){ + model.addAttribute("teamList", teamList); + } //개인 북마크한 스케줄리스트 조회 -// List bookmarkList = new ArrayList<>(); -// for (Team team : teamList) { -// if (team.getTeamBookmark().equals(1)) { -// bookmarkList.add(team); -// } -// } -// if(teamList.size()!=0) { -// model.addAttribute("bookmarkList", bookmarkList); -// } + List bookmarkList = new ArrayList<>(); + if(teamList.size()!=0){ + for (Team team : teamList) { + if (team.getTeamBookmark()==1) { + bookmarkList.add(team); + } + } + model.addAttribute("bookmarkList", bookmarkList); + } return "main"; } From e91765639740dd906d47e01291a424dfa5755554 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 12:00:38 +0900 Subject: [PATCH 282/895] =?UTF-8?q?[FEAT]=20stlye=20=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/main.html | 27 ++++++-------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html index 0d10a4c3..a47645eb 100644 --- a/src/main/resources/templates/main.html +++ b/src/main/resources/templates/main.html @@ -72,34 +72,19 @@ calendar.render(); }); - - From ef6faf69d22a9682771a51acd5c88b0962052ebb Mon Sep 17 00:00:00 2001 From: jaeheela Date: Sun, 30 Apr 2023 12:00:57 +0900 Subject: [PATCH 283/895] =?UTF-8?q?[FEAT]=20login=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 56efb0d6..bf57166f 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -68,9 +68,7 @@

cat

휴지통
- - - + 로그아웃
From 5cdf25697850d52b685321ed023823637ca3b808 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sun, 30 Apr 2023 12:01:57 +0900 Subject: [PATCH 284/895] =?UTF-8?q?[FEAT]=20=EC=95=84=EC=9D=B4=EB=94=94,?= =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EC=A1=B4=EC=9E=AC=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=20=EC=B2=B4=ED=81=AC=20=EC=8B=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8/=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EC=9D=98=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=A0=84=EC=86=A1=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/controller/MemberController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 8ecc9354..eb3ab2ec 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -51,10 +51,7 @@ public String checkId(@RequestBody Map idMap) { String memId = idMap.get("id"); String loginType = loginService.checkMember(memId); log.info("loginType={}", loginType); - //코드로 로그인하거나 회원가입 후 로그인할 때, 랜덤 코드를 이메일로 전송 - if (loginType.equals("CODE_LOGIN") || loginType.equals("JOIN_LOGIN")) { - } return loginType; } From 743089b028404c03d195d94da2892e3395c91fb4 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:08:40 +0900 Subject: [PATCH 285/895] =?UTF-8?q?[FEAT]application.properties=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=ED=81=AC=EA=B8=B0=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d5aee64c..2ee3662e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,6 +6,9 @@ spring.datasource.password=zofflszlt mybatis.type-aliases-package=com.effourt.calenkit.domain, com.effourt.calenkit.dto mybatis.configuration.map-underscore-to-camel-case=true +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB + #Google SMTP 설정 spring.mail.host=smtp.gmail.com spring.mail.post=587 From 93c8d31814d37ac5219c6404b6ff1fb071f4961f Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:09:26 +0900 Subject: [PATCH 286/895] =?UTF-8?q?[FEAT]MemberController2=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController2.java | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController2.java b/src/main/java/com/effourt/calenkit/controller/MemberController2.java index 8384c2c7..07c00493 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController2.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController2.java @@ -5,13 +5,20 @@ import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.service.AdminService; import com.effourt.calenkit.service.MyPageService; +import com.effourt.calenkit.util.ImageUpload; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpSession; +import java.awt.*; +import java.io.IOException; import java.util.List; @Slf4j @@ -21,6 +28,7 @@ public class MemberController2 { private final MyPageService myPageService; private final AdminService adminService; private final MemberRepository memberRepository; + private final ImageUpload imageUploadService; /** 관리자 */ // Admin @@ -74,33 +82,23 @@ public String MyPageDelete() { public String MyPageModify() { return "member/myPageModify"; } -// //파일 upload 기본 틀 -// @PostMapping("/upload") -// public String upload(@RequestParam("file") MultipartFile file, Model model, @ModelAttribute Member member) throws IOException { -// if (file.isEmpty()) { -// return "member/upload_fail"; -// } -// -// String originalFilename = file.getOriginalFilename(); -// String extension = FilenameUtils.getExtension(originalFilename); -// String uploadFilename = FilenameUtils.getBaseName(originalFilename) + "_" + System.currentTimeMillis() + "." + extension; -// String uploadDirectory = "/resources/images/member/"; -// -// Path uploadPath = Paths.get(uploadDirectory); -// if (!Files.exists(uploadPath)) { -// Files.createDirectories(uploadPath); -// } -// -// Path filePath = uploadPath.resolve(uploadFilename); -// Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); -// -// model.addAttribute("originalFilename", originalFilename); -// model.addAttribute("uploadFilename", uploadFilename); -// -// return ""; -// } + @PostMapping("/myPage_modify") + public ResponseEntity saveMember(@RequestParam("memImage") MultipartFile memImage,HttpSession session) throws IOException, MemberNotFoundException { + //Member loginMember=(Member)session.getAttribute("loginMember"); + Member loginMember=memberRepository.findByMemId("member"); + + // 이미지 업로드 후 파일명 반환 + String uploadfilename = imageUploadService.uploadImage(memImage); + loginMember.setMemImage(uploadfilename); + //loginMember.setMemName(memName); + + // Member 객체를 인자로 받는 modifyMe() 메소드 호출 + myPageService.modifyMe(loginMember); + + return new ResponseEntity<>(HttpStatus.CREATED); + } // MyPage From e39e7c71e1efff1758a8686b2138a42e4b003c9a Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:10:20 +0900 Subject: [PATCH 287/895] =?UTF-8?q?[FEAT]UPDATE=20SYSDATE=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/com/effourt/calenkit/mapper/MemberMapper.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml index 8992fd63..8418848b 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml @@ -33,9 +33,6 @@ MEM_STATUS=#{memStatus}, - - MEM_LOGIN=SYSDATE, - MEM_AUTH_ID=#{memAuthId} From ad8d3083478d044e53b8496ff132a425b39adc2c Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:11:52 +0900 Subject: [PATCH 288/895] =?UTF-8?q?[ETC]=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/service/MyPageService.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/MyPageService.java b/src/main/java/com/effourt/calenkit/service/MyPageService.java index 0437f854..2e74e906 100644 --- a/src/main/java/com/effourt/calenkit/service/MyPageService.java +++ b/src/main/java/com/effourt/calenkit/service/MyPageService.java @@ -23,17 +23,17 @@ public void modifyMe(Member member) throws MemberNotFoundException { if(memberRepository.findByMemId(member.getMemId())==null) { throw new MemberNotFoundException("아이디의 회원정보가 존재하지 않습니다."); } - //전달받은 회원정보의 비밀번호가 존재할 경우 암호화된 비밀번호로 필드값 변경 - if(member.getMemPw()!=null && !member.getMemPw().equals("")) { - member.setMemPw(BCrypt.hashpw(member.getMemPw(),BCrypt.gensalt())); - } +// //전달받은 회원정보의 비밀번호가 존재할 경우 암호화된 비밀번호로 필드값 변경 +// if(member.getMemPw()!=null && !member.getMemPw().equals("")) { +// member.setMemPw(BCrypt.hashpw(member.getMemPw(),BCrypt.gensalt())); +// } //전달받은 회원정보의 프로필이 존재할 경우 필드값 변경 if(member.getMemImage()!=null && !member.getMemImage().equals("")){ member.setMemImage(member.getMemImage()); } - member.setMemName(member.getMemName()); - member.setMemStatus(member.getMemStatus()); - member.setMemAuthId(member.getMemAuthId()); +// member.setMemName(member.getMemName()); +// member.setMemStatus(member.getMemStatus()); +// member.setMemAuthId(member.getMemAuthId()); memberRepository.update(member); } From c20e9558205d35d879dabd6e0da540e12af8d6a1 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:27:15 +0900 Subject: [PATCH 289/895] =?UTF-8?q?[FEAT]=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20UUID=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/util/ImageUpload.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/util/ImageUpload.java diff --git a/src/main/java/com/effourt/calenkit/util/ImageUpload.java b/src/main/java/com/effourt/calenkit/util/ImageUpload.java new file mode 100644 index 00000000..4bd11411 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/util/ImageUpload.java @@ -0,0 +1,28 @@ +package com.effourt.calenkit.util; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.UUID; + +@Service +public class ImageUpload { + public String uploadImage(MultipartFile file) throws IOException { + + byte[] bytes = file.getBytes(); + String originalFilename = file.getOriginalFilename(); + //고유 ID값을 부여해서 이미지 이름 중복되지 않게 처리. + String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); + String filename = UUID.randomUUID().toString() + extension; + //이미지가 저장될 경로 + Path path = Paths.get("C:/Users/이진규/IdeaProjects/calenkit6/src/main/resources/static/img/" + filename); + //파일 저장 + Files.write(path, bytes); + return filename; + } +} From 1a5e0580a575d2d2de8e549d9f33a500a17982d3 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:27:34 +0900 Subject: [PATCH 290/895] =?UTF-8?q?[DOCS]=20member=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../d3c3da90-9919-4a75-8525-14ad8820d058.jpg | Bin 0 -> 1236446 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg diff --git a/src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg b/src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg new file mode 100644 index 0000000000000000000000000000000000000000..658743897fbfdcf73a3d4daca292a326472c95bd GIT binary patch literal 1236446 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̶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

=}N`76sdudKT8ut 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 z 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

>CaZ(GlR76>d_-D&&RzKz6(%y# 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ⅈJ*4&Zc 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 z%0D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⑬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 Qd+-l00b{`_eE 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

N5?I+4TqHWLC{~#H7iBA3dOs z55@3qYt~t=B{AYR*>>EVgY)JMzjni1Iu|+c^t%S6wBDk#U-p67WR8-0Ahk2%<>Y=> zNH9;zYGV)AlTcR791DzPu4CtliZ6auGVVx%@MRngQW0lY5V1zs!uBgENUw9qK46cV zjEuVG?-pTu>b&Z2{I#)7-(g!X?r7o6=2&HmTAnYwlkC^Bkd4^g!4+hB_w8#GrBj0V zE-PS6U1-MGfG=_abiRwg=Rs;ddsr}w%-7YXfV;@|VoLX4esGw!>Vz^HSM4^|+gNi# zyfg1{3qH9b@017gEhl6?^DEeaHb>*rWb&ud+-2Gtev>_@EW!<5airde^muAToqO>d zVGzMO5GB`G>vc=%{nr)-N(z!Q^6?FxQwEPRZQsF!WEy5c{Gt8o2xG+JH)YA2Y#V_+ zfAjMaE{H$Ja=w-0-9Fi!=^ma|7pnofI*fIuT%Kw)6cq*(pYOMKZTTu zm8r1WoP~22gvIm=R<66*5CzvUse0$he`q%t-;_xpJyymH$BGtkRPIK(x5j-r zU&4n48ZwbC?1nuxUNIfL3X>P?A(BJw9(h`>^bX)`HP)P~R!#YlmD<9enO@>!?mQY$ zp0Os9sYvu?rKDY8*kRAT$pIJma+m*QnU;c4+<=m=lof!=6Y)^nY4X2z+@-0~|76EyLr_#fr z4nat>OxaAo@i}zRpLtJB!TZwtAVuhzT84ivkDf`d0;s1|%@eyv8O?zAR}eJ`=kIs4 z?yQa7N?l$`rO%vo- z;=SeTFr}XVB6UT;QvcrN8e>RD;^+He^r966rIdpGR*Nh7TmOgeetNv|rOLt#{k)~! zL^r+>SD2gxP81w!Ev+^0%C@sTCMG-cNKsltX4};z!!yhDVysQvVXm0Mz@|E{wuhH? zYFr|58@(|N{5PUcMd`R}JRzXw7egLclv!wOiD?~8X>6TL<-udlxn@`xf z!d+fZemZoGFuW=7UUq{U4wDn-23QHsvKRyYfFT+<2HGTC7 zK9DWFYdunXF5PPze6t2V=)G9y`f8^(mm_k$#g%;Ar}m-oO}(Y5)DK z_sdCZOk?#PzgpLphSYxrD2pwm9R^$kJz!J)B5CKAw(xu=MD~M=A9c6W5HIbj5i||( zCEn=^kFA`2+@YXwH>2xV3}2~sIE#oNPZi9eH=CtiI$Vv5pn6(yk07m{809t*2Tt

->JF&PDC_h=V1bRVn+c~e3= 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

xKKa0~lCpQ~>+#BFRL`rtX$z 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�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 Date: Tue, 2 May 2023 11:02:03 +0900 Subject: [PATCH 291/895] =?UTF-8?q?[FEAT]=20Email=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=ED=9B=84=20cnt=20=EB=B0=98=ED=99=98=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController2.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController2.java b/src/main/java/com/effourt/calenkit/controller/MemberController2.java index 07c00493..a997518f 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController2.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController2.java @@ -114,17 +114,17 @@ public int nameCheck(@RequestParam("memName") String memName) { // MyPage // 아이디 검색 후 중복 확인(GET) // Ajax 처리를 위해 아이디 중복 갯수 반환 -// @GetMapping("/memIdCheck") -// @ResponseBody -// public int idCheck(@RequestParam("memId") String memId) { -// int cnt=0; -// Member member = memberRepository.findByMemId(memId); -// if(member.getMemId()==memId){ -// cnt++; -// return cnt; -// } -// return cnt; -// } + @GetMapping("/idCheck") + @ResponseBody + public int idCheck(@RequestParam("memId") String memId) { + int cnt=0; + Member member = memberRepository.findByMemId(memId); + if(member!=null){ + cnt++; + return cnt; + } + return cnt; + } // MyPage // 멤버 정보변경(GET) From e88ebf75ae42635051f173e8c484561a47fcef8e Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 11:03:38 +0900 Subject: [PATCH 292/895] =?UTF-8?q?[REFACTOR]=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/member/myPageDelete.html | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/templates/member/myPageDelete.html b/src/main/resources/templates/member/myPageDelete.html index 7c14d655..d82ae443 100644 --- a/src/main/resources/templates/member/myPageDelete.html +++ b/src/main/resources/templates/member/myPageDelete.html @@ -2,6 +2,8 @@ Title + +

이 작업은 실행 취소할 수 없습니다.전체 계정이

@@ -9,36 +11,34 @@

모든 공유 워크스페이스에서 이 계정이 제거됩니다.

닉네임의 Notion
- - + + - 이메일이 일치합니다. - 이메일이 일치하지 않습니다. + + - + @@ -16,11 +41,13 @@

계정 정보


프로필 사진

- - + + + + +
닉네임
- @@ -38,18 +65,19 @@

계정 정보

+

이 작업은 실행 취소할 수 없습니다.전체 계정이

From 6d46fd2b6144b8df791e6e9e49c228978ff31a16 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:29:49 +0900 Subject: [PATCH 295/895] [FEAT] test --- .../calenkit/method/findIdListTest.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/test/java/com/effourt/calenkit/method/findIdListTest.java b/src/test/java/com/effourt/calenkit/method/findIdListTest.java index e4b00c32..1d9b8d56 100644 --- a/src/test/java/com/effourt/calenkit/method/findIdListTest.java +++ b/src/test/java/com/effourt/calenkit/method/findIdListTest.java @@ -9,27 +9,27 @@ public class findIdListTest { public static void main(String[] args) { - Team team1 = new Team(); - Team team2 = new Team(); - Team team3 = new Team(); - - team1.setTeamMid("abc123"); - team2.setTeamMid("xyz123"); - team3.setTeamMid("qwe123"); - team1.setTeamSno(1); - team2.setTeamSno(1); - team3.setTeamSno(1); - - List teamList = new ArrayList<>(); - teamList.add(team1); - teamList.add(team2); - teamList.add(team3); - - - String[] idList = new String[teamList.size()]; //team의 id만 담을 배열 초기화 - for (int i = 0; i < teamList.size(); i++) { - idList[i] = teamList.get(i).getTeamMid(); - } + Team team1 = new Team(); + Team team2 = new Team(); + Team team3 = new Team(); + + team1.setTeamMid("abc123"); + team2.setTeamMid("xyz123"); + team3.setTeamMid("qwe123"); + team1.setTeamSno(1); + team2.setTeamSno(1); + team3.setTeamSno(1); + + List teamList = new ArrayList<>(); + teamList.add(team1); + teamList.add(team2); + teamList.add(team3); + + + String[] idList = new String[teamList.size()]; //team의 id만 담을 배열 초기화 + for (int i = 0; i < teamList.size(); i++) { + idList[i] = teamList.get(i).getTeamMid(); + } System.out.println(idList.length); System.out.println(idList[0]); From b99636015d5c93d19cafa9e616a56dffde5977d7 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 14:30:20 +0900 Subject: [PATCH 296/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B0=BE=EA=B8=B0=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/login.html | 33 +++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index ed74f86a..4c851bc9 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -48,9 +48,16 @@

로그인

- + + + + -

+

@@ -122,7 +129,9 @@

로그인

$("#passwordDiv").css("display", "none"); $("#loginCodeDiv").css("display", "none"); $("#registerCodeDiv").css("display", "none"); + $("#initializeCodeDiv").css("display", "none"); $("#checkIdBtn").css("display", "block"); + $("#findPasswordBtn").css("display", "block"); } }); @@ -148,6 +157,26 @@

로그인

"&response_type=code" + "&scope=profile_nickname,profile_image,account_email"; }); + + //비밀번호 찾기 버튼 클릭 이벤트 + $("#findPasswordBtn").click(function() { + $("#loginId").val(""); + $("#passwordDiv").css("display", "none"); + $("#loginCodeDiv").css("display", "none"); + $("#registerCodeDiv").css("display", "none"); + $("#checkIdBtn").css("display", "none"); + $("#initializePasswordBtn").css("display", "block"); + }); + + //비밀번호 초기화용 로그인 코드 이메일로 전송 + $("#initializePasswordBtn").click(function() { + const loginId = $("#loginId").val(); + let result = sendCode(loginId); + if (result == "ok") { + $("#initializePasswordBtn").css("display", "none"); + $("#initializeCodeDiv").css("display", "block"); + } + }); \ No newline at end of file From 38226faa1dffd8af0cbe08ac0b02e493eac62d21 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Mon, 1 May 2023 00:37:44 +0900 Subject: [PATCH 297/895] =?UTF-8?q?[FEAT]=EC=83=81=EC=84=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=8F=99=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/ScheduleController.java | 13 ++++++------- .../effourt/calenkit/service/MyScheduleService.java | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java index 5bffd873..00102773 100644 --- a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java +++ b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java @@ -52,14 +52,13 @@ public List mainAJAX() { for(Schedule schedule:scheduleList) { //일정 리스트에서 일정 뽑아내기 Map map=new HashMap<>(); //일정 저장할 map - if(schedule.getScTitle()==null) { + if(schedule.getScTitle()==null || schedule.getScTitle().equals("null")) { schedule.setScTitle("제목 없음"); - } else { - map.put("title", schedule.getScTitle()); } + map.put("title", schedule.getScTitle()); map.put("start", schedule.getScSdate()); map.put("end", schedule.getScEdate()); - map.put("url", "localhost:8080/main_" + schedule.getScNo()); + map.put("url", "detail/" + schedule.getScNo()); mapList.add(map); //map에 일정 저장 } return mapList; //일정이 저장된 mapList값 보내기 @@ -70,7 +69,7 @@ public List mainAJAX() { * @param scNo * @return 일정 상세 페이지 HTML */ - @GetMapping("/main_{scNo}") + @GetMapping("/detail/{scNo}") public String ScheduleDetail(@PathVariable Integer scNo, Model model) { model.addAttribute("schdule",scheduleRepository.findByScNo(scNo)); return "detail"; @@ -80,12 +79,12 @@ public String ScheduleDetail(@PathVariable Integer scNo, Model model) { * * @return 일정 상세 페이지 URL */ - @GetMapping("/main_add") + @GetMapping("/add") public String addSchedule() { String id="employee"; //현재 세션 아이디 Integer scNo=myScheduleService.addMySchedule(id); //일정 추가 - return "main_"+scNo; //추가된 일정 상세 페이지로 이동 + return "detail/"+scNo; //추가된 일정 상세 페이지로 이동 } /* @GetMapping("/main_goToRecycleBin") diff --git a/src/main/java/com/effourt/calenkit/service/MyScheduleService.java b/src/main/java/com/effourt/calenkit/service/MyScheduleService.java index 9941e046..0864d78d 100644 --- a/src/main/java/com/effourt/calenkit/service/MyScheduleService.java +++ b/src/main/java/com/effourt/calenkit/service/MyScheduleService.java @@ -104,7 +104,7 @@ public List getMySchedule(String id, String date) { return scheduleRepository.findAllByScNo(map); } - // [내 스케줄 즐겨찾기 출력] + // [내 스케줄 즐겨찾기 출력] - 수정 필요 // => 현재 세션 아이디(loginMember) 기준 team, 출력 기준이 될 연월(date)을 매개변수로 입력받음 public List getBookmark(String id, String date) { Map map=new HashMap<>(); From 8533669b7759fdad080600e37b535ff852a7a1b6 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Mon, 1 May 2023 00:38:09 +0900 Subject: [PATCH 298/895] =?UTF-8?q?[FIX]script=20=EC=B6=A9=EB=8F=8C=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index bf57166f..179e5235 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -94,7 +94,7 @@ - + \ No newline at end of file From 8e26eb4096951f59c80c8c56ae04811f68bd6d7a Mon Sep 17 00:00:00 2001 From: mu-aa Date: Mon, 1 May 2023 02:31:33 +0900 Subject: [PATCH 301/895] =?UTF-8?q?[FEAT]=ED=9C=B4=EC=A7=80=ED=86=B5=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20SQL=20=EB=AA=85=EB=A0=B9=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/mapper/ScheduleMapper.java | 1 + .../calenkit/repository/ScheduleRepository.java | 1 + .../calenkit/repository/ScheduleRepositoryImpl.java | 5 +++++ .../com/effourt/calenkit/mapper/ScheduleMapper.xml | 12 +++++++----- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java index 5de4827d..fcd2d59a 100644 --- a/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/ScheduleMapper.java @@ -13,6 +13,7 @@ public interface ScheduleMapper { Integer save(); Integer update(Schedule schedule); + Integer updateStatus(Schedule schedule); Integer delete(Integer scNo); Integer findLastInsertScNo(); Schedule findByScNo(Integer scNo); diff --git a/src/main/java/com/effourt/calenkit/repository/ScheduleRepository.java b/src/main/java/com/effourt/calenkit/repository/ScheduleRepository.java index 04c470c6..a2a9260d 100644 --- a/src/main/java/com/effourt/calenkit/repository/ScheduleRepository.java +++ b/src/main/java/com/effourt/calenkit/repository/ScheduleRepository.java @@ -10,6 +10,7 @@ public interface ScheduleRepository { Integer save(); Integer update(Schedule schedule); + Integer updateStatus(Schedule schedule); Integer delete(Integer scNo); Integer findLastInsertScNo(); Schedule findByScNo(Integer scNo); diff --git a/src/main/java/com/effourt/calenkit/repository/ScheduleRepositoryImpl.java b/src/main/java/com/effourt/calenkit/repository/ScheduleRepositoryImpl.java index aa213c1c..e4cb1c9d 100644 --- a/src/main/java/com/effourt/calenkit/repository/ScheduleRepositoryImpl.java +++ b/src/main/java/com/effourt/calenkit/repository/ScheduleRepositoryImpl.java @@ -30,6 +30,11 @@ public Integer update(Schedule schedule) { return sqlSessionTemplate.getMapper(ScheduleMapper.class).update(schedule); } + @Override + public Integer updateStatus(Schedule schedule) { + return sqlSessionTemplate.getMapper(ScheduleMapper.class).updateStatus(schedule); + } + @Override public Integer delete(Integer scNo) { return sqlSessionTemplate.getMapper(ScheduleMapper.class).delete(scNo); diff --git a/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml index 9da58444..7dcec91d 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml @@ -4,11 +4,11 @@ - INSERT INTO SCHEDULE(SC_TITLE, SC_CONTENT, SC_SDATE, SC_EDATE, SC_STATUS, SC_PROGRESS) VALUES(null, null, now(), null, 1, 1) + INSERT INTO SCHEDULE(SC_TITLE, SC_CONTENT, SC_SDATE, SC_EDATE, SC_STATUS, SC_PROGRESS) VALUES('제목 없음', null, now(), null, 1, 1) - + UPDATE SCHEDULE @@ -24,9 +24,6 @@ SC_EDATE=#{scEdate}, - - SC_STATUS=#{scStatus} - SC_PROGRESS=#{scProgress} @@ -34,6 +31,11 @@ WHERE SC_NO=#{scNo} + + + UPDATE SCHEDULE SET SC_STATUS=#{scStatus} WHERE SC_NO=#{scNo} + + From a9b7a6ddc747709e1a591adf8e93bb4e5bb2b244 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Mon, 1 May 2023 02:32:44 +0900 Subject: [PATCH 302/895] =?UTF-8?q?[FEAT]=EC=83=81=EC=84=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=8F=99,=20=ED=9C=B4=EC=A7=80?= =?UTF-8?q?=ED=86=B5=20=EC=9D=B4=EB=8F=99=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScheduleController.java | 25 +++++++++++-------- .../calenkit/service/MyScheduleService.java | 11 ++++---- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java index 00102773..83bd1713 100644 --- a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java +++ b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java @@ -29,8 +29,8 @@ public class ScheduleController { /** * 달력에 일정 출력(메인페이지) */ - @GetMapping(value={"/","/main"}) - public String main(Model model) { + @GetMapping(value={"/","main"}) + public String main() { return "main"; } @@ -38,7 +38,7 @@ public String main(Model model) { * * @return 캘린더 라이브러리에 필요한 필드명 : 일정값 을 매핑한 맵리스트 */ - @GetMapping("/main_ajax") + @GetMapping("main_ajax") @ResponseBody public List mainAJAX() { String id="employee"; //session으로 현재 아이디 받아오기 @@ -52,9 +52,6 @@ public List mainAJAX() { for(Schedule schedule:scheduleList) { //일정 리스트에서 일정 뽑아내기 Map map=new HashMap<>(); //일정 저장할 map - if(schedule.getScTitle()==null || schedule.getScTitle().equals("null")) { - schedule.setScTitle("제목 없음"); - } map.put("title", schedule.getScTitle()); map.put("start", schedule.getScSdate()); map.put("end", schedule.getScEdate()); @@ -69,7 +66,7 @@ public List mainAJAX() { * @param scNo * @return 일정 상세 페이지 HTML */ - @GetMapping("/detail/{scNo}") + @RequestMapping("detail/{scNo}") public String ScheduleDetail(@PathVariable Integer scNo, Model model) { model.addAttribute("schdule",scheduleRepository.findByScNo(scNo)); return "detail"; @@ -79,7 +76,7 @@ public String ScheduleDetail(@PathVariable Integer scNo, Model model) { * * @return 일정 상세 페이지 URL */ - @GetMapping("/add") + @GetMapping("add") public String addSchedule() { String id="employee"; //현재 세션 아이디 Integer scNo=myScheduleService.addMySchedule(id); //일정 추가 @@ -87,9 +84,17 @@ public String addSchedule() { return "detail/"+scNo; //추가된 일정 상세 페이지로 이동 } - /* @GetMapping("/main_goToRecycleBin") - public String goToRecycleBin(@RequestParam Integer scNo) { + @GetMapping("detail/goToRecycleBin/{scNo}") + public String goToRecycleBin(@PathVariable Integer scNo) { myScheduleService.goToRecycleBin(scNo); + return "/main"; + } + + /*@GetMapping("delete/{scNo}") + public String deleteSchedule(@PathVariable Integer scNo) { + String id="employee"; //현재 세션 아이디 + myScheduleService.removeSchedule(scNo, id); + return "main"; }*/ } \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/service/MyScheduleService.java b/src/main/java/com/effourt/calenkit/service/MyScheduleService.java index 0864d78d..f74a417d 100644 --- a/src/main/java/com/effourt/calenkit/service/MyScheduleService.java +++ b/src/main/java/com/effourt/calenkit/service/MyScheduleService.java @@ -63,8 +63,10 @@ public List getRecycleBin(String id, String keyword) { @Transactional public void goToRecycleBin(Integer scNo) { Schedule schedule=scheduleRepository.findByScNo(scNo); - schedule.setScStatus(0); - scheduleRepository.update(schedule); + if(schedule.getScStatus()!=0) { + schedule.setScStatus(0); + } + scheduleRepository.updateStatus(schedule); } //[휴지통에서 내 스케줄 복원 행위] @@ -78,10 +80,9 @@ public void restoreSchedule(Schedule schedule, Alarm alarm) { //[휴지통에서 내 스케줄 완전 삭제 행위] @Transactional - public void removeSchedule(Integer scNo, String id, Integer alNo) { - scheduleRepository.delete(scNo); + public void removeSchedule(Integer scNo, String id) { teamRepository.delete(scNo, id); - alarmRepository.delete(alNo); + scheduleRepository.delete(scNo); } // [내 스케줄 즐겨찾기 버튼 클릭 행위] From ed053ca92cb31912994d18d8571837e8644c12ce Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:33:50 +0900 Subject: [PATCH 303/895] =?UTF-8?q?[STYLE]=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EC=9C=84=EC=B9=98=20=EB=A7=A8=20=EC=9C=84?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/layout.html | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/resources/templates/layout.html b/src/main/resources/templates/layout.html index 3252fc44..835a20e8 100644 --- a/src/main/resources/templates/layout.html +++ b/src/main/resources/templates/layout.html @@ -2,19 +2,20 @@ + + + + + - - - - -
+ From 7904970c3348368cef7f5498d35e02475bf7e23b Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:35:30 +0900 Subject: [PATCH 304/895] =?UTF-8?q?[DOCS]=20=EC=83=81=ED=83=9C=ED=91=9C?= =?UTF-8?q?=ED=98=84=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=9D=B4=EB=84=98=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/dto/AjaxStatus.java | 8 ++++++++ .../java/com/effourt/calenkit/dto/AlarmCate.java | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/dto/AjaxStatus.java create mode 100644 src/main/java/com/effourt/calenkit/dto/AlarmCate.java diff --git a/src/main/java/com/effourt/calenkit/dto/AjaxStatus.java b/src/main/java/com/effourt/calenkit/dto/AjaxStatus.java new file mode 100644 index 00000000..1a4202fa --- /dev/null +++ b/src/main/java/com/effourt/calenkit/dto/AjaxStatus.java @@ -0,0 +1,8 @@ +package com.effourt.calenkit.dto; + +import lombok.Getter; + +@Getter +public enum AjaxStatus { + OK,FAIL; +} diff --git a/src/main/java/com/effourt/calenkit/dto/AlarmCate.java b/src/main/java/com/effourt/calenkit/dto/AlarmCate.java new file mode 100644 index 00000000..64f5482b --- /dev/null +++ b/src/main/java/com/effourt/calenkit/dto/AlarmCate.java @@ -0,0 +1,16 @@ +package com.effourt.calenkit.dto; + +//알람 울릴 카테고리 +// => 일정 삭제(0),수정(1),초대(2),권한변경(3) +public enum AlarmCate { + DELETE_SCHDULE, MODIFY_SCHEDULE, SAVE_TEAM, UPDATE_TEAMLEVEL; + /* + public static void main(String[] args) { + //인덱스값 출력됨 - type int + System.out.println(AlarmCate.DELETE_SCHDULE.ordinal()); //0 + System.out.println(AlarmCate.MODIFY_SCHEDULE.ordinal()); //1 + System.out.println(AlarmCate.SAVE_TEAM.ordinal()); //2 + System.out.println(AlarmCate.UPDATE_TEAMLEVEL.ordinal()); //3 + } + */ +} From b8e68cc9f36fc3bfc2248fd3e4072d619e3d0b1c Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:08:40 +0900 Subject: [PATCH 305/895] =?UTF-8?q?[FEAT]application.properties=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=ED=81=AC=EA=B8=B0=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d5aee64c..2ee3662e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,6 +6,9 @@ spring.datasource.password=zofflszlt mybatis.type-aliases-package=com.effourt.calenkit.domain, com.effourt.calenkit.dto mybatis.configuration.map-underscore-to-camel-case=true +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB + #Google SMTP 설정 spring.mail.host=smtp.gmail.com spring.mail.post=587 From a259d39f43656026b9d35566a50febba64a8da52 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:09:26 +0900 Subject: [PATCH 306/895] =?UTF-8?q?[FEAT]MemberController2=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController2.java | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController2.java b/src/main/java/com/effourt/calenkit/controller/MemberController2.java index 8384c2c7..07c00493 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController2.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController2.java @@ -5,13 +5,20 @@ import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.service.AdminService; import com.effourt.calenkit.service.MyPageService; +import com.effourt.calenkit.util.ImageUpload; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpSession; +import java.awt.*; +import java.io.IOException; import java.util.List; @Slf4j @@ -21,6 +28,7 @@ public class MemberController2 { private final MyPageService myPageService; private final AdminService adminService; private final MemberRepository memberRepository; + private final ImageUpload imageUploadService; /** 관리자 */ // Admin @@ -74,33 +82,23 @@ public String MyPageDelete() { public String MyPageModify() { return "member/myPageModify"; } -// //파일 upload 기본 틀 -// @PostMapping("/upload") -// public String upload(@RequestParam("file") MultipartFile file, Model model, @ModelAttribute Member member) throws IOException { -// if (file.isEmpty()) { -// return "member/upload_fail"; -// } -// -// String originalFilename = file.getOriginalFilename(); -// String extension = FilenameUtils.getExtension(originalFilename); -// String uploadFilename = FilenameUtils.getBaseName(originalFilename) + "_" + System.currentTimeMillis() + "." + extension; -// String uploadDirectory = "/resources/images/member/"; -// -// Path uploadPath = Paths.get(uploadDirectory); -// if (!Files.exists(uploadPath)) { -// Files.createDirectories(uploadPath); -// } -// -// Path filePath = uploadPath.resolve(uploadFilename); -// Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); -// -// model.addAttribute("originalFilename", originalFilename); -// model.addAttribute("uploadFilename", uploadFilename); -// -// return ""; -// } + @PostMapping("/myPage_modify") + public ResponseEntity saveMember(@RequestParam("memImage") MultipartFile memImage,HttpSession session) throws IOException, MemberNotFoundException { + //Member loginMember=(Member)session.getAttribute("loginMember"); + Member loginMember=memberRepository.findByMemId("member"); + + // 이미지 업로드 후 파일명 반환 + String uploadfilename = imageUploadService.uploadImage(memImage); + loginMember.setMemImage(uploadfilename); + //loginMember.setMemName(memName); + + // Member 객체를 인자로 받는 modifyMe() 메소드 호출 + myPageService.modifyMe(loginMember); + + return new ResponseEntity<>(HttpStatus.CREATED); + } // MyPage From 6c269c90a0a4122e1c78ae0978fba1345a11bbcf Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:10:20 +0900 Subject: [PATCH 307/895] =?UTF-8?q?[FEAT]UPDATE=20SYSDATE=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/com/effourt/calenkit/mapper/MemberMapper.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml index 8992fd63..8418848b 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/MemberMapper.xml @@ -33,9 +33,6 @@ MEM_STATUS=#{memStatus}, - - MEM_LOGIN=SYSDATE, - MEM_AUTH_ID=#{memAuthId} From d5d9405fcc28acab3b3253c3b345257e157b2d6e Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:11:52 +0900 Subject: [PATCH 308/895] =?UTF-8?q?[ETC]=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/service/MyPageService.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/MyPageService.java b/src/main/java/com/effourt/calenkit/service/MyPageService.java index 0437f854..2e74e906 100644 --- a/src/main/java/com/effourt/calenkit/service/MyPageService.java +++ b/src/main/java/com/effourt/calenkit/service/MyPageService.java @@ -23,17 +23,17 @@ public void modifyMe(Member member) throws MemberNotFoundException { if(memberRepository.findByMemId(member.getMemId())==null) { throw new MemberNotFoundException("아이디의 회원정보가 존재하지 않습니다."); } - //전달받은 회원정보의 비밀번호가 존재할 경우 암호화된 비밀번호로 필드값 변경 - if(member.getMemPw()!=null && !member.getMemPw().equals("")) { - member.setMemPw(BCrypt.hashpw(member.getMemPw(),BCrypt.gensalt())); - } +// //전달받은 회원정보의 비밀번호가 존재할 경우 암호화된 비밀번호로 필드값 변경 +// if(member.getMemPw()!=null && !member.getMemPw().equals("")) { +// member.setMemPw(BCrypt.hashpw(member.getMemPw(),BCrypt.gensalt())); +// } //전달받은 회원정보의 프로필이 존재할 경우 필드값 변경 if(member.getMemImage()!=null && !member.getMemImage().equals("")){ member.setMemImage(member.getMemImage()); } - member.setMemName(member.getMemName()); - member.setMemStatus(member.getMemStatus()); - member.setMemAuthId(member.getMemAuthId()); +// member.setMemName(member.getMemName()); +// member.setMemStatus(member.getMemStatus()); +// member.setMemAuthId(member.getMemAuthId()); memberRepository.update(member); } From c11399cca8fcd241dda96a45407c018503366cf2 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:27:15 +0900 Subject: [PATCH 309/895] =?UTF-8?q?[FEAT]=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20UUID=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/util/ImageUpload.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/util/ImageUpload.java diff --git a/src/main/java/com/effourt/calenkit/util/ImageUpload.java b/src/main/java/com/effourt/calenkit/util/ImageUpload.java new file mode 100644 index 00000000..4bd11411 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/util/ImageUpload.java @@ -0,0 +1,28 @@ +package com.effourt.calenkit.util; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.UUID; + +@Service +public class ImageUpload { + public String uploadImage(MultipartFile file) throws IOException { + + byte[] bytes = file.getBytes(); + String originalFilename = file.getOriginalFilename(); + //고유 ID값을 부여해서 이미지 이름 중복되지 않게 처리. + String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); + String filename = UUID.randomUUID().toString() + extension; + //이미지가 저장될 경로 + Path path = Paths.get("C:/Users/이진규/IdeaProjects/calenkit6/src/main/resources/static/img/" + filename); + //파일 저장 + Files.write(path, bytes); + return filename; + } +} From 233d59c61280f232100ea8638b6b31b3e4a4c37f Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 10:27:34 +0900 Subject: [PATCH 310/895] =?UTF-8?q?[DOCS]=20member=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../d3c3da90-9919-4a75-8525-14ad8820d058.jpg | Bin 0 -> 1236446 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg diff --git a/src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg b/src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg new file mode 100644 index 0000000000000000000000000000000000000000..658743897fbfdcf73a3d4daca292a326472c95bd GIT binary patch literal 1236446 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̶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

=}N`76sdudKT8ut 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 z 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

>CaZ(GlR76>d_-D&&RzKz6(%y# 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ⅈJ*4&Zc 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 z%0D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⑬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 Qd+-l00b{`_eE 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

N5?I+4TqHWLC{~#H7iBA3dOs z55@3qYt~t=B{AYR*>>EVgY)JMzjni1Iu|+c^t%S6wBDk#U-p67WR8-0Ahk2%<>Y=> zNH9;zYGV)AlTcR791DzPu4CtliZ6auGVVx%@MRngQW0lY5V1zs!uBgENUw9qK46cV zjEuVG?-pTu>b&Z2{I#)7-(g!X?r7o6=2&HmTAnYwlkC^Bkd4^g!4+hB_w8#GrBj0V zE-PS6U1-MGfG=_abiRwg=Rs;ddsr}w%-7YXfV;@|VoLX4esGw!>Vz^HSM4^|+gNi# zyfg1{3qH9b@017gEhl6?^DEeaHb>*rWb&ud+-2Gtev>_@EW!<5airde^muAToqO>d zVGzMO5GB`G>vc=%{nr)-N(z!Q^6?FxQwEPRZQsF!WEy5c{Gt8o2xG+JH)YA2Y#V_+ zfAjMaE{H$Ja=w-0-9Fi!=^ma|7pnofI*fIuT%Kw)6cq*(pYOMKZTTu zm8r1WoP~22gvIm=R<66*5CzvUse0$he`q%t-;_xpJyymH$BGtkRPIK(x5j-r zU&4n48ZwbC?1nuxUNIfL3X>P?A(BJw9(h`>^bX)`HP)P~R!#YlmD<9enO@>!?mQY$ zp0Os9sYvu?rKDY8*kRAT$pIJma+m*QnU;c4+<=m=lof!=6Y)^nY4X2z+@-0~|76EyLr_#fr z4nat>OxaAo@i}zRpLtJB!TZwtAVuhzT84ivkDf`d0;s1|%@eyv8O?zAR}eJ`=kIs4 z?yQa7N?l$`rO%vo- z;=SeTFr}XVB6UT;QvcrN8e>RD;^+He^r966rIdpGR*Nh7TmOgeetNv|rOLt#{k)~! zL^r+>SD2gxP81w!Ev+^0%C@sTCMG-cNKsltX4};z!!yhDVysQvVXm0Mz@|E{wuhH? zYFr|58@(|N{5PUcMd`R}JRzXw7egLclv!wOiD?~8X>6TL<-udlxn@`xf z!d+fZemZoGFuW=7UUq{U4wDn-23QHsvKRyYfFT+<2HGTC7 zK9DWFYdunXF5PPze6t2V=)G9y`f8^(mm_k$#g%;Ar}m-oO}(Y5)DK z_sdCZOk?#PzgpLphSYxrD2pwm9R^$kJz!J)B5CKAw(xu=MD~M=A9c6W5HIbj5i||( zCEn=^kFA`2+@YXwH>2xV3}2~sIE#oNPZi9eH=CtiI$Vv5pn6(yk07m{809t*2Tt

xKKa0~lCpQ~>+#BFRL`rtX$z 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�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 Date: Tue, 2 May 2023 11:02:03 +0900 Subject: [PATCH 311/895] =?UTF-8?q?[FEAT]=20Email=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=ED=9B=84=20cnt=20=EB=B0=98=ED=99=98=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController2.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController2.java b/src/main/java/com/effourt/calenkit/controller/MemberController2.java index 07c00493..a997518f 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController2.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController2.java @@ -114,17 +114,17 @@ public int nameCheck(@RequestParam("memName") String memName) { // MyPage // 아이디 검색 후 중복 확인(GET) // Ajax 처리를 위해 아이디 중복 갯수 반환 -// @GetMapping("/memIdCheck") -// @ResponseBody -// public int idCheck(@RequestParam("memId") String memId) { -// int cnt=0; -// Member member = memberRepository.findByMemId(memId); -// if(member.getMemId()==memId){ -// cnt++; -// return cnt; -// } -// return cnt; -// } + @GetMapping("/idCheck") + @ResponseBody + public int idCheck(@RequestParam("memId") String memId) { + int cnt=0; + Member member = memberRepository.findByMemId(memId); + if(member!=null){ + cnt++; + return cnt; + } + return cnt; + } // MyPage // 멤버 정보변경(GET) From 6cb6b7a13f4bbe309291d503dffb25825a08f1df Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 11:03:38 +0900 Subject: [PATCH 312/895] =?UTF-8?q?[REFACTOR]=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/member/myPageDelete.html | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/templates/member/myPageDelete.html b/src/main/resources/templates/member/myPageDelete.html index 7c14d655..d82ae443 100644 --- a/src/main/resources/templates/member/myPageDelete.html +++ b/src/main/resources/templates/member/myPageDelete.html @@ -2,6 +2,8 @@ Title + +

이 작업은 실행 취소할 수 없습니다.전체 계정이

@@ -9,36 +11,34 @@

모든 공유 워크스페이스에서 이 계정이 제거됩니다.

닉네임의 Notion
- - + + - 이메일이 일치합니다. - 이메일이 일치하지 않습니다. + + - + @@ -16,11 +41,13 @@

계정 정보


프로필 사진

- - + + + + +
닉네임
- @@ -38,18 +65,19 @@

계정 정보

+

이 작업은 실행 취소할 수 없습니다.전체 계정이

From 6805e7cbab871ccf0b1b5d5d127727237b36dffd Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:37:48 +0900 Subject: [PATCH 315/895] =?UTF-8?q?[STYLE]=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=9E=A0=EC=8B=9C=20=EC=A3=BC=EC=84=9D=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 129 ++++++++++++++++++++--- 1 file changed, 115 insertions(+), 14 deletions(-) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 5e86c3e4..10cef35c 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -3,29 +3,130 @@ CKEditor + + + - -

메모장

-
+ + +
+ -

- - - - +
+ + + - + + + + -

+

@@ -122,7 +129,9 @@

로그인

$("#passwordDiv").css("display", "none"); $("#loginCodeDiv").css("display", "none"); $("#registerCodeDiv").css("display", "none"); + $("#initializeCodeDiv").css("display", "none"); $("#checkIdBtn").css("display", "block"); + $("#findPasswordBtn").css("display", "block"); } }); @@ -148,6 +157,26 @@

로그인

"&response_type=code" + "&scope=profile_nickname,profile_image,account_email"; }); + + //비밀번호 찾기 버튼 클릭 이벤트 + $("#findPasswordBtn").click(function() { + $("#loginId").val(""); + $("#passwordDiv").css("display", "none"); + $("#loginCodeDiv").css("display", "none"); + $("#registerCodeDiv").css("display", "none"); + $("#checkIdBtn").css("display", "none"); + $("#initializePasswordBtn").css("display", "block"); + }); + + //비밀번호 초기화용 로그인 코드 이메일로 전송 + $("#initializePasswordBtn").click(function() { + const loginId = $("#loginId").val(); + let result = sendCode(loginId); + if (result == "ok") { + $("#initializePasswordBtn").css("display", "none"); + $("#initializeCodeDiv").css("display", "block"); + } + }); \ No newline at end of file From 8a78265c94a61985c385b5fd2886c7c8b88f83af Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:39:46 +0900 Subject: [PATCH 318/895] =?UTF-8?q?[STYLE]=20=EC=9D=B4=EB=84=98=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=83=81=ED=83=9C=ED=91=9C=ED=98=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/service/AlarmService.java | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index 48e9f567..8a4aa19c 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -2,6 +2,7 @@ import com.effourt.calenkit.domain.Alarm; import com.effourt.calenkit.domain.Team; +import com.effourt.calenkit.dto.AlarmCate; import com.effourt.calenkit.repository.AlarmRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.repository.TeamRepository; @@ -39,7 +40,7 @@ public void addAlarmByModifySchedule(Integer scNo){ alarm.setAlScno(scNo); //3. 알람 울릴 스케줄번호 //4. 알람 상태 - 1(고정해놨음) //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(1); //6. 알람의 종류(1) - 일정 수정 [scNo 스케줄이 수정되었습니다.라고 출력할 것임] + alarm.setAlCate(AlarmCate.MODIFY_SCHEDULE.ordinal()); //6. 1 alarmRepository.save(alarm); //idList의 갯수 만큼 save(alarm) 호출 } } @@ -57,7 +58,7 @@ public void addAlarmByDeleteSchedule(Integer scNo){ //1. List findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ - alarm.setAlStatus(0); + alarm.setAlStatus(0);//알람상태 0으로 변경 - 동행에게는 해당 스케줄의 알람이 출력되지 않음 alarmRepository.update(alarm); } //2. @@ -69,7 +70,7 @@ public void addAlarmByDeleteSchedule(Integer scNo){ alarm.setAlScno(scNo); //3. 알람 울릴 스케줄번호 //4. 알람 상태 - 1(고정해놨음) //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(0); //6. 알람의 종류(0) - 일정 삭제 [scNo 스케줄이 삭제되었습니다.라고 출력할 것임] + alarm.setAlCate(AlarmCate.DELETE_SCHDULE.ordinal()); //6. 0 alarmRepository.save(alarm); //idList의 갯수 만큼 save(alarm) 호출 } } @@ -84,7 +85,7 @@ public void removeAlarmByScno(Integer scNo){ List findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ alarm.setAlStatus(0); - alarmRepository.delete(alarm.getAlNo()); + alarmRepository.delete(alarm.getAlNo());//알람삭제 } } @@ -102,7 +103,7 @@ public Alarm addAlarmBySaveTeam(String addId, Integer scNo){ alarm.setAlScno(scNo); //3. 알람 울릴 스케줄 //4. 알람 상태 - 1(고정해놨음) //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(2); //6. 알람의 종류(2) - 권한 변경 [scNo 스케줄에 최대되엇습니다.라고 출력할 것임] + alarm.setAlCate(AlarmCate.SAVE_TEAM.ordinal()); //6. 2 return alarmRepository.save(alarm); } @@ -123,25 +124,12 @@ public void addAlarmByUpdateTeamLevel(String updateId, Integer scNo){ alarm.setAlScno(scNo); //3. 알람 울릴 스케줄 //4. 알람 상태 - 1(고정해놨음) //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(3); //6. 알람의 종류(3) - 권한 변경 [scNo 스케줄의 권한이 변경되었습니다.라고 출력할 것임] + alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL.ordinal()); //6. 3 alarmRepository.save(alarm); } } } - - - - - - //동행이 있는지 확인하는 시스템 메소드 - 동행이 있다면 true, 동행이 없다면 false - private Boolean isTeam(Integer scNo){ - List teamList = teamRepository.findBySno(scNo); - //if(teamList.size()==0){ //이럴 수는 없다 예외발생시키기 } - if(teamList.size()==1) return false; - return true; - } - //일정번호로 team을 find해서 아이디만 배열로 반환하는 시스템 메소드 private String[] findIdList(Integer scNo) { List teamList = teamRepository.findBySno(scNo); //일정번호로 teamList 조회 @@ -150,6 +138,4 @@ private String[] findIdList(Integer scNo) { for (int i = 0; i < teamList.size(); i++) idList[i] = teamList.get(i).getTeamMid(); return idList; } - - } From cd037e6b8b816dda62df9acb04c9871c6577c10e Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:40:39 +0900 Subject: [PATCH 319/895] =?UTF-8?q?[FEAT]=20ajax=EB=A1=9C=20=EB=8F=99?= =?UTF-8?q?=ED=96=89=20=EC=95=84=EC=9D=B4=EB=94=94=20=EC=B0=BE=EA=B8=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index bf57166f..920b9469 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -2,6 +2,7 @@ + Title @@ -73,7 +74,6 @@

cat

- @@ -138,7 +127,18 @@ - + From 947d4448f4e0c18d15298347365445ab6a01f518 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 14:41:03 +0900 Subject: [PATCH 320/895] =?UTF-8?q?[FEAT]=20=EC=9D=BC=EC=A0=95=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20URL=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/TeamController.java | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/controller/TeamController.java b/src/main/java/com/effourt/calenkit/controller/TeamController.java index e142a589..579c86d4 100644 --- a/src/main/java/com/effourt/calenkit/controller/TeamController.java +++ b/src/main/java/com/effourt/calenkit/controller/TeamController.java @@ -1,16 +1,64 @@ package com.effourt.calenkit.controller; + +import com.effourt.calenkit.domain.Member; +import com.effourt.calenkit.domain.Team; +import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.repository.TeamRepository; import com.effourt.calenkit.service.TeamScheduleService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Controller @RequiredArgsConstructor -@RequestMapping("/teams") public class TeamController { private final TeamScheduleService teamScheduleService; private final TeamRepository teamRepository; + private final MemberRepository memberRepository; + + //http://localhost:8080/schedules?scNo=1 + @GetMapping("/schedules") + public String getMyTeam(@RequestParam int scNo, Model model) { + List teamList = teamRepository.findBySno(scNo); + List imageList = new ArrayList<>(); + for(int i=0; i Date: Tue, 2 May 2023 14:41:18 +0900 Subject: [PATCH 321/895] =?UTF-8?q?[FIX]=20=EA=B8=B0=EB=8A=A5=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=A4=91..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/AlarmController.java | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/AlarmController.java b/src/main/java/com/effourt/calenkit/controller/AlarmController.java index 18e9a909..43635aa9 100644 --- a/src/main/java/com/effourt/calenkit/controller/AlarmController.java +++ b/src/main/java/com/effourt/calenkit/controller/AlarmController.java @@ -1,6 +1,10 @@ package com.effourt.calenkit.controller; import com.effourt.calenkit.domain.Alarm; +import com.effourt.calenkit.domain.Schedule; +import com.effourt.calenkit.dto.AjaxStatus; +import com.effourt.calenkit.dto.AjaxStatus; +import com.effourt.calenkit.dto.AlarmCate; import com.effourt.calenkit.repository.AlarmRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.service.AlarmService; @@ -16,7 +20,6 @@ @Controller @RequiredArgsConstructor -@RequestMapping("/alarms") public class AlarmController { private final AlarmRepository alarmRepository; @@ -29,7 +32,7 @@ public class AlarmController { * @return */ // http://localhost:8080/alarms/{alMid} - @GetMapping("/{alMid}") + @GetMapping("/alarms/{alMid}") @ResponseBody public List showMyAlarmList(@PathVariable String alMid, HttpSession session){ //String loginId = (String)session.getAttribute("loginId"); @@ -64,17 +67,42 @@ public List showMyAlarmList(@PathVariable String alMid, HttpSession sessi */ /** - * 일정 수정 일어날 시 알람 리소스 추가 + * 일정 수정 일어날 시 알람 리소스 추가 - 1 (알람추가지만 .. POST말고, GET으로 요청함) + * 일정 삭제 일어날 시 알람 리소스 추가 - 0 * @return */ - /* - // http://localhost:8080/alarms?scNo=1 - @GetMapping("/") + // http://localhost:8080/alarms/{kind}?scNo=1 + // http://localhost:8080/alarms/1?scNo=1 + // http://localhost:8080/alarms/0?scNo=1 + @GetMapping("/alarms/{kind}") @ResponseBody - public String addAlarms(@RequestParam int scNo) { + public AjaxStatus addAlarms(@PathVariable String kind, @RequestParam int scNo) { + int kinds = Integer.parseInt(kind); + if(AlarmCate.MODIFY_SCHEDULE.ordinal()==kinds){ + alarmService.addAlarmByModifySchedule(scNo); + } else if (AlarmCate.DELETE_SCHDULE.ordinal()==kinds){ + alarmService.addAlarmByDeleteSchedule(scNo); + } else { + return AjaxStatus.FAIL; + } + return AjaxStatus.OK; + } + + /** + * 동행 추가 일어날 시 알람 리소스 추가 + * @return + */ + // http://localhost:8080/alarms?scNo=1 + /* + @GetMapping("/alarms") + @ResponseBody + public Status addAlarms(@RequestParam int scNo) { + alarmService.addAlarmByModifySchedule(scNo); + return Status.ADD_OK; } */ + //1. 일정 수정 >> 비동기로 스케줄테이블 수정 처리하는 요청 처리 메소드 PATCH //2. 일정 수정 >> 동행에게 알람을 울리기 위한 요청 처리 메소드 From fcb7e8653db8e995169b02463baab534b17801c5 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 15:17:51 +0900 Subject: [PATCH 322/895] =?UTF-8?q?[REFACTOR]=20URL=20=EA=B2=BD=EB=A1=9C?= =?UTF-8?q?=20Properties=EC=97=90=EC=84=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...realpath4b848461-2794-43fb-b9b4-0224df81f8af.jpg | Bin .../java/com/effourt/calenkit/util/ImageUpload.java | 8 ++++++-- src/main/resources/application.properties | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) rename src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg => realpath4b848461-2794-43fb-b9b4-0224df81f8af.jpg (100%) diff --git a/src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg b/realpath4b848461-2794-43fb-b9b4-0224df81f8af.jpg similarity index 100% rename from src/main/resources/static/img/d3c3da90-9919-4a75-8525-14ad8820d058.jpg rename to realpath4b848461-2794-43fb-b9b4-0224df81f8af.jpg diff --git a/src/main/java/com/effourt/calenkit/util/ImageUpload.java b/src/main/java/com/effourt/calenkit/util/ImageUpload.java index 4bd11411..3d1464a3 100644 --- a/src/main/java/com/effourt/calenkit/util/ImageUpload.java +++ b/src/main/java/com/effourt/calenkit/util/ImageUpload.java @@ -1,6 +1,8 @@ package com.effourt.calenkit.util; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.MessageSource; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -10,17 +12,19 @@ import java.nio.file.Paths; import java.util.UUID; +@RequiredArgsConstructor @Service public class ImageUpload { + @Value("${image.path}") + private String imagePath; public String uploadImage(MultipartFile file) throws IOException { - byte[] bytes = file.getBytes(); String originalFilename = file.getOriginalFilename(); //고유 ID값을 부여해서 이미지 이름 중복되지 않게 처리. String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); String filename = UUID.randomUUID().toString() + extension; //이미지가 저장될 경로 - Path path = Paths.get("C:/Users/이진규/IdeaProjects/calenkit6/src/main/resources/static/img/" + filename); + Path path = Paths.get("imagePath" + filename); //파일 저장 Files.write(path, bytes); return filename; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2ee3662e..dd7b23f9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,6 +8,8 @@ mybatis.configuration.map-underscore-to-camel-case=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB +image.path=C:/Users/???/IdeaProjects/calenkit6/src/main/resources/static/img/ + #Google SMTP 설정 spring.mail.host=smtp.gmail.com From fbdf5aa903bbfdd8537d74fb6422942a29bdbf3d Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 15:52:44 +0900 Subject: [PATCH 323/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/login.html | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 4c851bc9..2fdebd42 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -55,7 +55,9 @@

로그인

- +

+ +

@@ -172,10 +174,14 @@

로그인

$("#initializePasswordBtn").click(function() { const loginId = $("#loginId").val(); let result = sendCode(loginId); - if (result == "ok") { - $("#initializePasswordBtn").css("display", "none"); - $("#initializeCodeDiv").css("display", "block"); - } + $("#initializePasswordBtn").css("display", "none"); + $("#initializeCodeDiv").css("display", "block"); + }); + + //비밀번호 초기화 코드로 로그인 버튼 클릭 이벤트 + $("#initializeCodeBtn").click(function() { + $("#loginForm").prop("action", domainURL + "/login/initialize-code"); + $("#loginForm").submit(); }); From 31d038b5e0fc9a093956c8057c4a606f7073580b Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 15:53:16 +0900 Subject: [PATCH 324/895] =?UTF-8?q?[FEAT]=20=EC=95=84=EC=9D=B4=EB=94=94?= =?UTF-8?q?=EC=97=90=20=ED=95=B4=EB=8B=B9=ED=95=98=EB=8A=94=20=EB=B9=84?= =?UTF-8?q?=EB=B0=80=EB=B2=88=ED=98=B8=20UPDATE=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/service/LoginService.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/service/LoginService.java b/src/main/java/com/effourt/calenkit/service/LoginService.java index 3fda1dce..17aa7aa4 100644 --- a/src/main/java/com/effourt/calenkit/service/LoginService.java +++ b/src/main/java/com/effourt/calenkit/service/LoginService.java @@ -7,6 +7,7 @@ import com.effourt.calenkit.dto.AccessTokenRequest; import com.effourt.calenkit.dto.AccessTokenResponse; import com.effourt.calenkit.dto.AuthUserInfoResponse; +import com.effourt.calenkit.exception.MemberNotFoundException; import com.effourt.calenkit.repository.AuthRepository; import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.util.EmailSend; @@ -33,6 +34,13 @@ public void saveMember(Member member) { memberRepository.save(member); } + public void updatePassword(String memId, String password) { + Member member = new Member(); + member.setMemId(memId); + member.setMemPw(password); + memberRepository.updatePassword(member); + } + //Member 테이블에서 이메일에 해당하는 회원 정보 조회 public Member getMemberById(String id) { return memberRepository.findByMemId(id); From bf7a8602d899ea6eb81e30b0cdd6e2c3fd0b34d7 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 15:53:36 +0900 Subject: [PATCH 325/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index eb3ab2ec..4fa7f843 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -45,8 +45,8 @@ public class MemberController { * @param idMap * @return */ - @ResponseBody @PostMapping("/login/check") + @ResponseBody public String checkId(@RequestBody Map idMap) { String memId = idMap.get("id"); String loginType = loginService.checkMember(memId); @@ -136,6 +136,18 @@ public String loginByJoin(String memId, String registerCode, HttpSession session return "register"; } + @PostMapping("/login/initialize-code") + public String loginByInitialize(String memId, String initializeCode, HttpSession session) { + //비밀번호 초기화 (null로 지정) + loginService.updatePassword(memId, null); + //초기화 코드 검증 후 로그인 + String code = (String) session.getAttribute(initializeCode); + if (code.equals(memId + "ACCESS")) { + session.setAttribute("loginId", memId); + } + return "main"; + } + /** * 이메일 회원가입 * @param member 아이디(이메일), 비밀번호, 닉네임, 프로필 이미지(선택) 정보 저장 객체 From 894e29535487085e0a112cf2b49996947443efa3 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 16:02:54 +0900 Subject: [PATCH 326/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=ED=99=95=EC=9D=B8=20=EB=B9=84=EB=8F=99=EA=B8=B0=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/member/myPageModify.html | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/main/resources/templates/member/myPageModify.html b/src/main/resources/templates/member/myPageModify.html index aa19836f..6637e118 100644 --- a/src/main/resources/templates/member/myPageModify.html +++ b/src/main/resources/templates/member/myPageModify.html @@ -2,16 +2,52 @@ Title + + - +

이전 비밀번호

- +

새 비밀번호

- +

비밀번호 확인

- + + + + +

최소 8자의 문자와 숫자조합을 비밀번호로 이용해주세요.

+
+ + + \ No newline at end of file From 9cee14b5be542f7a02eb8af3f9c0523a5a04b415 Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 16:03:06 +0900 Subject: [PATCH 327/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=ED=99=95=EC=9D=B8=20=EB=B9=84=EB=8F=99=EA=B8=B0=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController2.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController2.java b/src/main/java/com/effourt/calenkit/controller/MemberController2.java index a997518f..55cac41b 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController2.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController2.java @@ -126,6 +126,20 @@ public int idCheck(@RequestParam("memId") String memId) { return cnt; } + // MyPage + // 아이디 검색 후 중복 확인(GET) + // Ajax 처리를 위해 비밀번호 중복 갯수 반환 + @GetMapping("/passwordCheck") + @ResponseBody + public int passwordCheck(String password1,String password2) { + int cnt=0; + if (password1.equals(password2)){ + cnt++; + return cnt; + } + return cnt; + } + // MyPage // 멤버 정보변경(GET) // 로그인세션에서 아이디값을 전달받아 member_modify 페이지로 이동 From 994bbbe0c7008a27a47e2ccc71faaea5b1feacfd Mon Sep 17 00:00:00 2001 From: Lee Date: Tue, 2 May 2023 16:06:43 +0900 Subject: [PATCH 328/895] =?UTF-8?q?[STYLE]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=ED=99=95=EC=9D=B8=20style=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/member/myPageModify.html | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/resources/templates/member/myPageModify.html b/src/main/resources/templates/member/myPageModify.html index 6637e118..7863305e 100644 --- a/src/main/resources/templates/member/myPageModify.html +++ b/src/main/resources/templates/member/myPageModify.html @@ -3,8 +3,25 @@ Title + +

이전 비밀번호

@@ -13,8 +30,8 @@

비밀번호 확인

- - + +

최소 8자의 문자와 숫자조합을 비밀번호로 이용해주세요.

@@ -37,11 +54,11 @@ password2: password2}, success:function(cnt){ //컨트롤러에서 넘어온 cnt값을 받는다 if(cnt == 0){ //cnt가 1이 아니면(=0일 경우) -> 일치하지 않는 아이디 - $('.id_already').css("display","inline-block"); - $('.id_ok').css("display", "none"); + $('.password_already').css("display","inline-block"); + $('.password_ok').css("display", "none"); } else { // cnt가 1일 경우 -> 일치하는 아이디 - $('.id_ok').css("display","inline-block"); - $('.id_already').css("display", "none"); + $('.password_ok').css("display","inline-block"); + $('.password_already').css("display", "none"); } }, error:function(){ From 07cbb91ca60b2688173568f2ac982f2fc92e4a3f Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 17:58:23 +0900 Subject: [PATCH 329/895] =?UTF-8?q?[FEAT]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=84=20AJAX=EB=A1=9C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD,=20lo?= =?UTF-8?q?gin.html=20=EB=B3=B4=EC=97=AC=EC=A4=84=20=ED=83=9C=EA=B7=B8,=20?= =?UTF-8?q?=EA=B0=90=EC=B6=9C=20=ED=83=9C=EA=B7=B8,=20=EA=B0=92=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=ED=95=A0=20=ED=83=9C=EA=B7=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8A=94=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80,=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B0=BE=EA=B8=B0=20=EC=9D=B4=ED=9B=84=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=9C=EB=A1=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/login.html | 122 ++++++++++++++++----- src/main/resources/templates/register.html | 31 +++++- 2 files changed, 123 insertions(+), 30 deletions(-) diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 2fdebd42..e5f7cd48 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -54,12 +54,16 @@

로그인

- -

- +

+ +

+ +

+ -

+

@@ -74,8 +78,10 @@

로그인

diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index e8152c87..6c21c30f 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -57,12 +57,37 @@

회원가입

- From 46239cd080ea425bd2e6cc80989906db61be0824 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 17:59:00 +0900 Subject: [PATCH 330/895] =?UTF-8?q?[DOCS]=20=EC=9C=A0=EC=A0=80=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C(=EC=9D=BC=EB=B0=98=20=EC=82=AC=EC=9A=A9=EC=9E=90,=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90)=20=EC=B2=B4=ED=81=AC=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=EC=85=89=ED=84=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/interceptor/UserAuthInterceptor.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java diff --git a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java new file mode 100644 index 00000000..b116a8d3 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java @@ -0,0 +1,37 @@ +package com.effourt.calenkit.util.interceptor; + +import com.effourt.calenkit.domain.Member; +import com.effourt.calenkit.repository.MemberRepository; +import com.effourt.calenkit.service.LoginService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +@Slf4j +public class UserAuthInterceptor implements HandlerInterceptor { + + private MemberRepository memberRepository; + + public UserAuthInterceptor(MemberRepository memberRepository) { + this.memberRepository = memberRepository; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + HttpSession session = request.getSession(); + String loginId = (String) session.getAttribute("loginId"); + log.info("UserAuthInterceptor loginId={}", loginId); + + Member findMember = memberRepository.findByMemId(loginId); + log.info("UserAuthInterceptor findMemberId={}, findMemberStatus={}", findMember.getMemId(), findMember.getMemStatus()); + if (findMember.getMemStatus() == 9) { + response.sendRedirect("/admin"); + } + return true; + } +} From 0ab7d9bf1f889330bf6a3ec43523cf96120a57b1 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 17:59:29 +0900 Subject: [PATCH 331/895] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C(=EC=9D=BC=EB=B0=98=20=EC=82=AC=EC=9A=A9=EC=9E=90,=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90)=20=EC=B2=B4=ED=81=AC=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=EC=85=89=ED=84=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=A5=BC=20=EC=84=A4=EC=A0=95=EC=97=90=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/config/InterceptorConfig.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java index c66abfb6..1c6270a5 100644 --- a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java +++ b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java @@ -1,18 +1,30 @@ package com.effourt.calenkit.config; +import com.effourt.calenkit.repository.MemberRepository; +import com.effourt.calenkit.service.LoginService; import com.effourt.calenkit.util.interceptor.LoginInterceptor; +import com.effourt.calenkit.util.interceptor.UserAuthInterceptor; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@RequiredArgsConstructor public class InterceptorConfig implements WebMvcConfigurer { + private final MemberRepository memberRepository; + @Override public void addInterceptors(InterceptorRegistry registry) { + //유저 로그인 상태 체크 인터셉터 registry.addInterceptor(new LoginInterceptor()) .order(1) .addPathPatterns("") .excludePathPatterns(""); + //유저 권한 체크 인터셉터 + registry.addInterceptor(new UserAuthInterceptor(memberRepository)) + .order(2) + .addPathPatterns(""); } } From 0ef940569afc64baf67315811d0f083269f357bd Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:00:11 +0900 Subject: [PATCH 332/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8,=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=BD=94=EB=93=9C=EB=A1=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8,=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EC=9D=84=20REST=20API=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 4fa7f843..4ec6c740 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -76,7 +76,7 @@ public String sendCode(@RequestBody Map idMap, HttpSession sessi log.info("email id={}", memId); log.info("subject={}", subject); log.info("message={}", message); - return "ok"; + return "OK"; } @@ -95,28 +95,34 @@ public String login() { * @return */ @PostMapping("/login/password") - public String loginByPassword(@ModelAttribute Member member, HttpSession session) { + @ResponseBody + public String loginByPassword(@RequestBody Member member, HttpSession session) { Member findMember = loginService.getMemberById(member.getMemId()); if (findMember.getMemPw().equals(member.getMemPw())) { session.setAttribute("loginId", member.getMemId()); + } else { + return "아이디 또는 비밀번호를 잘못 입력하셨습니다."; } - return "main"; + return "OK"; } /** * 로그인 코드로 로그인 - * @param memId - * @param loginCode + * @param loginCodeMap * @param session * @return */ @PostMapping("/login/login-code") - public String loginByCode(String memId, String loginCode, HttpSession session) { - String code = (String) session.getAttribute(loginCode); + @ResponseBody + public String loginByCode(@RequestBody Map loginCodeMap, HttpSession session) { + String memId = loginCodeMap.get("id"); + String code = (String) session.getAttribute(loginCodeMap.get("loginCode")); if (code.equals(memId + "ACCESS")) { session.setAttribute("loginId", memId); + } else { + return "로그인 코드를 잘못 입력하셨습니다."; } - return "main"; + return "OK"; } /** @@ -137,15 +143,19 @@ public String loginByJoin(String memId, String registerCode, HttpSession session } @PostMapping("/login/initialize-code") - public String loginByInitialize(String memId, String initializeCode, HttpSession session) { + @ResponseBody + public String loginByInitialize(@RequestBody Map initializeCodeMap, HttpSession session) { + String memId = initializeCodeMap.get("id"); //비밀번호 초기화 (null로 지정) loginService.updatePassword(memId, null); //초기화 코드 검증 후 로그인 - String code = (String) session.getAttribute(initializeCode); + String code = (String) session.getAttribute(initializeCodeMap.get("initializeCode")); if (code.equals(memId + "ACCESS")) { session.setAttribute("loginId", memId); + } else { + return "초기화 코드를 잘못 입력하였습니다."; } - return "main"; + return "OK"; } /** @@ -154,9 +164,11 @@ public String loginByInitialize(String memId, String initializeCode, HttpSession * @return */ @PostMapping("/join") - public String join(@ModelAttribute Member member) { + @ResponseBody + public String join(@RequestBody Member member, HttpSession session) { joinService.joinByEmail(member); - return "main"; + session.setAttribute("loginId", member.getMemId()); + return "OK"; } /** From f6e6913738dcaee420ee7bb3786f85bee80fe9a5 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:18:35 +0900 Subject: [PATCH 333/895] =?UTF-8?q?[FEAT]=20=ED=9A=8C=EC=9B=90=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20UPDATE=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/service/LoginService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/service/LoginService.java b/src/main/java/com/effourt/calenkit/service/LoginService.java index 17aa7aa4..17feade2 100644 --- a/src/main/java/com/effourt/calenkit/service/LoginService.java +++ b/src/main/java/com/effourt/calenkit/service/LoginService.java @@ -34,6 +34,7 @@ public void saveMember(Member member) { memberRepository.save(member); } + //회원 비밀번호 UPDATE public void updatePassword(String memId, String password) { Member member = new Member(); member.setMemId(memId); @@ -41,6 +42,11 @@ public void updatePassword(String memId, String password) { memberRepository.updatePassword(member); } + //회원 정보 UPDATE + public void update(Member member) { + memberRepository.update(member); + } + //Member 테이블에서 이메일에 해당하는 회원 정보 조회 public Member getMemberById(String id) { return memberRepository.findByMemId(id); From 887af365a75e10b141b35a8986504e1a22496b0b Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:19:15 +0900 Subject: [PATCH 334/895] =?UTF-8?q?[FEAT]=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20-=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=9D=B4=EB=A9=94=EC=9D=BC=EC=9D=B4=20DB=EC=97=90=20?= =?UTF-8?q?=EC=A1=B4=EC=9E=AC=ED=95=98=EC=A7=80=EB=A7=8C=20Access=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0,=20Refresh=20=ED=86=A0=ED=81=B0=EC=9D=B4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=EB=90=98=EC=96=B4=20=EC=9E=88=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20UPDATE=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/controller/MemberController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 4ec6c740..a5dfa83c 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -199,14 +199,17 @@ public String loginByKakao(@RequestParam String code, HttpSession session) { if (member == null) { //사용자 이메일이 DB에 존재하지 않는 경우 joinService.joinBySns(userInfo, accessToken); + log.info("카카오 - 회원가입 후 로그인"); } else if (member.getMemAuthId() == 0) { //사용자 이메일이 DB에 존재하지만 Access 토큰, Refresh 토큰이 설정되어 있지 않는 경우 Auth auth = loginService.saveToken(accessToken); member.setMemAuthId(auth.getAuthId()); - loginService.saveMember(member); + loginService.update(member); + log.info("카카오 - 토큰 저장 후 로그인"); } else if (member.getMemAuthId() != 0) { //사용자 이메일이 DB에 존재하고 Access 토큰, Refresh 토큰이 존재하는 경우 loginService.updateToken(member.getMemAuthId(), accessToken); + log.info("카카오 - 토큰 갱신 후 로그인"); } session.setAttribute("loginId", userInfo.getEmail()); From 7fa8fb4eeba51a20460fa939569c9a10a5a38b92 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:26:04 +0900 Subject: [PATCH 335/895] =?UTF-8?q?[FIX]=20MemberController.loginByKakao?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=20=EC=9C=A0=EB=AC=B4=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=20=EC=8B=9C=20null=20=EC=97=AC=EB=B6=80=EB=A5=BC=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/controller/MemberController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index a5dfa83c..64d1f517 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -200,13 +200,13 @@ public String loginByKakao(@RequestParam String code, HttpSession session) { //사용자 이메일이 DB에 존재하지 않는 경우 joinService.joinBySns(userInfo, accessToken); log.info("카카오 - 회원가입 후 로그인"); - } else if (member.getMemAuthId() == 0) { + } else if (member.getMemAuthId() == null) { //사용자 이메일이 DB에 존재하지만 Access 토큰, Refresh 토큰이 설정되어 있지 않는 경우 Auth auth = loginService.saveToken(accessToken); member.setMemAuthId(auth.getAuthId()); loginService.update(member); log.info("카카오 - 토큰 저장 후 로그인"); - } else if (member.getMemAuthId() != 0) { + } else if (member.getMemAuthId() != null) { //사용자 이메일이 DB에 존재하고 Access 토큰, Refresh 토큰이 존재하는 경우 loginService.updateToken(member.getMemAuthId(), accessToken); log.info("카카오 - 토큰 갱신 후 로그인"); From cd9446fd788dcf939087dadcc7869bb30bce73c5 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 18:42:49 +0900 Subject: [PATCH 336/895] =?UTF-8?q?[DOCS]=20HomeController=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/HomeController.java | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 src/main/java/com/effourt/calenkit/controller/HomeController.java diff --git a/src/main/java/com/effourt/calenkit/controller/HomeController.java b/src/main/java/com/effourt/calenkit/controller/HomeController.java deleted file mode 100644 index 9d8b164a..00000000 --- a/src/main/java/com/effourt/calenkit/controller/HomeController.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.effourt.calenkit.controller; - -import com.effourt.calenkit.domain.Alarm; -import com.effourt.calenkit.domain.Team; -import com.effourt.calenkit.repository.AlarmRepository; -import com.effourt.calenkit.repository.ScheduleRepository; -import com.effourt.calenkit.repository.TeamRepository; -import com.effourt.calenkit.service.AlarmService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import javax.servlet.http.HttpSession; -import java.util.ArrayList; -import java.util.List; - -@Controller -@RequiredArgsConstructor -public class HomeController { - private final AlarmRepository alarmRepository; - private final TeamRepository teamRepository; - //private final MyScheduleService myScheduleService; - - - // => 권한처리 (로그인한 회원만 요청 가능한 요청처리메소드) - // http://localhost:8080/hihi - @GetMapping("/hihi") - public String main( HttpSession session, Model model){ - - model.addAttribute("testTitle", "일정제목"); - - //세션에서 로그인아이디 반환받아 저장 - //String loginId = (String)session.getAttribute("loginId"); - String loginId = "member"; - - //개인 알람리스트 조회 - List alarmList = alarmRepository.findByAlMid(loginId); - if(alarmList.size()!=0){ - model.addAttribute("alarmList", alarmList); - } - - /* - //개인 스케줄리스트 조회 - List teamList = teamRepository.findByMid(loginId); - if(teamList.size()!=0){ - model.addAttribute("teamList", teamList); - } - */ - /* - //개인 북마크한 스케줄리스트 조회 - List bookmarkList = new ArrayList<>(); - if(teamList.size()!=0){ - for (Team team : teamList) { - if (team.getTeamBookmark()==1) { - bookmarkList.add(team); - } - } - model.addAttribute("bookmarkList", bookmarkList); - } - */ - return "main"; - } - - - -} From 12129a9c21f8119b52077a5258be6c3317784bc9 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 18:44:00 +0900 Subject: [PATCH 337/895] =?UTF-8?q?[FEAT]=20=EC=82=AC=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=EB=B0=94=20=EA=B0=9C=EC=9D=B8=20=EC=95=8C=EB=9E=8C=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 920b9469..3e0c8c98 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -17,23 +17,19 @@

cat

+ + + - +

+ +

@@ -172,10 +174,14 @@

로그인

$("#initializePasswordBtn").click(function() { const loginId = $("#loginId").val(); let result = sendCode(loginId); - if (result == "ok") { - $("#initializePasswordBtn").css("display", "none"); - $("#initializeCodeDiv").css("display", "block"); - } + $("#initializePasswordBtn").css("display", "none"); + $("#initializeCodeDiv").css("display", "block"); + }); + + //비밀번호 초기화 코드로 로그인 버튼 클릭 이벤트 + $("#initializeCodeBtn").click(function() { + $("#loginForm").prop("action", domainURL + "/login/initialize-code"); + $("#loginForm").submit(); }); From b6cf3d20b5e119cbab7ef506facff07ebcd31ef2 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 15:53:16 +0900 Subject: [PATCH 343/895] =?UTF-8?q?[FEAT]=20=EC=95=84=EC=9D=B4=EB=94=94?= =?UTF-8?q?=EC=97=90=20=ED=95=B4=EB=8B=B9=ED=95=98=EB=8A=94=20=EB=B9=84?= =?UTF-8?q?=EB=B0=80=EB=B2=88=ED=98=B8=20UPDATE=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/service/LoginService.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/service/LoginService.java b/src/main/java/com/effourt/calenkit/service/LoginService.java index 3fda1dce..17aa7aa4 100644 --- a/src/main/java/com/effourt/calenkit/service/LoginService.java +++ b/src/main/java/com/effourt/calenkit/service/LoginService.java @@ -7,6 +7,7 @@ import com.effourt.calenkit.dto.AccessTokenRequest; import com.effourt.calenkit.dto.AccessTokenResponse; import com.effourt.calenkit.dto.AuthUserInfoResponse; +import com.effourt.calenkit.exception.MemberNotFoundException; import com.effourt.calenkit.repository.AuthRepository; import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.util.EmailSend; @@ -33,6 +34,13 @@ public void saveMember(Member member) { memberRepository.save(member); } + public void updatePassword(String memId, String password) { + Member member = new Member(); + member.setMemId(memId); + member.setMemPw(password); + memberRepository.updatePassword(member); + } + //Member 테이블에서 이메일에 해당하는 회원 정보 조회 public Member getMemberById(String id) { return memberRepository.findByMemId(id); From 2acbfb6bd0026340869c599453c0d7aa84bff698 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 15:53:36 +0900 Subject: [PATCH 344/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index eb3ab2ec..4fa7f843 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -45,8 +45,8 @@ public class MemberController { * @param idMap * @return */ - @ResponseBody @PostMapping("/login/check") + @ResponseBody public String checkId(@RequestBody Map idMap) { String memId = idMap.get("id"); String loginType = loginService.checkMember(memId); @@ -136,6 +136,18 @@ public String loginByJoin(String memId, String registerCode, HttpSession session return "register"; } + @PostMapping("/login/initialize-code") + public String loginByInitialize(String memId, String initializeCode, HttpSession session) { + //비밀번호 초기화 (null로 지정) + loginService.updatePassword(memId, null); + //초기화 코드 검증 후 로그인 + String code = (String) session.getAttribute(initializeCode); + if (code.equals(memId + "ACCESS")) { + session.setAttribute("loginId", memId); + } + return "main"; + } + /** * 이메일 회원가입 * @param member 아이디(이메일), 비밀번호, 닉네임, 프로필 이미지(선택) 정보 저장 객체 From 694e92fa0cea41c21730ed8d1c9ec4e186a28b06 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 17:58:23 +0900 Subject: [PATCH 345/895] =?UTF-8?q?[FEAT]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=84=20AJAX=EB=A1=9C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD,=20lo?= =?UTF-8?q?gin.html=20=EB=B3=B4=EC=97=AC=EC=A4=84=20=ED=83=9C=EA=B7=B8,=20?= =?UTF-8?q?=EA=B0=90=EC=B6=9C=20=ED=83=9C=EA=B7=B8,=20=EA=B0=92=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=ED=95=A0=20=ED=83=9C=EA=B7=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8A=94=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80,=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B0=BE=EA=B8=B0=20=EC=9D=B4=ED=9B=84=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=9C=EB=A1=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/login.html | 122 ++++++++++++++++----- src/main/resources/templates/register.html | 31 +++++- 2 files changed, 123 insertions(+), 30 deletions(-) diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 2fdebd42..e5f7cd48 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -54,12 +54,16 @@

로그인

- -

- +

+ +

+ +

+ -

+

@@ -74,8 +78,10 @@

로그인

diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index e8152c87..6c21c30f 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -57,12 +57,37 @@

회원가입

- From 45568bd44c8ec074c9d419952e0eb54d0d14b94b Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 17:59:00 +0900 Subject: [PATCH 346/895] =?UTF-8?q?[DOCS]=20=EC=9C=A0=EC=A0=80=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C(=EC=9D=BC=EB=B0=98=20=EC=82=AC=EC=9A=A9=EC=9E=90,=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90)=20=EC=B2=B4=ED=81=AC=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=EC=85=89=ED=84=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/interceptor/UserAuthInterceptor.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java diff --git a/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java new file mode 100644 index 00000000..b116a8d3 --- /dev/null +++ b/src/main/java/com/effourt/calenkit/util/interceptor/UserAuthInterceptor.java @@ -0,0 +1,37 @@ +package com.effourt.calenkit.util.interceptor; + +import com.effourt.calenkit.domain.Member; +import com.effourt.calenkit.repository.MemberRepository; +import com.effourt.calenkit.service.LoginService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +@Slf4j +public class UserAuthInterceptor implements HandlerInterceptor { + + private MemberRepository memberRepository; + + public UserAuthInterceptor(MemberRepository memberRepository) { + this.memberRepository = memberRepository; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + HttpSession session = request.getSession(); + String loginId = (String) session.getAttribute("loginId"); + log.info("UserAuthInterceptor loginId={}", loginId); + + Member findMember = memberRepository.findByMemId(loginId); + log.info("UserAuthInterceptor findMemberId={}, findMemberStatus={}", findMember.getMemId(), findMember.getMemStatus()); + if (findMember.getMemStatus() == 9) { + response.sendRedirect("/admin"); + } + return true; + } +} From d5752a112e2035d224f1b1052dc252539a019ab1 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 17:59:29 +0900 Subject: [PATCH 347/895] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C(=EC=9D=BC=EB=B0=98=20=EC=82=AC=EC=9A=A9=EC=9E=90,=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90)=20=EC=B2=B4=ED=81=AC=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=EC=85=89=ED=84=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=A5=BC=20=EC=84=A4=EC=A0=95=EC=97=90=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/config/InterceptorConfig.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java index c66abfb6..1c6270a5 100644 --- a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java +++ b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java @@ -1,18 +1,30 @@ package com.effourt.calenkit.config; +import com.effourt.calenkit.repository.MemberRepository; +import com.effourt.calenkit.service.LoginService; import com.effourt.calenkit.util.interceptor.LoginInterceptor; +import com.effourt.calenkit.util.interceptor.UserAuthInterceptor; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@RequiredArgsConstructor public class InterceptorConfig implements WebMvcConfigurer { + private final MemberRepository memberRepository; + @Override public void addInterceptors(InterceptorRegistry registry) { + //유저 로그인 상태 체크 인터셉터 registry.addInterceptor(new LoginInterceptor()) .order(1) .addPathPatterns("") .excludePathPatterns(""); + //유저 권한 체크 인터셉터 + registry.addInterceptor(new UserAuthInterceptor(memberRepository)) + .order(2) + .addPathPatterns(""); } } From b227b383a10c14940cc0785d02c5f7994e743002 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:00:11 +0900 Subject: [PATCH 348/895] =?UTF-8?q?[FEAT]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8,=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=BD=94=EB=93=9C=EB=A1=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8,=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EC=9D=84=20REST=20API=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 4fa7f843..4ec6c740 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -76,7 +76,7 @@ public String sendCode(@RequestBody Map idMap, HttpSession sessi log.info("email id={}", memId); log.info("subject={}", subject); log.info("message={}", message); - return "ok"; + return "OK"; } @@ -95,28 +95,34 @@ public String login() { * @return */ @PostMapping("/login/password") - public String loginByPassword(@ModelAttribute Member member, HttpSession session) { + @ResponseBody + public String loginByPassword(@RequestBody Member member, HttpSession session) { Member findMember = loginService.getMemberById(member.getMemId()); if (findMember.getMemPw().equals(member.getMemPw())) { session.setAttribute("loginId", member.getMemId()); + } else { + return "아이디 또는 비밀번호를 잘못 입력하셨습니다."; } - return "main"; + return "OK"; } /** * 로그인 코드로 로그인 - * @param memId - * @param loginCode + * @param loginCodeMap * @param session * @return */ @PostMapping("/login/login-code") - public String loginByCode(String memId, String loginCode, HttpSession session) { - String code = (String) session.getAttribute(loginCode); + @ResponseBody + public String loginByCode(@RequestBody Map loginCodeMap, HttpSession session) { + String memId = loginCodeMap.get("id"); + String code = (String) session.getAttribute(loginCodeMap.get("loginCode")); if (code.equals(memId + "ACCESS")) { session.setAttribute("loginId", memId); + } else { + return "로그인 코드를 잘못 입력하셨습니다."; } - return "main"; + return "OK"; } /** @@ -137,15 +143,19 @@ public String loginByJoin(String memId, String registerCode, HttpSession session } @PostMapping("/login/initialize-code") - public String loginByInitialize(String memId, String initializeCode, HttpSession session) { + @ResponseBody + public String loginByInitialize(@RequestBody Map initializeCodeMap, HttpSession session) { + String memId = initializeCodeMap.get("id"); //비밀번호 초기화 (null로 지정) loginService.updatePassword(memId, null); //초기화 코드 검증 후 로그인 - String code = (String) session.getAttribute(initializeCode); + String code = (String) session.getAttribute(initializeCodeMap.get("initializeCode")); if (code.equals(memId + "ACCESS")) { session.setAttribute("loginId", memId); + } else { + return "초기화 코드를 잘못 입력하였습니다."; } - return "main"; + return "OK"; } /** @@ -154,9 +164,11 @@ public String loginByInitialize(String memId, String initializeCode, HttpSession * @return */ @PostMapping("/join") - public String join(@ModelAttribute Member member) { + @ResponseBody + public String join(@RequestBody Member member, HttpSession session) { joinService.joinByEmail(member); - return "main"; + session.setAttribute("loginId", member.getMemId()); + return "OK"; } /** From 0c62567808de406e17844b03ffd444afabbfa0eb Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:18:35 +0900 Subject: [PATCH 349/895] =?UTF-8?q?[FEAT]=20=ED=9A=8C=EC=9B=90=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20UPDATE=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/service/LoginService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/service/LoginService.java b/src/main/java/com/effourt/calenkit/service/LoginService.java index 17aa7aa4..17feade2 100644 --- a/src/main/java/com/effourt/calenkit/service/LoginService.java +++ b/src/main/java/com/effourt/calenkit/service/LoginService.java @@ -34,6 +34,7 @@ public void saveMember(Member member) { memberRepository.save(member); } + //회원 비밀번호 UPDATE public void updatePassword(String memId, String password) { Member member = new Member(); member.setMemId(memId); @@ -41,6 +42,11 @@ public void updatePassword(String memId, String password) { memberRepository.updatePassword(member); } + //회원 정보 UPDATE + public void update(Member member) { + memberRepository.update(member); + } + //Member 테이블에서 이메일에 해당하는 회원 정보 조회 public Member getMemberById(String id) { return memberRepository.findByMemId(id); From 6cffade3df0563eea18b710bbf3d4cde24badcc4 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:19:15 +0900 Subject: [PATCH 350/895] =?UTF-8?q?[FEAT]=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20-=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=9D=B4=EB=A9=94=EC=9D=BC=EC=9D=B4=20DB=EC=97=90=20?= =?UTF-8?q?=EC=A1=B4=EC=9E=AC=ED=95=98=EC=A7=80=EB=A7=8C=20Access=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0,=20Refresh=20=ED=86=A0=ED=81=B0=EC=9D=B4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=EB=90=98=EC=96=B4=20=EC=9E=88=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20UPDATE=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/controller/MemberController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 4ec6c740..a5dfa83c 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -199,14 +199,17 @@ public String loginByKakao(@RequestParam String code, HttpSession session) { if (member == null) { //사용자 이메일이 DB에 존재하지 않는 경우 joinService.joinBySns(userInfo, accessToken); + log.info("카카오 - 회원가입 후 로그인"); } else if (member.getMemAuthId() == 0) { //사용자 이메일이 DB에 존재하지만 Access 토큰, Refresh 토큰이 설정되어 있지 않는 경우 Auth auth = loginService.saveToken(accessToken); member.setMemAuthId(auth.getAuthId()); - loginService.saveMember(member); + loginService.update(member); + log.info("카카오 - 토큰 저장 후 로그인"); } else if (member.getMemAuthId() != 0) { //사용자 이메일이 DB에 존재하고 Access 토큰, Refresh 토큰이 존재하는 경우 loginService.updateToken(member.getMemAuthId(), accessToken); + log.info("카카오 - 토큰 갱신 후 로그인"); } session.setAttribute("loginId", userInfo.getEmail()); From 61438eddf6c385199e5f5c2545dc416020f1395c Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Tue, 2 May 2023 18:26:04 +0900 Subject: [PATCH 351/895] =?UTF-8?q?[FIX]=20MemberController.loginByKakao?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=20=EC=9C=A0=EB=AC=B4=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=20=EC=8B=9C=20null=20=EC=97=AC=EB=B6=80=EB=A5=BC=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/controller/MemberController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index a5dfa83c..64d1f517 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -200,13 +200,13 @@ public String loginByKakao(@RequestParam String code, HttpSession session) { //사용자 이메일이 DB에 존재하지 않는 경우 joinService.joinBySns(userInfo, accessToken); log.info("카카오 - 회원가입 후 로그인"); - } else if (member.getMemAuthId() == 0) { + } else if (member.getMemAuthId() == null) { //사용자 이메일이 DB에 존재하지만 Access 토큰, Refresh 토큰이 설정되어 있지 않는 경우 Auth auth = loginService.saveToken(accessToken); member.setMemAuthId(auth.getAuthId()); loginService.update(member); log.info("카카오 - 토큰 저장 후 로그인"); - } else if (member.getMemAuthId() != 0) { + } else if (member.getMemAuthId() != null) { //사용자 이메일이 DB에 존재하고 Access 토큰, Refresh 토큰이 존재하는 경우 loginService.updateToken(member.getMemAuthId(), accessToken); log.info("카카오 - 토큰 갱신 후 로그인"); From 81f2d2bd578d957048f616bc576e4b681a9cb212 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 18:57:26 +0900 Subject: [PATCH 352/895] =?UTF-8?q?[FEAT]=20=ED=9C=B4=EC=A7=80=ED=86=B5,?= =?UTF-8?q?=20=EC=9D=BC=EC=A0=95=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScheduleController.java | 67 +++++++++++++------ .../calenkit/service/MyScheduleService.java | 2 +- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java index 7f6688cc..379d1d00 100644 --- a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java +++ b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java @@ -3,12 +3,11 @@ import com.effourt.calenkit.domain.Alarm; import com.effourt.calenkit.domain.Schedule; import com.effourt.calenkit.domain.Team; -import com.effourt.calenkit.repository.ScheduleRepository; -import com.effourt.calenkit.repository.TeamRepository; -import com.effourt.calenkit.repository.TeamRepositoryImpl; +import com.effourt.calenkit.repository.*; import com.effourt.calenkit.service.MyScheduleService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.math.raw.Mod; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -24,10 +23,13 @@ @RequiredArgsConstructor public class ScheduleController { private final MyScheduleService myScheduleService; - private final SqlSessionTemplate sqlSessionTemplate; private final TeamRepository teamRepository; private final ScheduleRepository scheduleRepository; + private final MemberRepository memberRepository; + private final AlarmRepository alarmRepository; + //http://localhost:8080/ + //http://localhost:8080/main /** * 달력에 일정 출력(메인페이지) */ @@ -72,10 +74,11 @@ public String main(Model model, HttpSession session) { * * @return 캘린더 라이브러리에 필요한 필드명 : 일정값 을 매핑한 맵리스트 */ - @GetMapping("main_ajax") + @GetMapping("/main_ajax") @ResponseBody public List mainAJAX() { - String id="employee"; //session으로 현재 아이디 받아오기 + //String loginId = (String)session.getAttribute("loginId"); //session으로 현재 아이디 받아오기 + String id="employee"; Date temp=new Date(); //출력 기준 월 받아오기 SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM"); String date=simpleDateFormat.format(temp).toString(); @@ -89,7 +92,7 @@ public List mainAJAX() { map.put("title", schedule.getScTitle()); map.put("start", schedule.getScSdate()); map.put("end", schedule.getScEdate()); - map.put("url", "detail/" + schedule.getScNo()); + map.put("url", "schedules?scNo=" + schedule.getScNo()); mapList.add(map); //map에 일정 저장 } return mapList; //일정이 저장된 mapList값 보내기 @@ -100,9 +103,19 @@ public List mainAJAX() { * @param scNo * @return 일정 상세 페이지 HTML */ - @RequestMapping("detail/{scNo}") - public String ScheduleDetail(@PathVariable Integer scNo, Model model) { - model.addAttribute("schdule",scheduleRepository.findByScNo(scNo)); + //http://localhost:8080/schedules?scNo=1 + @GetMapping("/schedules") + public String getMyTeam(@RequestParam int scNo, Model model) { + Schedule schedule = scheduleRepository.findByScNo(scNo); //일정 데이터 + List teamList = teamRepository.findBySno(scNo); //권한 데이터 + List imageList = new ArrayList<>(); //이미지 리스트 + for(int i=0; i getMySchedule(String id, String date) { return scheduleRepository.findAllByScNo(map); } - // [내 스케줄 즐겨찾기 출력] - 수정 필요 + // [내 스케줄 즐겨찾기 출력] // => 현재 세션 아이디(loginMember) 기준 team, 출력 기준이 될 연월(date)을 매개변수로 입력받음 public List getBookmark(String id, String date) { Map map=new HashMap<>(); From 5c6911eb3ecd5613b3dc5773bacc88c972f685f9 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 18:42:49 +0900 Subject: [PATCH 353/895] =?UTF-8?q?[DOCS]=20HomeController=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/HomeController.java | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 src/main/java/com/effourt/calenkit/controller/HomeController.java diff --git a/src/main/java/com/effourt/calenkit/controller/HomeController.java b/src/main/java/com/effourt/calenkit/controller/HomeController.java deleted file mode 100644 index 9d8b164a..00000000 --- a/src/main/java/com/effourt/calenkit/controller/HomeController.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.effourt.calenkit.controller; - -import com.effourt.calenkit.domain.Alarm; -import com.effourt.calenkit.domain.Team; -import com.effourt.calenkit.repository.AlarmRepository; -import com.effourt.calenkit.repository.ScheduleRepository; -import com.effourt.calenkit.repository.TeamRepository; -import com.effourt.calenkit.service.AlarmService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import javax.servlet.http.HttpSession; -import java.util.ArrayList; -import java.util.List; - -@Controller -@RequiredArgsConstructor -public class HomeController { - private final AlarmRepository alarmRepository; - private final TeamRepository teamRepository; - //private final MyScheduleService myScheduleService; - - - // => 권한처리 (로그인한 회원만 요청 가능한 요청처리메소드) - // http://localhost:8080/hihi - @GetMapping("/hihi") - public String main( HttpSession session, Model model){ - - model.addAttribute("testTitle", "일정제목"); - - //세션에서 로그인아이디 반환받아 저장 - //String loginId = (String)session.getAttribute("loginId"); - String loginId = "member"; - - //개인 알람리스트 조회 - List alarmList = alarmRepository.findByAlMid(loginId); - if(alarmList.size()!=0){ - model.addAttribute("alarmList", alarmList); - } - - /* - //개인 스케줄리스트 조회 - List teamList = teamRepository.findByMid(loginId); - if(teamList.size()!=0){ - model.addAttribute("teamList", teamList); - } - */ - /* - //개인 북마크한 스케줄리스트 조회 - List bookmarkList = new ArrayList<>(); - if(teamList.size()!=0){ - for (Team team : teamList) { - if (team.getTeamBookmark()==1) { - bookmarkList.add(team); - } - } - model.addAttribute("bookmarkList", bookmarkList); - } - */ - return "main"; - } - - - -} From 9b8d0ec5a67f2a45632ec348e2ee566cee422363 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Tue, 2 May 2023 18:44:00 +0900 Subject: [PATCH 354/895] =?UTF-8?q?[FEAT]=20=EC=82=AC=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=EB=B0=94=20=EA=B0=9C=EC=9D=B8=20=EC=95=8C=EB=9E=8C=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 920b9469..3e0c8c98 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -17,23 +17,19 @@

cat

-
- 알림    +
+ 알림    4
-
+ +
@@ -74,6 +70,9 @@

cat

+ + + From 88474761a1ad859bbe00ee99adce980f4ebc7e7b Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:11:32 +0900 Subject: [PATCH 367/895] =?UTF-8?q?[FEAT]=EC=9D=BC=EC=A0=95,=20=EC=A6=90?= =?UTF-8?q?=EA=B2=A8=EC=B0=BE=EA=B8=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5,=20=EC=99=84=EC=A0=84=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/ScheduleController.java | 14 +++----------- src/main/resources/templates/sidebar.html | 14 ++++++-------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java index 379d1d00..ce6f6bfb 100644 --- a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java +++ b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java @@ -50,22 +50,14 @@ public String main(Model model, HttpSession session) { model.addAttribute("alarmList", alarmList); } model.addAttribute("titleList", titleList); - for(int i=0;i scheduleList=myScheduleService.getMySchedule(loginId, null); model.addAttribute("scheduleList", scheduleList); //개인 즐겨찾기리스트 조회 List bookmarkList=myScheduleService.getBookmark(loginId, null); - model.addAttribute("bookmarkList", bookmarkList);*/ + model.addAttribute("bookmarkList", bookmarkList); return "main"; } diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 3e0c8c98..c4e1b5b0 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -42,10 +42,9 @@

cat

즐겨찾기
@@ -54,10 +53,9 @@

cat

일정
From 1161ced2a4442e51a2023ce6e7ed93e1c061cce5 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:11:48 +0900 Subject: [PATCH 368/895] =?UTF-8?q?[FIX]DIV=20=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=95=88=EB=8B=AB=ED=9E=8C=EA=B1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index ef6b8d45..0de9b80a 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -88,6 +88,7 @@ + From bc9533ff3c00d8853d787ea678b1d04015d6a109 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:52:29 +0900 Subject: [PATCH 369/895] =?UTF-8?q?[FEAT]=ED=9C=B4=EC=A7=80=ED=86=B5=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1,?= =?UTF-8?q?=20Status=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index c4e1b5b0..95221cfb 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -43,7 +43,9 @@

cat

@@ -54,7 +56,9 @@

cat

@@ -116,6 +120,15 @@
  • Separated link
  • +
    +
      + + +
    • ([[${schedule.getScNo}]])[[${schedule.getScSdate}]] ~ [[${schedule.getScEdate}]] / [[${schedule.getScTitle}]]
    • +
      +
      +
    +
    -
      - +
        + -
      • - - - - -    cat@cat.com [[team.teamMid]] +
      • + + + + + + [[${team.teamMid}]] [[${imageList.get(teamStat.index)}]] - -
        - -
        -
      • + +
        + +
        +
    @@ -90,12 +90,15 @@ - From c1887152312894163e8d09fdd454d8855bbb9318 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 01:40:48 +0900 Subject: [PATCH 372/895] =?UTF-8?q?[FIX]=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=EC=97=90=20@Param=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/mapper/TeamMapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java index 47660191..3e3353a1 100644 --- a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java @@ -2,6 +2,7 @@ import com.effourt.calenkit.domain.Team; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -10,7 +11,7 @@ public interface TeamMapper { Integer save(Team team); Integer update(Team team); - Integer delete(Integer teamSno, String teamMid); + Integer delete(@Param("teamSno") Integer teamSno, @Param("teamMid")String teamMid); List findByMid(String teamMid); List findByid(String teamMid); From ca59c67030e4eb6d3fe435e15bf6c96ba8793e8f Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:01:07 +0900 Subject: [PATCH 373/895] =?UTF-8?q?[FEAT]=20=EC=95=8C=EB=9E=8C=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/AlarmController.java | 67 +++------------- .../calenkit/service/AlarmService.java | 80 +++++++++++++------ 2 files changed, 68 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/AlarmController.java b/src/main/java/com/effourt/calenkit/controller/AlarmController.java index 43635aa9..e7eb72f3 100644 --- a/src/main/java/com/effourt/calenkit/controller/AlarmController.java +++ b/src/main/java/com/effourt/calenkit/controller/AlarmController.java @@ -1,19 +1,14 @@ package com.effourt.calenkit.controller; import com.effourt.calenkit.domain.Alarm; -import com.effourt.calenkit.domain.Schedule; -import com.effourt.calenkit.dto.AjaxStatus; -import com.effourt.calenkit.dto.AjaxStatus; import com.effourt.calenkit.dto.AlarmCate; import com.effourt.calenkit.repository.AlarmRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.service.AlarmService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; @@ -31,7 +26,8 @@ public class AlarmController { * @param alMid * @return */ - // http://localhost:8080/alarms/{alMid} + // http://localhost:8080/alarms/member + // http://localhost:8080/alarms/Test1@test1,com @GetMapping("/alarms/{alMid}") @ResponseBody public List showMyAlarmList(@PathVariable String alMid, HttpSession session){ @@ -40,70 +36,31 @@ public List showMyAlarmList(@PathVariable String alMid, HttpSession sessi List alarmList = new ArrayList<>(); if(loginId.equals(alMid)){ alarmList = alarmRepository.findByAlMid(loginId); - return alarmList; + return alarmList; } else { return null; } } - /* - [ - { - "alNo": 1, - "alScno": 1, - "alMid": "member", - "alStatus": 1, - "alTime": "2023-04-27", - "alCate": 1 - }, - { - "alNo": 111, - "alScno": 1, - "alMid": "member", - "alStatus": 1, - "alTime": "2023-04-27", - "alCate": 1 - } - ] - */ /** - * 일정 수정 일어날 시 알람 리소스 추가 - 1 (알람추가지만 .. POST말고, GET으로 요청함) + * 일정 수정 일어날 시 알람 리소스 추가 - 1 * 일정 삭제 일어날 시 알람 리소스 추가 - 0 * @return */ - // http://localhost:8080/alarms/{kind}?scNo=1 - // http://localhost:8080/alarms/1?scNo=1 - // http://localhost:8080/alarms/0?scNo=1 - @GetMapping("/alarms/{kind}") + // http://localhost:8080/alarms/1?scNo=57 + // http://localhost:8080/alarms/0?scNo=58 + @PostMapping ("/alarms/{kind}") @ResponseBody - public AjaxStatus addAlarms(@PathVariable String kind, @RequestParam int scNo) { - int kinds = Integer.parseInt(kind); + public String addAlarms(@PathVariable int kind, @RequestParam int scNo) { - if(AlarmCate.MODIFY_SCHEDULE.ordinal()==kinds){ + if(AlarmCate.MODIFY_SCHEDULE.ordinal()==kind){ alarmService.addAlarmByModifySchedule(scNo); - } else if (AlarmCate.DELETE_SCHDULE.ordinal()==kinds){ + } else if (AlarmCate.DELETE_SCHDULE.ordinal()==kind){ alarmService.addAlarmByDeleteSchedule(scNo); } else { - return AjaxStatus.FAIL; + return "fail"; } - return AjaxStatus.OK; - } - - /** - * 동행 추가 일어날 시 알람 리소스 추가 - * @return - */ - // http://localhost:8080/alarms?scNo=1 - /* - @GetMapping("/alarms") - @ResponseBody - public Status addAlarms(@RequestParam int scNo) { - alarmService.addAlarmByModifySchedule(scNo); - return Status.ADD_OK; + return "ok"; } - */ - - //1. 일정 수정 >> 비동기로 스케줄테이블 수정 처리하는 요청 처리 메소드 PATCH - //2. 일정 수정 >> 동행에게 알람을 울리기 위한 요청 처리 메소드 } \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index 8a4aa19c..db8611e4 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -35,12 +35,9 @@ public void addAlarmByModifySchedule(Integer scNo){ String[] idList = findIdList(scNo); //idList[0] , idList[1], idList[2] ... for(int i=0; i findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ + alarm.setAlScno(scNo); alarm.setAlStatus(0);//알람상태 0으로 변경 - 동행에게는 해당 스케줄의 알람이 출력되지 않음 alarmRepository.update(alarm); } @@ -70,7 +68,7 @@ public void addAlarmByDeleteSchedule(Integer scNo){ alarm.setAlScno(scNo); //3. 알람 울릴 스케줄번호 //4. 알람 상태 - 1(고정해놨음) //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(AlarmCate.DELETE_SCHDULE.ordinal()); //6. 0 + alarm.setAlCate(AlarmCate.DELETE_SCHDULE.ordinal()); alarmRepository.save(alarm); //idList의 갯수 만큼 save(alarm) 호출 } } @@ -84,7 +82,6 @@ public void addAlarmByDeleteSchedule(Integer scNo){ public void removeAlarmByScno(Integer scNo){ List findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ - alarm.setAlStatus(0); alarmRepository.delete(alarm.getAlNo());//알람삭제 } } @@ -92,39 +89,74 @@ public void removeAlarmByScno(Integer scNo){ /** * 일정에 초대할 시 울릴 알람 서비스 * 단, 일정에 초대받은 아이디의 알람 객체만 DB에 저장될 것임 - 일괄처리로 알람객체가 저장되는 것이 아님 - * @param addId : 일정에 초대할 아이디 * @param scNo : 일정 번호 + * @param addId : 일정에 초대할 아이디 */ @Transactional - public Alarm addAlarmBySaveTeam(String addId, Integer scNo){ + public Alarm addAlarmBySaveTeam(Integer scNo,String addId){ Alarm alarm = new Alarm(); - //1. 알람 번호 - 자동증가값 - alarm.setAlMid(addId); //2. 알람 울릴 아이디 - alarm.setAlScno(scNo); //3. 알람 울릴 스케줄 - //4. 알람 상태 - 1(고정해놨음) - //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(AlarmCate.SAVE_TEAM.ordinal()); //6. 2 + alarm.setAlMid(addId); + alarm.setAlScno(scNo); + alarm.setAlCate(AlarmCate.SAVE_TEAM.ordinal()); return alarmRepository.save(alarm); } /** - * 일정의 권한을 변경할 시 울릴 알람 서비스 + * 일정에 삭제될 시 울릴 알람 서비스 + * 단, 일정에 삭제된 아이디의 알람 객체만 DB에 저장될 것임 - 일괄처리로 알람객체가 저장되는 것이 아님 + * @param scNo : 일정 번호 + * @param removeId : 일정을 삭제할 아이디 + */ + //@Transactional + public Alarm addAlarmByDeleteTeam(Integer scNo,String removeId){ + int alScno = scNo; + List findAlarmList = alarmRepository.findByAlScno(alScno); + for(Alarm alarm:findAlarmList){ + if(alarm.getAlMid().equals(removeId)){ //해당 아이디만 알람상태 0으로 변경 + alarm.setAlScno(alScno); + alarm.setAlStatus(0); + alarmRepository.update(alarm); + } + } + Alarm NewAlarm = new Alarm(); + NewAlarm.setAlMid(removeId); + NewAlarm.setAlScno(alScno); + NewAlarm.setAlCate(AlarmCate.REMOVE_TEAM.ordinal()); + return alarmRepository.save(NewAlarm); + } + + /** + * 일정의 권한을 읽기로 변경할 시 울릴 알람 서비스 * 단, 권한을 변경받은 동행의 알람 객체만 DB에 저장될 것임 - 일괄처리로 알람객체가 저장되는 것이 아님 * @param updateId : 일정 권한을 변경할 아이디 * @param scNo : 일정 번호 */ @Transactional - public void addAlarmByUpdateTeamLevel(String updateId, Integer scNo){ + public void addAlarmByUpdateTeamLevelRead(String updateId, Integer scNo){ String[] idList = findIdList(scNo); //idList[0] , idList[1], idList[2] ... for(String id:idList){ if(id.equals(updateId)) { Alarm alarm = new Alarm(); - //1. 알람 번호 - 자동증가값 - alarm.setAlMid(updateId); //2. 알람 울릴 아이디 - alarm.setAlScno(scNo); //3. 알람 울릴 스케줄 - //4. 알람 상태 - 1(고정해놨음) - //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL.ordinal()); //6. 3 + alarm.setAlMid(updateId); + alarm.setAlScno(scNo); + alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL_READ.ordinal()); + alarmRepository.save(alarm); + } + } + } + + /** + * 일정의 권한을 쓰기로 변경할 시 울릴 알람 서비스 + */ + @Transactional + public void addAlarmByUpdateTeamLevelWrite(String updateId, Integer scNo){ + String[] idList = findIdList(scNo); + for(String id:idList){ + if(id.equals(updateId)) { + Alarm alarm = new Alarm(); + alarm.setAlMid(updateId); + alarm.setAlScno(scNo); + alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL_WRITE.ordinal()); alarmRepository.save(alarm); } } From 3ed8905ae3d0bcac454430c643121dfc3afb7929 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:01:19 +0900 Subject: [PATCH 374/895] =?UTF-8?q?[FEAT]=20=EC=95=8C=EB=9E=8C=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/dto/AlarmCate.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/dto/AlarmCate.java b/src/main/java/com/effourt/calenkit/dto/AlarmCate.java index 64f5482b..a57a6fec 100644 --- a/src/main/java/com/effourt/calenkit/dto/AlarmCate.java +++ b/src/main/java/com/effourt/calenkit/dto/AlarmCate.java @@ -1,9 +1,11 @@ package com.effourt.calenkit.dto; //알람 울릴 카테고리 -// => 일정 삭제(0),수정(1),초대(2),권한변경(3) +// => 일정 삭제(0),일정 수정(1) +// => 일정 초대(2), 초대된 일정에서 삭제(3) +// => 권한 읽기로 변경(4), 권한 쓰기로 변경(5) public enum AlarmCate { - DELETE_SCHDULE, MODIFY_SCHEDULE, SAVE_TEAM, UPDATE_TEAMLEVEL; + DELETE_SCHDULE, MODIFY_SCHEDULE, SAVE_TEAM, REMOVE_TEAM, UPDATE_TEAMLEVEL_READ,UPDATE_TEAMLEVEL_WRITE; /* public static void main(String[] args) { //인덱스값 출력됨 - type int From 282b23e8a0223c68981acf2a3b9c8ae1ed6152c8 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:02:09 +0900 Subject: [PATCH 375/895] =?UTF-8?q?[DOCS]=20Naming=20Convention=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ddl.sql | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sql/ddl.sql b/sql/ddl.sql index 30eb901e..61a23ec9 100644 --- a/sql/ddl.sql +++ b/sql/ddl.sql @@ -8,3 +8,12 @@ -- [TEST] 테스트 코드 추가 삭제 변경 - 테스트 코드 관련 모든 변경사항들 -- [ETC] 기타 애매한 경우 + +-- DOMAIN REPOSITORY(mybatis3, JPA) SERVICE +-- INSERT SAVE ADD +-- UPDATE UPDATE MODIFY +-- DELETE DELETE REMOVE +-- SELECT FIND GET + + + From b32e7f24656500f50988b0677ba7408d4a475cef Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:02:39 +0900 Subject: [PATCH 376/895] =?UTF-8?q?[FEAT]=20=EB=8F=99=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=EC=82=AD=EC=A0=9C,=EA=B6=8C=ED=95=9C=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 37e0a270..d88b5bde 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -60,7 +60,7 @@
  • - + [[${team.teamMid}]] [[${imageList.get(teamStat.index)}]] @@ -144,7 +144,7 @@ dataType: "json", data: JSON.stringify({"memId": memId}), success: function(result) { - location.href="/schedules?scNo="+scNo; + //location.href="/schedules?scNo="+scNo; }, error: function(xhr, status, error) { console.error("error: ", status, ", ", error); @@ -186,7 +186,7 @@ dataType: "text", data: JSON.stringify({"teamMid": teamMId}), success: function(result) { - location.href="/schedules?scNo="+scNo; + //location.href="/schedules?scNo="+scNo; }, error: function(xhr, status, error) { console.error("error: ", status, ", ", error); From 2adbcda514c3e5d62f58b7a358e5738753cc05c8 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:03:02 +0900 Subject: [PATCH 377/895] =?UTF-8?q?[FEAT]=20=EB=8F=99=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=EC=82=AD=EC=A0=9C,=EA=B6=8C=ED=95=9C=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20+=20=EC=95=8C=EB=9E=8C=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/TeamController.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/TeamController.java b/src/main/java/com/effourt/calenkit/controller/TeamController.java index 711a52c3..37df751e 100644 --- a/src/main/java/com/effourt/calenkit/controller/TeamController.java +++ b/src/main/java/com/effourt/calenkit/controller/TeamController.java @@ -6,6 +6,7 @@ import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.repository.TeamRepository; +import com.effourt.calenkit.service.AlarmService; import com.effourt.calenkit.service.TeamScheduleService; import com.effourt.calenkit.util.EmailSend; import lombok.RequiredArgsConstructor; @@ -22,6 +23,8 @@ public class TeamController { private final TeamScheduleService teamScheduleService; + private final AlarmService alarmService; + private final TeamRepository teamRepository; private final MemberRepository memberRepository; private final ScheduleRepository scheduleRepository; @@ -55,7 +58,7 @@ public List searchMyTeam(@PathVariable int scNo) { /** - * 동행 추가 + * 동행 추가 (동행추가 + 알람서비스) * */ // http://localhost:8080/teams/share/1 : memId=member // http://localhost:8080/teams/share/1 : memId=test@test.com @@ -64,17 +67,15 @@ public List searchMyTeam(@PathVariable int scNo) { @PostMapping ("/teams/share/{scNo}") @ResponseBody public Team shareTeam(@PathVariable int scNo, @RequestBody Map map) { - Team newTeam = teamScheduleService.addTeam(scNo,(String)map.get("memId")); - - if(newTeam.equals("") || newTeam==null){ //삽입 실패 - return null; //예외처리 - } + String memId = (String)map.get("memId"); + Team newTeam = teamScheduleService.addTeam(scNo,memId); + alarmService.addAlarmBySaveTeam(scNo,memId); //알람서비스 return newTeam; } /*** - * 동행의 권한 상태 변경 + * 동행의 권한 상태 변경 (권한상태변경 + 알람서비스) * @param map -> teamLevel은 무조건 - 읽기권한:0, 수정권한:1 * @return */ @@ -87,18 +88,26 @@ public String updateTeamLevel(@PathVariable int scNo,@RequestBody Map map) { - return teamScheduleService.removeTeam(scNo, map.get("teamMid")); + public String deleteMyTeam(@PathVariable int scNo,@RequestBody Map map) { + String id = map.get("teamMid"); + teamScheduleService.removeTeam(scNo, id); + alarmService.addAlarmByDeleteTeam(scNo,id); //알람서비스 + return "deleteMyTeam ok"; } From 27997c32560ae88602a29765d234a40f74d4ab80 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 04:26:37 +0900 Subject: [PATCH 378/895] =?UTF-8?q?[FIX]=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml index 15ff0787..8c855bd0 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -11,7 +11,7 @@ UPDATE ALARM SET AL_STATUS=#{alStatus} - WHERE AL_SCNO=#{scNo} + WHERE AL_SCNO=#{alScno} From 512ef782cf0221763a2508ea93e2ce9c4ce072c7 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 04:26:57 +0900 Subject: [PATCH 379/895] =?UTF-8?q?[FIX]=20addAlarmByDeleteTeam=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/service/AlarmService.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index db8611e4..4e33eeb0 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -7,12 +7,14 @@ import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.repository.TeamRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +@Slf4j @Service @RequiredArgsConstructor public class AlarmService { @@ -55,7 +57,6 @@ public void addAlarmByDeleteSchedule(Integer scNo){ //1. List findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ - alarm.setAlScno(scNo); alarm.setAlStatus(0);//알람상태 0으로 변경 - 동행에게는 해당 스케줄의 알람이 출력되지 않음 alarmRepository.update(alarm); } @@ -109,18 +110,29 @@ public Alarm addAlarmBySaveTeam(Integer scNo,String addId){ */ //@Transactional public Alarm addAlarmByDeleteTeam(Integer scNo,String removeId){ - int alScno = scNo; - List findAlarmList = alarmRepository.findByAlScno(alScno); - for(Alarm alarm:findAlarmList){ - if(alarm.getAlMid().equals(removeId)){ //해당 아이디만 알람상태 0으로 변경 - alarm.setAlScno(alScno); - alarm.setAlStatus(0); - alarmRepository.update(alarm); + List findAlarmList = alarmRepository.findByAlMid(removeId); + + log.info(""+findAlarmList.size()); + + List zeroAlarmList = new ArrayList<>(); + for(Alarm findAlarm : findAlarmList){ + log.info(""+findAlarm.getAlMid()); + log.info(""+removeId); + if(findAlarm.getAlMid().equals(removeId)){ + zeroAlarmList.add(findAlarm); } + log.info(""+zeroAlarmList.size()); + } + + for(Alarm zeroAlarm : zeroAlarmList){ + zeroAlarm.setAlStatus(0); + log.debug(""+zeroAlarm.getAlScno()); + alarmRepository.update(zeroAlarm); } + Alarm NewAlarm = new Alarm(); NewAlarm.setAlMid(removeId); - NewAlarm.setAlScno(alScno); + NewAlarm.setAlScno(scNo); NewAlarm.setAlCate(AlarmCate.REMOVE_TEAM.ordinal()); return alarmRepository.save(NewAlarm); } From 0290f3e94bea840d7c330199aa97b275361e6bb8 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 04:27:06 +0900 Subject: [PATCH 380/895] =?UTF-8?q?[FIX]=20addAlarmByDeleteTeam=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2ee3662e..166d6544 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -31,4 +31,7 @@ spring.security.oauth2.client.provider.kakao.token-uri=https://kauth.kakao.com/o spring.security.oauth2.client.provider.kakao.user-info-uri=https://kapi.kakao.com/v2/user/me spring.security.oauth2.client.provider.kakao.user-name-attribute=id -logging.level.com.effourt.calenkit.client.KakaoFeignClient=DEBUG \ No newline at end of file +logging.level.com.effourt.calenkit.client.KakaoFeignClient=DEBUG +logging.level.com.effourt.calenkit.service.TeamScheduleService=DEBUG +logging.level.com.effourt.calenkit.service.AlarmService=DEBUG +logging.level.com.effourt.calenkit.controller.TeamController=DEBUG \ No newline at end of file From acace6b8a14e254fc36cc07b41342d59c7d48d48 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 4 May 2023 07:59:05 +0900 Subject: [PATCH 381/895] =?UTF-8?q?[FEAT]=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController2.java | 113 ++++++++---------- 1 file changed, 50 insertions(+), 63 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController2.java b/src/main/java/com/effourt/calenkit/controller/MemberController2.java index 55cac41b..f351d1fa 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController2.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController2.java @@ -10,14 +10,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import java.awt.*; import java.io.IOException; import java.util.List; @@ -69,36 +68,17 @@ public String AdminDelete(@ModelAttribute Member member) throws MemberNotFoundEx /** 마이 페이지 */ + //MyPage 이동 @GetMapping(value = "/myPage") - public String MyPage() { + public String MyPage(HttpSession session,Member member) { + String loginId=(String)session.getAttribute("loginId"); + Member loginMember=memberRepository.findByMemId(loginId); + member.setMemName(loginMember.getMemName()); + member.setMemImage(loginMember.getMemImage()); return "member/myPage"; } - @GetMapping(value = "/myPage_delete") - public String MyPageDelete() { - return "member/myPageDelete"; - } - @GetMapping(value = "/myPage_pwModify") - public String MyPageModify() { - return "member/myPageModify"; - } - - - @PostMapping("/myPage_modify") - public ResponseEntity saveMember(@RequestParam("memImage") MultipartFile memImage,HttpSession session) throws IOException, MemberNotFoundException { - //Member loginMember=(Member)session.getAttribute("loginMember"); - Member loginMember=memberRepository.findByMemId("member"); - - // 이미지 업로드 후 파일명 반환 - String uploadfilename = imageUploadService.uploadImage(memImage); - loginMember.setMemImage(uploadfilename); - //loginMember.setMemName(memName); - - // Member 객체를 인자로 받는 modifyMe() 메소드 호출 - myPageService.modifyMe(loginMember); - return new ResponseEntity<>(HttpStatus.CREATED); - } // MyPage @@ -139,46 +119,53 @@ public int passwordCheck(String password1,String password2) { } return cnt; } + @PostMapping("/modify") + public String saveMember(@RequestParam("memImage") MultipartFile memImage,@RequestParam("memName") String memName,HttpSession session) throws MemberNotFoundException, IOException { + String loginId=(String)session.getAttribute("loginId"); + Member loginMember=memberRepository.findByMemId(loginId); + // 이미지 업로드 후 파일명 반환 + String fileName = imageUploadService.uploadImage(memImage); + // Member 객체에 이미지 파일명 저장 + loginMember.setMemImage(fileName); + // 닉네임 업로드 + loginMember.setMemName(memName); + // Member 객체를 인자로 받는 modifyMe() 메소드 호출 + myPageService.modifyMe(loginMember); - // MyPage - // 멤버 정보변경(GET) - // 로그인세션에서 아이디값을 전달받아 member_modify 페이지로 이동 - @GetMapping(value ="/myPage_modify") - public String MyPageModify(Model model, HttpSession session) throws MemberNotFoundException { - Member member=(Member)session.getAttribute("loginMember"); - model.addAttribute("member", memberRepository.findByMemId(member.getMemId())); - return "myPage"; + return "member/myPage"; } + // MyPage + // 멤버 비밀번호 정보변경(Put) + // 로그인세션에서 아이디값을 전달받아 member_pwModify 페이지로 이동처리. + @PostMapping(value ="/myPage_pwModify") + public String MyPagePwModify(HttpSession session,String memPw,String password1) throws MemberNotFoundException { + String loginId=(String)session.getAttribute("loginId"); + Member loginMember=memberRepository.findByMemId(loginId); + if (loginMember.getMemPw().equals(memPw)) { + myPageService.modifyPassword(loginMember,password1); + System.out.println("error = "+password1+memPw+loginMember.getMemPw()); + return "member/myPage"; + } + else { + return "member/myPage"; + } + } // MyPage - // 멤버 정보변경(PATCH) - // Form태그를 통해 전달받은 값들을 member 객체에 update 후 member_modify 페이지로 이동 - @PatchMapping(value ="/myPage_modify") - public String MyPageModify(HttpSession session) throws MemberNotFoundException { - Member member=(Member)session.getAttribute("loginMember"); - myPageService.modifyMe(member); - - return "redirect:myPage"; + // 멤버 상태 변경(Put) + // 로그인세션에서 아이디값을 전달받아 member_delete 페이지로 이동처리. + @PutMapping(value ="/myPage_delete") + public String MyPageDelete(HttpSession session,String memId) throws MemberNotFoundException { + String loginId=(String)session.getAttribute("loginId"); + Member loginMember=memberRepository.findByMemId(loginId); + Integer memStatus=0; + if(loginMember.getMemId().equals(memId)) { + myPageService.removeMe(loginMember, memStatus); + return "myPage"; + } + else{ + return ""; + } } - - -// // MyPage -// // 멤버 비밀번호 정보변경(Put) -// // 로그인세션에서 아이디값을 전달받아 member_pwModify 페이지로 이동처리. -// @PutMapping(value ="/myPage_pwModify") -// public String MyPagePwModify(HttpSession session) throws MemberNotFoundException { -// Member member=(Member)session.getAttribute("loginMember"); -// myPageService.modifyPassword(member); -// return "myPage"; -// } -// // MyPage -// // 멤버 상태 변경(Put) -// // 로그인세션에서 아이디값을 전달받아 member_delete 페이지로 이동처리. -// @PutMapping(value ="/myPage_delete") -// public String MyPageDelete(HttpSession session) throws MemberNotFoundException { -// Member member=(Member)session.getAttribute("loginMember"); -// myPageService.removeMe(member); -// return "myPage"; -// } } From 9093fa169af1821ba9a13035eed0bd911375438b Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 4 May 2023 08:00:29 +0900 Subject: [PATCH 382/895] =?UTF-8?q?[FEAT]=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/templates/member/myPage.html | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/main/resources/templates/member/myPage.html b/src/main/resources/templates/member/myPage.html index 181c0985..29a48813 100644 --- a/src/main/resources/templates/member/myPage.html +++ b/src/main/resources/templates/member/myPage.html @@ -37,21 +37,22 @@ -
    +

    계정 정보


    프로필 사진

    + + Member Image - + + - -
    닉네임
    - + - +

    비밀번호

    @@ -60,24 +61,22 @@

    계정 정보

    위험 구역


    -
    +
    - + \ No newline at end of file From 9d8816fad3dacab88a6b82280e9a40753322f0a3 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Thu, 4 May 2023 14:35:15 +0900 Subject: [PATCH 390/895] =?UTF-8?q?[STYLE]=20=EC=9E=90=EB=B0=94=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=BD=94=EB=93=9C=EB=A5=BC=20reg?= =?UTF-8?q?isterForm.js=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=20[DESIGN]=20=EC=97=90=EB=9F=AC=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EB=B0=95=EC=8A=A4=20height=20=EC=88=98=EC=B9=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/registerForm.js | 93 ++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/main/resources/static/js/registerForm.js diff --git a/src/main/resources/static/js/registerForm.js b/src/main/resources/static/js/registerForm.js new file mode 100644 index 00000000..6440e196 --- /dev/null +++ b/src/main/resources/static/js/registerForm.js @@ -0,0 +1,93 @@ +//도메인 주소 +const domainURL = "http://localhost:8080"; + +//프로필 이미지 검증 +let profileImageConfirm = true; +$("#profileImage").change(function() { + const profileImage = $("#profileImage").val(); + const extension = profileImage.substring(profileImage.lastIndexOf(".")); + if (profileImage != "" + && extension != ".jpg" + && extension != ".jpeg" + && extension != ".png") { + profileImageConfirm = false; + $("#profileImageMessage").text("이미지 파일 형식에 맞춰 재등록해주세요.(jpg, jpeg, png)"); + } else { + profileImageConfirm = true; + $("#profileImageMessage").text(""); + } +}); + +//닉네임 검증 +let nicknameConfirm = false; +const nicknameReg = /$[a-zA-Z가-힣]{2,10}^/; +$("#nickname").focusout(function() { + if (!nicknameReg.test($("#nickname").val())) { + nicknameConfirm = false; + $("#nicknameMessage").text("2자리 이상 10자리 이하의 영문, 한글을 사용하세요."); + } else { + nicknameConfirm = true; + $("#nicknameMessage").text(""); + } +}); + +//비밀번호 검증 +let passwordConfirm = false; +const passwordReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#])[\da-zA-Z!@#]{8,15}$/; +$("#loginPw").focusout(function() { + if (!passwordReg.test($("#loginPw").val())) { + passwordConfirm = false; + $("#passwordMessage").text("8자리 이상 15자리 이하의 영문, 숫자, 특수문자를 사용하세요."); + } else { + passwordConfirm = true; + $("#passwordMessage").text(""); + } +}); + +//비밀번호 확인 검증 +let passwordCheckConfirm = false; +$("#loginPwConfirm").focusout(function() { + if ($("#loginPw").val() != $("#loginPwConfirm").val) { + passwordCheckConfirm = false; + $("#passwordCheckMessage").text("입력한 비밀번호와 같은 값을 입력해주세요."); + } else { + passwordCheckConfirm = true; + $("#passwordCheckMessage").text(""); + } +}); + +//회원가입 후 로그인 버튼 클릭 이벤트 +$("#registerBtn").click(function() { + if (profileImageConfirm == false + || nicknameConfirm == false + || passwordConfirm == false + || passwordCheckConfirm == false) { + return; + } + + const loginId = $("#loginId").val(); + const profileImage = $("#profileImage").val(); + const nickname = $("#nickname").val(); + const password = $("#loginPw").val(); + $.ajax({ + url: domainURL + "/join", + method: "POST", + contentType: "application/json", + dataType: "text", + data: JSON.stringify({ + "memId" : loginId, + "memImage" : profileImage, + "memName" : nickname, + "memPw" : password}), + success: function(result) { + if (result == "OK") { + location.href = domainURL + "/"; + } else { + $("#message").val(result); + } + }, + error: function(error) { + alert("비밀번호로 로그인 중 에러 발생 : " + error.status); + } + }); +}); \ No newline at end of file From a52dc53f4e4af0fa0fb0cdc58921194f5c4eed94 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Thu, 4 May 2023 14:35:33 +0900 Subject: [PATCH 391/895] =?UTF-8?q?[STYLE]=20=EC=9E=90=EB=B0=94=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=BD=94=EB=93=9C=EB=A5=BC=20reg?= =?UTF-8?q?isterForm.js=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=20[DESIGN]=20=EC=97=90=EB=9F=AC=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EB=B0=95=EC=8A=A4=20height=20=EC=88=98=EC=B9=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/register.html | 51 +++++++--------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index 6c21c30f..db936676 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -8,6 +8,11 @@ + @@ -29,19 +34,28 @@

    회원가입

    - +
    +

    +

    +

    + +
    + + +
    +

    @@ -56,39 +70,6 @@

    회원가입

    - - + \ No newline at end of file From f13c3c97d2cab6f0ee90d4fec41d18e0de2220b3 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Thu, 4 May 2023 14:36:41 +0900 Subject: [PATCH 392/895] =?UTF-8?q?[STYLE]=20MemberController.loginByIniti?= =?UTF-8?q?alize=20=EC=9A=94=EC=B2=AD=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80,=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=82=B4=EC=9A=A9=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/MemberController.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 64d1f517..7088573a 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -14,7 +14,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.MessageSource; -import org.springframework.http.HttpEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @@ -101,7 +100,7 @@ public String loginByPassword(@RequestBody Member member, HttpSession session) { if (findMember.getMemPw().equals(member.getMemPw())) { session.setAttribute("loginId", member.getMemId()); } else { - return "아이디 또는 비밀번호를 잘못 입력하셨습니다."; + return "비밀번호가 올바르지 않습니다."; } return "OK"; } @@ -120,7 +119,7 @@ public String loginByCode(@RequestBody Map loginCodeMap, HttpSes if (code.equals(memId + "ACCESS")) { session.setAttribute("loginId", memId); } else { - return "로그인 코드를 잘못 입력하셨습니다."; + return "코드가 올바르지 않습니다."; } return "OK"; } @@ -142,6 +141,12 @@ public String loginByJoin(String memId, String registerCode, HttpSession session return "register"; } + /** + * 비밀번호 초기화 코드로 로그인 - 비밀번호 초기화 후 로그인 처리 + * @param initializeCodeMap + * @param session + * @return + */ @PostMapping("/login/initialize-code") @ResponseBody public String loginByInitialize(@RequestBody Map initializeCodeMap, HttpSession session) { @@ -153,7 +158,7 @@ public String loginByInitialize(@RequestBody Map initializeCodeM if (code.equals(memId + "ACCESS")) { session.setAttribute("loginId", memId); } else { - return "초기화 코드를 잘못 입력하였습니다."; + return "코드가 올바르지 않습니다."; } return "OK"; } From 68ce06b5843d0d8ff6bec00ba43400336c166022 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 4 May 2023 14:43:24 +0900 Subject: [PATCH 393/895] =?UTF-8?q?[FEAT]=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=A9=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=A0=95=EB=A6=AC=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/templates/member/myPage.html | 61 +++++++++++-------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/src/main/resources/templates/member/myPage.html b/src/main/resources/templates/member/myPage.html index 29a48813..88169ad5 100644 --- a/src/main/resources/templates/member/myPage.html +++ b/src/main/resources/templates/member/myPage.html @@ -9,7 +9,7 @@ -
    +

    계정 정보


    프로필 사진

    - Member Image + - - - -
    닉네임
    + + - +
    닉네임
    + - + - -

    비밀번호

    -

    임시 로그인 코드를 사용하고 싶지 않으면 비밀번호를 설정할 수 있습니다.

    -
    -

    위험 구역

    - +

    비밀번호(임시 로그인 코드를 사용하고 싶지 않으면 비밀번호를 설정할 수 있습니다.)

    +
    비밀번호 변경
    +

    삭제

    +
    내 계정 삭제

    -
    + 취소
    - - - - + + - - - -
    -

    회원관리

    -
    -
    -
    -
    - -
    -
    -
    + +
    + +
    +
    +
    -
    - -
    -
    -
    - -
    - - - - - -
    -
    +
    +
    - -
    - -
    - - - - - - - - - - -
    - -
    -
    + + + + + + + + + + + + + + + +
    ID닉네임최근 로그인 일자상태
    +
    - + + + - - From c925b782a97a8550f646370c59cd3fc0c9a2dc09 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Thu, 4 May 2023 15:13:26 +0900 Subject: [PATCH 397/895] =?UTF-8?q?[FIX]=EC=A1=B0=EA=B1=B4=EC=97=90=20?= =?UTF-8?q?=EB=A7=8C=EC=A1=B1=ED=95=98=EB=8A=94=20=EC=9D=BC=EC=A0=95=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EC=98=88=EC=99=B8=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/service/MyScheduleService.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/MyScheduleService.java b/src/main/java/com/effourt/calenkit/service/MyScheduleService.java index 1185aef1..4b536ae3 100644 --- a/src/main/java/com/effourt/calenkit/service/MyScheduleService.java +++ b/src/main/java/com/effourt/calenkit/service/MyScheduleService.java @@ -52,8 +52,12 @@ public void writeMySchdule(Schedule schedule) { // => 검색어(keyword)가 없을 경우 null로 전달 받아야 함(필수 매개변수) public List getRecycleBin(String id, String keyword) { Map map=new HashMap<>(); + List scNoList=teamRepository.findByBookmark(id); + if(scNoList.isEmpty()) { //조건에 만족하는 일정이 없을 경우 미출력(scNo=0) + scNoList.add(0); + } - map.put("scNoList", teamRepository.findByMid(id)); + map.put("scNoList", scNoList); map.put("keyword", keyword); return scheduleRepository.findByRecycleBin(map); @@ -98,8 +102,12 @@ public void addBookmark(Team team) { public List getMySchedule(String id, String date) { //map 요소 : date, List 객체(일정번호) - map(date, "2020-12-12") , map(scNoList, List) Map map=new HashMap<>(); + List scNoList=teamRepository.findByBookmark(id); + if(scNoList.isEmpty()) { //조건에 만족하는 일정이 없을 경우 미출력(scNo=0) + scNoList.add(0); + } - map.put("scNoList", teamRepository.findByid(id)); //아이디 기준 권한있는 일정번호목록 + map.put("scNoList", scNoList); //아이디 기준 권한있는 일정번호목록 map.put("date", date); //date : 출력 기준이 될 연월(default:현재 연월) return scheduleRepository.findAllByScNo(map); @@ -109,8 +117,12 @@ public List getMySchedule(String id, String date) { // => 현재 세션 아이디(loginMember) 기준 team, 출력 기준이 될 연월(date)을 매개변수로 입력받음 public List getBookmark(String id, String date) { Map map=new HashMap<>(); + List scNoList=teamRepository.findByBookmark(id); + if(scNoList.isEmpty()) { //조건에 만족하는 일정이 없을 경우 미출력(scNo=0) + scNoList.add(0); + } - map.put("scNoList",teamRepository.findByBookmark(id)); + map.put("scNoList", scNoList); map.put("date", date); //date : 출력 기준이 될 연월(default:defaultDate) return scheduleRepository.findAllByScNo(map); From 4701b563645215762b30ac11e1925c6158a08d07 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 15:22:49 +0900 Subject: [PATCH 398/895] =?UTF-8?q?[FIX]=20delete=EC=9D=98=20where=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java | 5 +++-- .../com/effourt/calenkit/repository/AlarmRepository.java | 5 +++-- .../effourt/calenkit/repository/AlarmRepositoryImpl.java | 6 +++--- .../resources/com/effourt/calenkit/mapper/AlarmMapper.xml | 7 +++---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java index 2f35788a..b709262d 100644 --- a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java @@ -2,6 +2,7 @@ import com.effourt.calenkit.domain.Alarm; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -9,7 +10,7 @@ public interface AlarmMapper { Integer save(Alarm alarm); Integer update(Alarm alarm); - Integer delete(Integer alNo); + Integer delete(@Param("alMid") String alMid, @Param("alScno") Integer alScno); List findByAlMid(String alMid); - List findByAlScno(Integer AlScno); + List findByAlScno(Integer alScno); } diff --git a/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java b/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java index d1fcc74e..2cdcfd94 100644 --- a/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java +++ b/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java @@ -1,13 +1,14 @@ package com.effourt.calenkit.repository; import com.effourt.calenkit.domain.Alarm; +import org.apache.ibatis.annotations.Param; import java.util.List; public interface AlarmRepository { Alarm save(Alarm alarm); Integer update(Alarm alarm); - Integer delete(Integer alNo); + Integer delete(String alMid,Integer alScno); List findByAlMid(String alMid); - List findByAlScno(Integer AlScno); + List findByAlScno(Integer slScno); } diff --git a/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java b/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java index 1f66d6fb..5fecb82e 100644 --- a/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java +++ b/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java @@ -29,11 +29,11 @@ public Integer update(Alarm alarm) { } @Override - public Integer delete(Integer alNo) { - - return sqlSessionTemplate.getMapper(AlarmMapper.class).delete(alNo); + public Integer delete(String alMid, Integer alScno) { + return sqlSessionTemplate.getMapper(AlarmMapper.class).delete(alMid,alScno); } + @Override public List findByAlMid(String alMid) { return sqlSessionTemplate.getMapper(AlarmMapper.class).findByAlMid(alMid); diff --git a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml index 8c855bd0..f194f73a 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -15,10 +15,9 @@ - - - DELETE FROM ALARM WHERE AL_NO=#{alNo} - + From b219b98ab90bd518d94e80e863e777a8868924cf Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 15:23:08 +0900 Subject: [PATCH 399/895] =?UTF-8?q?[FIX]=20=EC=95=8C=EB=9E=8C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/service/AlarmService.java | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index 4e33eeb0..a041ada2 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -81,9 +81,9 @@ public void addAlarmByDeleteSchedule(Integer scNo){ */ @Transactional public void removeAlarmByScno(Integer scNo){ - List findAlarmList = alarmRepository.findByAlScno(scNo); - for(Alarm alarm:findAlarmList){ - alarmRepository.delete(alarm.getAlNo());//알람삭제 + String[] idList = findIdList(scNo); + for(int i=0; i findAlarmList = alarmRepository.findByAlMid(removeId); - - log.info(""+findAlarmList.size()); - - List zeroAlarmList = new ArrayList<>(); - for(Alarm findAlarm : findAlarmList){ - log.info(""+findAlarm.getAlMid()); - log.info(""+removeId); - if(findAlarm.getAlMid().equals(removeId)){ - zeroAlarmList.add(findAlarm); - } - log.info(""+zeroAlarmList.size()); - } - - for(Alarm zeroAlarm : zeroAlarmList){ - zeroAlarm.setAlStatus(0); - log.debug(""+zeroAlarm.getAlScno()); - alarmRepository.update(zeroAlarm); + List alarmList = alarmRepository.findByAlMid(removeId); + for(Alarm alarm:alarmList){ + if(alarm.getAlScno()==scNo) alarmRepository.delete(removeId,scNo); } - Alarm NewAlarm = new Alarm(); NewAlarm.setAlMid(removeId); NewAlarm.setAlScno(scNo); From cd1fdef65cec5ed6b7b93472d43a5b6ee2a22aa9 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 15:57:42 +0900 Subject: [PATCH 400/895] =?UTF-8?q?[DOCS]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20teamMemberDTO=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/dto/TeamMember.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/main/java/com/effourt/calenkit/dto/TeamMember.java diff --git a/src/main/java/com/effourt/calenkit/dto/TeamMember.java b/src/main/java/com/effourt/calenkit/dto/TeamMember.java deleted file mode 100644 index 0d183164..00000000 --- a/src/main/java/com/effourt/calenkit/dto/TeamMember.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.effourt.calenkit.dto; - - -import com.effourt.calenkit.domain.Member; -import com.effourt.calenkit.domain.Schedule; -import com.effourt.calenkit.domain.Team; -import lombok.Getter; -import lombok.Setter; - -import java.util.List; - -@Getter -@Setter -public class TeamMember { - private Team team; - private List memberList; -} \ No newline at end of file From 9bde308ce3dabb5a914b5eb799e40556a26eaa9a Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 15:58:53 +0900 Subject: [PATCH 401/895] =?UTF-8?q?[STYLE]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/mapper/TeamMapper.java | 2 -- .../java/com/effourt/calenkit/repository/TeamRepository.java | 1 - .../com/effourt/calenkit/repository/TeamRepositoryImpl.java | 3 --- 3 files changed, 6 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java index 017d8d30..47660191 100644 --- a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java @@ -1,7 +1,6 @@ package com.effourt.calenkit.mapper; import com.effourt.calenkit.domain.Team; -import com.effourt.calenkit.dto.TeamMember; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -12,7 +11,6 @@ public interface TeamMapper { Integer save(Team team); Integer update(Team team); Integer delete(Integer teamSno, String teamMid); - List findByMid(String teamMid); List findByid(String teamMid); diff --git a/src/main/java/com/effourt/calenkit/repository/TeamRepository.java b/src/main/java/com/effourt/calenkit/repository/TeamRepository.java index e85a83f5..dff65c55 100644 --- a/src/main/java/com/effourt/calenkit/repository/TeamRepository.java +++ b/src/main/java/com/effourt/calenkit/repository/TeamRepository.java @@ -1,7 +1,6 @@ package com.effourt.calenkit.repository; import com.effourt.calenkit.domain.Team; -import com.effourt.calenkit.dto.TeamMember; import java.util.List; diff --git a/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java b/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java index 8397553a..130eb065 100644 --- a/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java +++ b/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java @@ -1,9 +1,6 @@ package com.effourt.calenkit.repository; -import com.effourt.calenkit.domain.Auth; import com.effourt.calenkit.domain.Team; -import com.effourt.calenkit.dto.TeamMember; -import com.effourt.calenkit.mapper.ScheduleMapper; import com.effourt.calenkit.mapper.TeamMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; From 954ec8f99e128226c30b780daefb386b3429f456 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 15:59:57 +0900 Subject: [PATCH 402/895] =?UTF-8?q?[FEAT]=20insert=EB=AC=B8=EC=9D=98=20tea?= =?UTF-8?q?mlevel=20=EA=B3=A0=EC=A0=95=EA=B0=92=209=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=A7=A4=EA=B0=9C=EB=B3=80=EC=88=98=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml index 6b627b32..6ccbaa21 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml @@ -3,8 +3,8 @@ - - INSERT INTO TEAM(TEAM_MID, TEAM_SNO, TEAM_LEVEL, TEAM_BOOKMARK) VALUES( #{teamMid}, #{teamSno}, 9, 0) + + INSERT INTO TEAM(TEAM_MID, TEAM_SNO, TEAM_LEVEL, TEAM_BOOKMARK) VALUES( #{teamMid}, #{teamSno}, #{teamLevel}, 0) From 30536567a0167565592dc33d386ef6d5ffba3f2e Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 16:00:41 +0900 Subject: [PATCH 403/895] =?UTF-8?q?[DOCS]=20=EB=8F=99=ED=96=89=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EC=8B=9C=20image=20=ED=95=A8=EA=BB=98=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20DTO=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/dto/TeamShare.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/dto/TeamShare.java diff --git a/src/main/java/com/effourt/calenkit/dto/TeamShare.java b/src/main/java/com/effourt/calenkit/dto/TeamShare.java new file mode 100644 index 00000000..4164a7ed --- /dev/null +++ b/src/main/java/com/effourt/calenkit/dto/TeamShare.java @@ -0,0 +1,12 @@ +package com.effourt.calenkit.dto; + +import com.effourt.calenkit.domain.Team; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class TeamShare { + private Team team; + private String image; +} From 6e4a7b075d3794f48ff8320c74584a2185d19af3 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 16:00:55 +0900 Subject: [PATCH 404/895] =?UTF-8?q?[DOCS]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20ajaxStatus=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/dto/AjaxStatus.java | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/main/java/com/effourt/calenkit/dto/AjaxStatus.java diff --git a/src/main/java/com/effourt/calenkit/dto/AjaxStatus.java b/src/main/java/com/effourt/calenkit/dto/AjaxStatus.java deleted file mode 100644 index 1a4202fa..00000000 --- a/src/main/java/com/effourt/calenkit/dto/AjaxStatus.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.effourt.calenkit.dto; - -import lombok.Getter; - -@Getter -public enum AjaxStatus { - OK,FAIL; -} From fbc3290866119d78c55bc9b6b273fbc08836b2b0 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 16:01:36 +0900 Subject: [PATCH 405/895] =?UTF-8?q?[DOCS]=20exception=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80,=20=EB=82=B4=EC=9A=A9=EC=9D=80=20?= =?UTF-8?q?=EB=AF=B8=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/exception/ExistsTeamException.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/com/effourt/calenkit/exception/ExistsTeamException.java diff --git a/src/main/java/com/effourt/calenkit/exception/ExistsTeamException.java b/src/main/java/com/effourt/calenkit/exception/ExistsTeamException.java new file mode 100644 index 00000000..02c78eea --- /dev/null +++ b/src/main/java/com/effourt/calenkit/exception/ExistsTeamException.java @@ -0,0 +1,4 @@ +package com.effourt.calenkit.exception; + +public class ExistsTeamException { +} From 1da5a71cca05f37dc6314a9329a755e669c85a9c Mon Sep 17 00:00:00 2001 From: jaeheela Date: Wed, 3 May 2023 23:46:44 +0900 Subject: [PATCH 406/895] =?UTF-8?q?[FEAT]=20=EB=8F=99=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EB=8F=99=ED=96=89=EC=9D=98=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/TeamController.java | 113 ++++++++++++-- .../com/effourt/calenkit/dto/TeamShare.java | 6 +- .../calenkit/service/TeamScheduleService.java | 143 ++++++++++++++---- 3 files changed, 220 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/TeamController.java b/src/main/java/com/effourt/calenkit/controller/TeamController.java index 9c96efa2..cf3e2800 100644 --- a/src/main/java/com/effourt/calenkit/controller/TeamController.java +++ b/src/main/java/com/effourt/calenkit/controller/TeamController.java @@ -1,25 +1,22 @@ package com.effourt.calenkit.controller; import com.effourt.calenkit.domain.Member; -import com.effourt.calenkit.domain.Schedule; import com.effourt.calenkit.domain.Team; +import com.effourt.calenkit.dto.TeamShare; import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.repository.TeamRepository; import com.effourt.calenkit.service.TeamScheduleService; +import com.effourt.calenkit.util.EmailSend; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.MessageSource; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.ArrayList; -import java.util.HashMap; +import org.springframework.web.bind.annotation.*; + import java.util.List; import java.util.Map; - +@Slf4j @Controller @RequiredArgsConstructor public class TeamController { @@ -29,8 +26,11 @@ public class TeamController { private final MemberRepository memberRepository; private final ScheduleRepository scheduleRepository; + private final MessageSource ms; + private final EmailSend emailSend; + /** - * 동행 검색하기 위해 필요 + * 회원 조회 (동행 검색할 때 필요) * @param memId * @return */ @@ -39,9 +39,98 @@ public class TeamController { // http://localhost:8080/members?memId=Test3@test3.com @GetMapping("/members") @ResponseBody - public Member searchMyTeam(@RequestParam String memId) { + public Member searchMemberForShare(@RequestParam String memId) { return memberRepository.findByMemId(memId); } + /** + * 동행 조회 - rest API + * */ + // http://localhost:8080/teams/share/1 + @GetMapping ("/teams/share/{scNo}") + @ResponseBody + public List searchMyTeam(@PathVariable int scNo) { + return teamScheduleService.getTeam(scNo); + } + + + /** + * 동행 추가 + * */ + // http://localhost:8080/teams/share/1 : memId=member + // http://localhost:8080/teams/share/1 : memId=test@test.com + // http://localhost:8080/teams/share/1 : memId=employee + + @PostMapping ("/teams/share/{scNo}") + @ResponseBody + public Team shareTeam(@PathVariable int scNo, @RequestBody Map map) { + Team newTeam = teamScheduleService.addTeam(scNo,(String)map.get("memId")); + + if(newTeam.equals("") || newTeam==null){ //삽입 실패 + return null; //예외처리 + } + return newTeam; + } + + + /*** + * 동행의 권한 상태 변경 + * @param map -> teamLevel은 무조건 - 읽기권한:0, 수정권한:1 + * @return + */ + // http://localhost:8080/teams/share/1 : teamMId=member?teamLevel=0 + // http://localhost:8080/teams/share/1 : teamMId=member?teamLevel=1 + @PatchMapping("/teams/share/{scNo}") + @ResponseBody + public void updateTeamLevel(@PathVariable int scNo,@RequestBody Map map) { + String id = (String)map.get("teamMId"); + //int level = (int)map.get("teamLevel"); //error + int level = Integer.parseInt(String.valueOf(map.get("teamLevel"))); //String으로 변환한 후 Integer.parseInt + teamScheduleService.modifyTeamLevel(scNo,id,level); + } + + /** + * 동행 삭제 + * */ + // http://localhost:8080/teams/share/4 : memId=member + // http://localhost:8080/teams/share/1 : memId=employee + @DeleteMapping ("/teams/share/{scNo}") + @ResponseBody + public Integer deleteMyTeam(@PathVariable int scNo,@RequestBody Map map) { + return teamScheduleService.removeTeam(scNo, (String)map.get("memId")); + } + + + /** + * 동행에게 초대 이메일 발송 + */ + // http://localhost:8080/teams/send/email + /* + @PostMapping("/teams/send/email") + @ResponseBody + public String sendCode(@RequestBody Map idMap, HttpSession session) { + String memId = idMap.get("id"); + String subject = ms.getMessage("mail.login-code.subject", null, null); + String message = ms.getMessage( + "mail.login-code.message", + new Object[]{emailSend.createAccessCode(memId, session)}, + null); + + EmailMessage emailMessage = EmailMessage.builder() + .recipient(memId) + .subject(subject) + .message(message) + .build(); + //이메일 전송 + emailSend.sendMail(emailMessage); + + log.info("email id={}", memId); + log.info("subject={}", subject); + log.info("message={}", message); + return "OK"; + } + */ + + } diff --git a/src/main/java/com/effourt/calenkit/dto/TeamShare.java b/src/main/java/com/effourt/calenkit/dto/TeamShare.java index 4164a7ed..5534f513 100644 --- a/src/main/java/com/effourt/calenkit/dto/TeamShare.java +++ b/src/main/java/com/effourt/calenkit/dto/TeamShare.java @@ -7,6 +7,10 @@ @Getter @Setter public class TeamShare { - private Team team; + private Integer teamNo; + private String teamMid; + private Integer teamSno; + private Integer teamLevel; + private Integer teamBookmark; private String image; } diff --git a/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java b/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java index 3d08edde..ee33cd61 100644 --- a/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java +++ b/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java @@ -1,63 +1,148 @@ package com.effourt.calenkit.service; import com.effourt.calenkit.domain.Member; +import com.effourt.calenkit.domain.Schedule; import com.effourt.calenkit.domain.Team; +import com.effourt.calenkit.dto.TeamShare; +import com.effourt.calenkit.exception.ExistsTeamException; import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.repository.TeamRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; import java.util.List; + @Service @RequiredArgsConstructor public class TeamScheduleService { private final MemberRepository memberRepository; private final TeamRepository teamRepository; -/* -DOMAIN REPOSITORY(mybatis3, JPA) SERVICE - INSERT SAVE ADD - UPDATE UPDATE MODIFY - DELETE DELETE REMOVE - SELECT FIND GET -*/ + /** + * 공유하고있는 사람들이 누구인지 List로 찾아주는 서비스 + * @param scNo + * @return + */ + public List getTeam(int scNo) /*throws ExistsTeamException*/{ + + //teamList 유효값인지 확인 + List teamList = teamRepository.findBySno(scNo); //teamList.get(0).. + if(teamList.size()==0){ + return null; //team은 반드시 한개는 존재해야하는데..? 존재하지 않는다에 대한 예외 처리 필요 - throw new ~ + //throw new ExistsTeamException(); + } + + //imageList에 image 담기 + List imageList = new ArrayList<>(); //imageList.get(0).. + for(int i=0; i teamShareList = new ArrayList<>(); + for(int i=0; i teamSnoList = teamRepository.findByid(findId); + for(Integer teamSno:teamSnoList){ + if(teamSno==scNo) { //이미 존재할 경우 + return null; //예외 처리 - throw new + } + } - //만약 사용자가 받은 이메일의 링크를 수락할 경우, team에 최종적으로 추가 - return teamRepository.save(team); - }*/ + //Team 추가 + Team newTeam = new Team(); + newTeam.setTeamMid(findId); + newTeam.setTeamSno(scNo); + newTeam.setTeamLevel(0); //처음 insert 시는 권한레벨을 읽기로 준다(후에 수정 가능) - 읽기권한:0, 수정권한:1 + teamRepository.save(newTeam); + return newTeam; + } /** * 공유된 일정의 권한 정보를 변경하는서비스 - * @param teamMid : 공유받은아이디 - * @param scNo : 일정번호 - * @param updateTeamLevel : 변경할권한레밸 + * @param teamMid : 공유받은아이디 + * @param scNo : 일정번호 + * @param updateTeamLevel : 변경할권한레밸 (0,1) */ //=> 컨트롤러에서 API로 요청 사용 [사용자가 드롭다운으로 권한을 변경할 때 페이지 리로드 없이 비동기 처리로 변경되게 만들 것임 - [부분변경:PATCH] - public void modifyTeamLevel(String teamMid, int scNo, int updateTeamLevel) { - //전달받은 아이디로 팀 테이블 검색 - List teamList = teamRepository.findByMid(teamMid); + @Transactional + public Team modifyTeamLevel(int scNo, String teamMid, int updateTeamLevel) { + Boolean isvalid = false; - Team updateTeam = new Team(); - for(Team team:teamList){ - if(team.getTeamSno().equals(scNo)){ - updateTeam.setTeamLevel(updateTeamLevel); + //team 유효값인지 확인 + List teamSnoList = teamRepository.findByid(teamMid); + for (int teamSno : teamSnoList) { + if (teamSno == scNo) { + isvalid = true; } } - //team에 최종적으로 권한레벨 변경 - teamRepository.update(updateTeam); + Team updateTeam = new Team(); + if (isvalid) { + updateTeam.setTeamSno(scNo); + updateTeam.setTeamMid(teamMid); + updateTeam.setTeamLevel(updateTeamLevel); + teamRepository.update(updateTeam);//team에 최종적으로 권한레벨 변경 + } + return updateTeam; } + /** + * 공유한 사람을 삭제하는 서비스 + * @param scNo + * @param teamMid + * @return + */ + @Transactional + public int removeTeam(Integer scNo, String teamMid) { + ///int result = -1; + + //teamMid 유효값인지 확인 + Member findMember = memberRepository.findByMemId(teamMid); + if(findMember.equals("") || findMember==null){ //존재하지 않을 경우 + return -1; //예외 처리 - throw new + } + + /* + //scNo 유효값인지 확인 + List teamSnoList = teamRepository.findByid(teamMid); + for(Integer teamSno:teamSnoList){ + if(teamSno==scNo) {//sc==scNo 일때만 + result = //Team 삭제 + } + } + */ + return teamRepository.delete(scNo,teamMid); + } + + } + From fe7653dc2280cdb900c261504a1d5c879b8b4a4f Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 01:40:24 +0900 Subject: [PATCH 407/895] =?UTF-8?q?[FEAT]=20=EB=8F=99=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EB=8F=99=ED=96=89=EC=9D=98=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD,=20=EB=8F=99=ED=96=89=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/TeamController.java | 17 +-- .../calenkit/service/TeamScheduleService.java | 2 +- src/main/resources/templates/detail.html | 122 +++++++++++++----- 3 files changed, 102 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/TeamController.java b/src/main/java/com/effourt/calenkit/controller/TeamController.java index cf3e2800..711a52c3 100644 --- a/src/main/java/com/effourt/calenkit/controller/TeamController.java +++ b/src/main/java/com/effourt/calenkit/controller/TeamController.java @@ -78,26 +78,27 @@ public Team shareTeam(@PathVariable int scNo, @RequestBody Map ma * @param map -> teamLevel은 무조건 - 읽기권한:0, 수정권한:1 * @return */ - // http://localhost:8080/teams/share/1 : teamMId=member?teamLevel=0 - // http://localhost:8080/teams/share/1 : teamMId=member?teamLevel=1 + // http://localhost:8080/teams/share/1 : teamMid=member?teamLevel=0 + // http://localhost:8080/teams/share/1 : teamMid=member?teamLevel=1 @PatchMapping("/teams/share/{scNo}") @ResponseBody - public void updateTeamLevel(@PathVariable int scNo,@RequestBody Map map) { - String id = (String)map.get("teamMId"); + public String updateTeamLevel(@PathVariable int scNo,@RequestBody Map map) { + String id = (String)map.get("teamMid"); //int level = (int)map.get("teamLevel"); //error int level = Integer.parseInt(String.valueOf(map.get("teamLevel"))); //String으로 변환한 후 Integer.parseInt teamScheduleService.modifyTeamLevel(scNo,id,level); + return "updateTeamLevel ok"; } /** * 동행 삭제 * */ - // http://localhost:8080/teams/share/4 : memId=member - // http://localhost:8080/teams/share/1 : memId=employee + // http://localhost:8080/teams/share/4 : teamMid=member + // http://localhost:8080/teams/share/1 : teamMid=employee @DeleteMapping ("/teams/share/{scNo}") @ResponseBody - public Integer deleteMyTeam(@PathVariable int scNo,@RequestBody Map map) { - return teamScheduleService.removeTeam(scNo, (String)map.get("memId")); + public int deleteMyTeam(@PathVariable int scNo,@RequestBody Map map) { + return teamScheduleService.removeTeam(scNo, map.get("teamMid")); } diff --git a/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java b/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java index ee33cd61..d2c7178a 100644 --- a/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java +++ b/src/main/java/com/effourt/calenkit/service/TeamScheduleService.java @@ -122,7 +122,7 @@ public Team modifyTeamLevel(int scNo, String teamMid, int updateTeamLevel) { * @return */ @Transactional - public int removeTeam(Integer scNo, String teamMid) { + public int removeTeam(int scNo, String teamMid) { ///int result = -1; //teamMid 유효값인지 확인 diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 088dacd0..37e0a270 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -54,27 +54,27 @@
    -
      - +
        + -
      • - - - - -    cat@cat.com [[team.teamMid]] +
      • + + + + + + [[${team.teamMid}]] [[${imageList.get(teamStat.index)}]] - -
        - -
        -
      • + +
        + +
        +
    @@ -90,12 +90,15 @@ - From eeba7d7a0d4d26d05c24d87702005eb02c310342 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 01:40:48 +0900 Subject: [PATCH 408/895] =?UTF-8?q?[FIX]=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=EC=97=90=20@Param=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/mapper/TeamMapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java index 47660191..3e3353a1 100644 --- a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java @@ -2,6 +2,7 @@ import com.effourt.calenkit.domain.Team; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -10,7 +11,7 @@ public interface TeamMapper { Integer save(Team team); Integer update(Team team); - Integer delete(Integer teamSno, String teamMid); + Integer delete(@Param("teamSno") Integer teamSno, @Param("teamMid")String teamMid); List findByMid(String teamMid); List findByid(String teamMid); From aecf46c8269324557c8b4cfbab6f04d63b6c4647 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:01:07 +0900 Subject: [PATCH 409/895] =?UTF-8?q?[FEAT]=20=EC=95=8C=EB=9E=8C=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/AlarmController.java | 67 +++------------- .../calenkit/service/AlarmService.java | 80 +++++++++++++------ 2 files changed, 68 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/AlarmController.java b/src/main/java/com/effourt/calenkit/controller/AlarmController.java index 43635aa9..e7eb72f3 100644 --- a/src/main/java/com/effourt/calenkit/controller/AlarmController.java +++ b/src/main/java/com/effourt/calenkit/controller/AlarmController.java @@ -1,19 +1,14 @@ package com.effourt.calenkit.controller; import com.effourt.calenkit.domain.Alarm; -import com.effourt.calenkit.domain.Schedule; -import com.effourt.calenkit.dto.AjaxStatus; -import com.effourt.calenkit.dto.AjaxStatus; import com.effourt.calenkit.dto.AlarmCate; import com.effourt.calenkit.repository.AlarmRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.service.AlarmService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; @@ -31,7 +26,8 @@ public class AlarmController { * @param alMid * @return */ - // http://localhost:8080/alarms/{alMid} + // http://localhost:8080/alarms/member + // http://localhost:8080/alarms/Test1@test1,com @GetMapping("/alarms/{alMid}") @ResponseBody public List showMyAlarmList(@PathVariable String alMid, HttpSession session){ @@ -40,70 +36,31 @@ public List showMyAlarmList(@PathVariable String alMid, HttpSession sessi List alarmList = new ArrayList<>(); if(loginId.equals(alMid)){ alarmList = alarmRepository.findByAlMid(loginId); - return alarmList; + return alarmList; } else { return null; } } - /* - [ - { - "alNo": 1, - "alScno": 1, - "alMid": "member", - "alStatus": 1, - "alTime": "2023-04-27", - "alCate": 1 - }, - { - "alNo": 111, - "alScno": 1, - "alMid": "member", - "alStatus": 1, - "alTime": "2023-04-27", - "alCate": 1 - } - ] - */ /** - * 일정 수정 일어날 시 알람 리소스 추가 - 1 (알람추가지만 .. POST말고, GET으로 요청함) + * 일정 수정 일어날 시 알람 리소스 추가 - 1 * 일정 삭제 일어날 시 알람 리소스 추가 - 0 * @return */ - // http://localhost:8080/alarms/{kind}?scNo=1 - // http://localhost:8080/alarms/1?scNo=1 - // http://localhost:8080/alarms/0?scNo=1 - @GetMapping("/alarms/{kind}") + // http://localhost:8080/alarms/1?scNo=57 + // http://localhost:8080/alarms/0?scNo=58 + @PostMapping ("/alarms/{kind}") @ResponseBody - public AjaxStatus addAlarms(@PathVariable String kind, @RequestParam int scNo) { - int kinds = Integer.parseInt(kind); + public String addAlarms(@PathVariable int kind, @RequestParam int scNo) { - if(AlarmCate.MODIFY_SCHEDULE.ordinal()==kinds){ + if(AlarmCate.MODIFY_SCHEDULE.ordinal()==kind){ alarmService.addAlarmByModifySchedule(scNo); - } else if (AlarmCate.DELETE_SCHDULE.ordinal()==kinds){ + } else if (AlarmCate.DELETE_SCHDULE.ordinal()==kind){ alarmService.addAlarmByDeleteSchedule(scNo); } else { - return AjaxStatus.FAIL; + return "fail"; } - return AjaxStatus.OK; - } - - /** - * 동행 추가 일어날 시 알람 리소스 추가 - * @return - */ - // http://localhost:8080/alarms?scNo=1 - /* - @GetMapping("/alarms") - @ResponseBody - public Status addAlarms(@RequestParam int scNo) { - alarmService.addAlarmByModifySchedule(scNo); - return Status.ADD_OK; + return "ok"; } - */ - - //1. 일정 수정 >> 비동기로 스케줄테이블 수정 처리하는 요청 처리 메소드 PATCH - //2. 일정 수정 >> 동행에게 알람을 울리기 위한 요청 처리 메소드 } \ No newline at end of file diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index 8a4aa19c..db8611e4 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -35,12 +35,9 @@ public void addAlarmByModifySchedule(Integer scNo){ String[] idList = findIdList(scNo); //idList[0] , idList[1], idList[2] ... for(int i=0; i findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ + alarm.setAlScno(scNo); alarm.setAlStatus(0);//알람상태 0으로 변경 - 동행에게는 해당 스케줄의 알람이 출력되지 않음 alarmRepository.update(alarm); } @@ -70,7 +68,7 @@ public void addAlarmByDeleteSchedule(Integer scNo){ alarm.setAlScno(scNo); //3. 알람 울릴 스케줄번호 //4. 알람 상태 - 1(고정해놨음) //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(AlarmCate.DELETE_SCHDULE.ordinal()); //6. 0 + alarm.setAlCate(AlarmCate.DELETE_SCHDULE.ordinal()); alarmRepository.save(alarm); //idList의 갯수 만큼 save(alarm) 호출 } } @@ -84,7 +82,6 @@ public void addAlarmByDeleteSchedule(Integer scNo){ public void removeAlarmByScno(Integer scNo){ List findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ - alarm.setAlStatus(0); alarmRepository.delete(alarm.getAlNo());//알람삭제 } } @@ -92,39 +89,74 @@ public void removeAlarmByScno(Integer scNo){ /** * 일정에 초대할 시 울릴 알람 서비스 * 단, 일정에 초대받은 아이디의 알람 객체만 DB에 저장될 것임 - 일괄처리로 알람객체가 저장되는 것이 아님 - * @param addId : 일정에 초대할 아이디 * @param scNo : 일정 번호 + * @param addId : 일정에 초대할 아이디 */ @Transactional - public Alarm addAlarmBySaveTeam(String addId, Integer scNo){ + public Alarm addAlarmBySaveTeam(Integer scNo,String addId){ Alarm alarm = new Alarm(); - //1. 알람 번호 - 자동증가값 - alarm.setAlMid(addId); //2. 알람 울릴 아이디 - alarm.setAlScno(scNo); //3. 알람 울릴 스케줄 - //4. 알람 상태 - 1(고정해놨음) - //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(AlarmCate.SAVE_TEAM.ordinal()); //6. 2 + alarm.setAlMid(addId); + alarm.setAlScno(scNo); + alarm.setAlCate(AlarmCate.SAVE_TEAM.ordinal()); return alarmRepository.save(alarm); } /** - * 일정의 권한을 변경할 시 울릴 알람 서비스 + * 일정에 삭제될 시 울릴 알람 서비스 + * 단, 일정에 삭제된 아이디의 알람 객체만 DB에 저장될 것임 - 일괄처리로 알람객체가 저장되는 것이 아님 + * @param scNo : 일정 번호 + * @param removeId : 일정을 삭제할 아이디 + */ + //@Transactional + public Alarm addAlarmByDeleteTeam(Integer scNo,String removeId){ + int alScno = scNo; + List findAlarmList = alarmRepository.findByAlScno(alScno); + for(Alarm alarm:findAlarmList){ + if(alarm.getAlMid().equals(removeId)){ //해당 아이디만 알람상태 0으로 변경 + alarm.setAlScno(alScno); + alarm.setAlStatus(0); + alarmRepository.update(alarm); + } + } + Alarm NewAlarm = new Alarm(); + NewAlarm.setAlMid(removeId); + NewAlarm.setAlScno(alScno); + NewAlarm.setAlCate(AlarmCate.REMOVE_TEAM.ordinal()); + return alarmRepository.save(NewAlarm); + } + + /** + * 일정의 권한을 읽기로 변경할 시 울릴 알람 서비스 * 단, 권한을 변경받은 동행의 알람 객체만 DB에 저장될 것임 - 일괄처리로 알람객체가 저장되는 것이 아님 * @param updateId : 일정 권한을 변경할 아이디 * @param scNo : 일정 번호 */ @Transactional - public void addAlarmByUpdateTeamLevel(String updateId, Integer scNo){ + public void addAlarmByUpdateTeamLevelRead(String updateId, Integer scNo){ String[] idList = findIdList(scNo); //idList[0] , idList[1], idList[2] ... for(String id:idList){ if(id.equals(updateId)) { Alarm alarm = new Alarm(); - //1. 알람 번호 - 자동증가값 - alarm.setAlMid(updateId); //2. 알람 울릴 아이디 - alarm.setAlScno(scNo); //3. 알람 울릴 스케줄 - //4. 알람 상태 - 1(고정해놨음) - //5. 알람 추가한 시간 - sysdate - alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL.ordinal()); //6. 3 + alarm.setAlMid(updateId); + alarm.setAlScno(scNo); + alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL_READ.ordinal()); + alarmRepository.save(alarm); + } + } + } + + /** + * 일정의 권한을 쓰기로 변경할 시 울릴 알람 서비스 + */ + @Transactional + public void addAlarmByUpdateTeamLevelWrite(String updateId, Integer scNo){ + String[] idList = findIdList(scNo); + for(String id:idList){ + if(id.equals(updateId)) { + Alarm alarm = new Alarm(); + alarm.setAlMid(updateId); + alarm.setAlScno(scNo); + alarm.setAlCate(AlarmCate.UPDATE_TEAMLEVEL_WRITE.ordinal()); alarmRepository.save(alarm); } } From 3ea950673666dd582c825816cb5d073ae82c4da1 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:01:19 +0900 Subject: [PATCH 410/895] =?UTF-8?q?[FEAT]=20=EC=95=8C=EB=9E=8C=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/dto/AlarmCate.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/dto/AlarmCate.java b/src/main/java/com/effourt/calenkit/dto/AlarmCate.java index 64f5482b..a57a6fec 100644 --- a/src/main/java/com/effourt/calenkit/dto/AlarmCate.java +++ b/src/main/java/com/effourt/calenkit/dto/AlarmCate.java @@ -1,9 +1,11 @@ package com.effourt.calenkit.dto; //알람 울릴 카테고리 -// => 일정 삭제(0),수정(1),초대(2),권한변경(3) +// => 일정 삭제(0),일정 수정(1) +// => 일정 초대(2), 초대된 일정에서 삭제(3) +// => 권한 읽기로 변경(4), 권한 쓰기로 변경(5) public enum AlarmCate { - DELETE_SCHDULE, MODIFY_SCHEDULE, SAVE_TEAM, UPDATE_TEAMLEVEL; + DELETE_SCHDULE, MODIFY_SCHEDULE, SAVE_TEAM, REMOVE_TEAM, UPDATE_TEAMLEVEL_READ,UPDATE_TEAMLEVEL_WRITE; /* public static void main(String[] args) { //인덱스값 출력됨 - type int From 4cc1982a1a06dca715223cf5fed56ab29af558f3 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:02:09 +0900 Subject: [PATCH 411/895] =?UTF-8?q?[DOCS]=20Naming=20Convention=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ddl.sql | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sql/ddl.sql b/sql/ddl.sql index 30eb901e..61a23ec9 100644 --- a/sql/ddl.sql +++ b/sql/ddl.sql @@ -8,3 +8,12 @@ -- [TEST] 테스트 코드 추가 삭제 변경 - 테스트 코드 관련 모든 변경사항들 -- [ETC] 기타 애매한 경우 + +-- DOMAIN REPOSITORY(mybatis3, JPA) SERVICE +-- INSERT SAVE ADD +-- UPDATE UPDATE MODIFY +-- DELETE DELETE REMOVE +-- SELECT FIND GET + + + From b89ae86287d98baa23e3da110a7d2eea42222ece Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:02:39 +0900 Subject: [PATCH 412/895] =?UTF-8?q?[FEAT]=20=EB=8F=99=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=EC=82=AD=EC=A0=9C,=EA=B6=8C=ED=95=9C=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 37e0a270..d88b5bde 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -60,7 +60,7 @@
  • - + [[${team.teamMid}]] [[${imageList.get(teamStat.index)}]] @@ -144,7 +144,7 @@ dataType: "json", data: JSON.stringify({"memId": memId}), success: function(result) { - location.href="/schedules?scNo="+scNo; + //location.href="/schedules?scNo="+scNo; }, error: function(xhr, status, error) { console.error("error: ", status, ", ", error); @@ -186,7 +186,7 @@ dataType: "text", data: JSON.stringify({"teamMid": teamMId}), success: function(result) { - location.href="/schedules?scNo="+scNo; + //location.href="/schedules?scNo="+scNo; }, error: function(xhr, status, error) { console.error("error: ", status, ", ", error); From 0d03901951c7f198a9d401309f4ec8ea352f39d0 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 03:03:02 +0900 Subject: [PATCH 413/895] =?UTF-8?q?[FEAT]=20=EB=8F=99=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=EC=82=AD=EC=A0=9C,=EA=B6=8C=ED=95=9C=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20+=20=EC=95=8C=EB=9E=8C=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/TeamController.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/TeamController.java b/src/main/java/com/effourt/calenkit/controller/TeamController.java index 711a52c3..37df751e 100644 --- a/src/main/java/com/effourt/calenkit/controller/TeamController.java +++ b/src/main/java/com/effourt/calenkit/controller/TeamController.java @@ -6,6 +6,7 @@ import com.effourt.calenkit.repository.MemberRepository; import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.repository.TeamRepository; +import com.effourt.calenkit.service.AlarmService; import com.effourt.calenkit.service.TeamScheduleService; import com.effourt.calenkit.util.EmailSend; import lombok.RequiredArgsConstructor; @@ -22,6 +23,8 @@ public class TeamController { private final TeamScheduleService teamScheduleService; + private final AlarmService alarmService; + private final TeamRepository teamRepository; private final MemberRepository memberRepository; private final ScheduleRepository scheduleRepository; @@ -55,7 +58,7 @@ public List searchMyTeam(@PathVariable int scNo) { /** - * 동행 추가 + * 동행 추가 (동행추가 + 알람서비스) * */ // http://localhost:8080/teams/share/1 : memId=member // http://localhost:8080/teams/share/1 : memId=test@test.com @@ -64,17 +67,15 @@ public List searchMyTeam(@PathVariable int scNo) { @PostMapping ("/teams/share/{scNo}") @ResponseBody public Team shareTeam(@PathVariable int scNo, @RequestBody Map map) { - Team newTeam = teamScheduleService.addTeam(scNo,(String)map.get("memId")); - - if(newTeam.equals("") || newTeam==null){ //삽입 실패 - return null; //예외처리 - } + String memId = (String)map.get("memId"); + Team newTeam = teamScheduleService.addTeam(scNo,memId); + alarmService.addAlarmBySaveTeam(scNo,memId); //알람서비스 return newTeam; } /*** - * 동행의 권한 상태 변경 + * 동행의 권한 상태 변경 (권한상태변경 + 알람서비스) * @param map -> teamLevel은 무조건 - 읽기권한:0, 수정권한:1 * @return */ @@ -87,18 +88,26 @@ public String updateTeamLevel(@PathVariable int scNo,@RequestBody Map map) { - return teamScheduleService.removeTeam(scNo, map.get("teamMid")); + public String deleteMyTeam(@PathVariable int scNo,@RequestBody Map map) { + String id = map.get("teamMid"); + teamScheduleService.removeTeam(scNo, id); + alarmService.addAlarmByDeleteTeam(scNo,id); //알람서비스 + return "deleteMyTeam ok"; } From 758bf2e82b8c77478e787883a8c346137af4d0db Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 04:26:37 +0900 Subject: [PATCH 414/895] =?UTF-8?q?[FIX]=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml index 15ff0787..8c855bd0 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -11,7 +11,7 @@ UPDATE ALARM SET AL_STATUS=#{alStatus} - WHERE AL_SCNO=#{scNo} + WHERE AL_SCNO=#{alScno} From 1e5cc5f9553c399965f07de69fa69230056fb2e0 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 04:26:57 +0900 Subject: [PATCH 415/895] =?UTF-8?q?[FIX]=20addAlarmByDeleteTeam=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/service/AlarmService.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index db8611e4..4e33eeb0 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -7,12 +7,14 @@ import com.effourt.calenkit.repository.ScheduleRepository; import com.effourt.calenkit.repository.TeamRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +@Slf4j @Service @RequiredArgsConstructor public class AlarmService { @@ -55,7 +57,6 @@ public void addAlarmByDeleteSchedule(Integer scNo){ //1. List findAlarmList = alarmRepository.findByAlScno(scNo); for(Alarm alarm:findAlarmList){ - alarm.setAlScno(scNo); alarm.setAlStatus(0);//알람상태 0으로 변경 - 동행에게는 해당 스케줄의 알람이 출력되지 않음 alarmRepository.update(alarm); } @@ -109,18 +110,29 @@ public Alarm addAlarmBySaveTeam(Integer scNo,String addId){ */ //@Transactional public Alarm addAlarmByDeleteTeam(Integer scNo,String removeId){ - int alScno = scNo; - List findAlarmList = alarmRepository.findByAlScno(alScno); - for(Alarm alarm:findAlarmList){ - if(alarm.getAlMid().equals(removeId)){ //해당 아이디만 알람상태 0으로 변경 - alarm.setAlScno(alScno); - alarm.setAlStatus(0); - alarmRepository.update(alarm); + List findAlarmList = alarmRepository.findByAlMid(removeId); + + log.info(""+findAlarmList.size()); + + List zeroAlarmList = new ArrayList<>(); + for(Alarm findAlarm : findAlarmList){ + log.info(""+findAlarm.getAlMid()); + log.info(""+removeId); + if(findAlarm.getAlMid().equals(removeId)){ + zeroAlarmList.add(findAlarm); } + log.info(""+zeroAlarmList.size()); + } + + for(Alarm zeroAlarm : zeroAlarmList){ + zeroAlarm.setAlStatus(0); + log.debug(""+zeroAlarm.getAlScno()); + alarmRepository.update(zeroAlarm); } + Alarm NewAlarm = new Alarm(); NewAlarm.setAlMid(removeId); - NewAlarm.setAlScno(alScno); + NewAlarm.setAlScno(scNo); NewAlarm.setAlCate(AlarmCate.REMOVE_TEAM.ordinal()); return alarmRepository.save(NewAlarm); } From 32cdd267d53ea9c88c50871adba1f46ed71bd769 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 04:27:06 +0900 Subject: [PATCH 416/895] =?UTF-8?q?[FIX]=20addAlarmByDeleteTeam=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2ee3662e..166d6544 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -31,4 +31,7 @@ spring.security.oauth2.client.provider.kakao.token-uri=https://kauth.kakao.com/o spring.security.oauth2.client.provider.kakao.user-info-uri=https://kapi.kakao.com/v2/user/me spring.security.oauth2.client.provider.kakao.user-name-attribute=id -logging.level.com.effourt.calenkit.client.KakaoFeignClient=DEBUG \ No newline at end of file +logging.level.com.effourt.calenkit.client.KakaoFeignClient=DEBUG +logging.level.com.effourt.calenkit.service.TeamScheduleService=DEBUG +logging.level.com.effourt.calenkit.service.AlarmService=DEBUG +logging.level.com.effourt.calenkit.controller.TeamController=DEBUG \ No newline at end of file From 262ef61a4d6ab2a4df8f9ac667db66d0652ee0f3 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 15:22:49 +0900 Subject: [PATCH 417/895] =?UTF-8?q?[FIX]=20delete=EC=9D=98=20where=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java | 5 +++-- .../com/effourt/calenkit/repository/AlarmRepository.java | 5 +++-- .../effourt/calenkit/repository/AlarmRepositoryImpl.java | 6 +++--- .../resources/com/effourt/calenkit/mapper/AlarmMapper.xml | 7 +++---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java index 2f35788a..b709262d 100644 --- a/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/AlarmMapper.java @@ -2,6 +2,7 @@ import com.effourt.calenkit.domain.Alarm; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -9,7 +10,7 @@ public interface AlarmMapper { Integer save(Alarm alarm); Integer update(Alarm alarm); - Integer delete(Integer alNo); + Integer delete(@Param("alMid") String alMid, @Param("alScno") Integer alScno); List findByAlMid(String alMid); - List findByAlScno(Integer AlScno); + List findByAlScno(Integer alScno); } diff --git a/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java b/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java index d1fcc74e..2cdcfd94 100644 --- a/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java +++ b/src/main/java/com/effourt/calenkit/repository/AlarmRepository.java @@ -1,13 +1,14 @@ package com.effourt.calenkit.repository; import com.effourt.calenkit.domain.Alarm; +import org.apache.ibatis.annotations.Param; import java.util.List; public interface AlarmRepository { Alarm save(Alarm alarm); Integer update(Alarm alarm); - Integer delete(Integer alNo); + Integer delete(String alMid,Integer alScno); List findByAlMid(String alMid); - List findByAlScno(Integer AlScno); + List findByAlScno(Integer slScno); } diff --git a/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java b/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java index 1f66d6fb..5fecb82e 100644 --- a/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java +++ b/src/main/java/com/effourt/calenkit/repository/AlarmRepositoryImpl.java @@ -29,11 +29,11 @@ public Integer update(Alarm alarm) { } @Override - public Integer delete(Integer alNo) { - - return sqlSessionTemplate.getMapper(AlarmMapper.class).delete(alNo); + public Integer delete(String alMid, Integer alScno) { + return sqlSessionTemplate.getMapper(AlarmMapper.class).delete(alMid,alScno); } + @Override public List findByAlMid(String alMid) { return sqlSessionTemplate.getMapper(AlarmMapper.class).findByAlMid(alMid); diff --git a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml index 8c855bd0..f194f73a 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/AlarmMapper.xml @@ -15,10 +15,9 @@ - - - DELETE FROM ALARM WHERE AL_NO=#{alNo} - + From 004e2839c45545ea96c467394e812a44ce405e72 Mon Sep 17 00:00:00 2001 From: jaeheela Date: Thu, 4 May 2023 15:23:08 +0900 Subject: [PATCH 418/895] =?UTF-8?q?[FIX]=20=EC=95=8C=EB=9E=8C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/service/AlarmService.java | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/service/AlarmService.java b/src/main/java/com/effourt/calenkit/service/AlarmService.java index 4e33eeb0..a041ada2 100644 --- a/src/main/java/com/effourt/calenkit/service/AlarmService.java +++ b/src/main/java/com/effourt/calenkit/service/AlarmService.java @@ -81,9 +81,9 @@ public void addAlarmByDeleteSchedule(Integer scNo){ */ @Transactional public void removeAlarmByScno(Integer scNo){ - List findAlarmList = alarmRepository.findByAlScno(scNo); - for(Alarm alarm:findAlarmList){ - alarmRepository.delete(alarm.getAlNo());//알람삭제 + String[] idList = findIdList(scNo); + for(int i=0; i findAlarmList = alarmRepository.findByAlMid(removeId); - - log.info(""+findAlarmList.size()); - - List zeroAlarmList = new ArrayList<>(); - for(Alarm findAlarm : findAlarmList){ - log.info(""+findAlarm.getAlMid()); - log.info(""+removeId); - if(findAlarm.getAlMid().equals(removeId)){ - zeroAlarmList.add(findAlarm); - } - log.info(""+zeroAlarmList.size()); - } - - for(Alarm zeroAlarm : zeroAlarmList){ - zeroAlarm.setAlStatus(0); - log.debug(""+zeroAlarm.getAlScno()); - alarmRepository.update(zeroAlarm); + List alarmList = alarmRepository.findByAlMid(removeId); + for(Alarm alarm:alarmList){ + if(alarm.getAlScno()==scNo) alarmRepository.delete(removeId,scNo); } - Alarm NewAlarm = new Alarm(); NewAlarm.setAlMid(removeId); NewAlarm.setAlScno(scNo); From d1316f99d852522170e260401b935f659b8928b8 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:08:17 +0900 Subject: [PATCH 419/895] =?UTF-8?q?[FIX]=EC=A6=90=EA=B2=A8=EC=B0=BE?= =?UTF-8?q?=EA=B8=B0=20=EC=9D=BC=EC=A0=95=20SELECT=20SQL=20=EB=AA=85?= =?UTF-8?q?=EB=A0=B9=20=EB=B0=98=ED=99=98=ED=98=95=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/effourt/calenkit/mapper/TeamMapper.java | 1 + .../java/com/effourt/calenkit/repository/TeamRepository.java | 2 +- .../com/effourt/calenkit/repository/TeamRepositoryImpl.java | 4 ++-- src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java index 3e3353a1..c8c99b19 100644 --- a/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java +++ b/src/main/java/com/effourt/calenkit/mapper/TeamMapper.java @@ -15,5 +15,6 @@ public interface TeamMapper { List findByMid(String teamMid); List findByid(String teamMid); + List findByBookmark(String teamMid); List findBySno(Integer teamSno); } diff --git a/src/main/java/com/effourt/calenkit/repository/TeamRepository.java b/src/main/java/com/effourt/calenkit/repository/TeamRepository.java index dff65c55..5da78749 100644 --- a/src/main/java/com/effourt/calenkit/repository/TeamRepository.java +++ b/src/main/java/com/effourt/calenkit/repository/TeamRepository.java @@ -11,6 +11,6 @@ public interface TeamRepository { Integer delete(Integer teamSno, String teamMid); List findByMid(String teamMid); List findByid(String teamMid); - List findByBookmark(String teamMid); + List findByBookmark(String teamMid); List findBySno(Integer teamSno); } diff --git a/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java b/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java index 130eb065..e7e326bf 100644 --- a/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java +++ b/src/main/java/com/effourt/calenkit/repository/TeamRepositoryImpl.java @@ -42,8 +42,8 @@ public List findByid(String teamMid) { } @Override - public List findByBookmark(String teamMid) { - return sqlSessionTemplate.getMapper(TeamMapper.class).findByMid(teamMid); + public List findByBookmark(String teamMid) { + return sqlSessionTemplate.getMapper(TeamMapper.class).findByBookmark(teamMid); } @Override diff --git a/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml index 6ccbaa21..0bbe2cc9 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/TeamMapper.xml @@ -40,7 +40,7 @@ - SELECT TEAM_SNO FROM TEAM WHERE TEAM_MID=#{teamMid} AND TEAM_BOOKMARK=1 From 29f70b4e11dccf9e5bbe93537726211f249d7e8e Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:09:11 +0900 Subject: [PATCH 420/895] =?UTF-8?q?[TEST]=EC=99=84=EC=A0=84=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=9E=84=EC=8B=9C=EB=B2=84=ED=8A=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index d88b5bde..5be3c4f4 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -27,6 +27,7 @@ 동행 :

    상태 :

    휴지통 이동 + 삭제 test From 3ee217d16e2c4fdcd4853466e2ffb79d6b039ec4 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:11:32 +0900 Subject: [PATCH 421/895] =?UTF-8?q?[FEAT]=EC=9D=BC=EC=A0=95,=20=EC=A6=90?= =?UTF-8?q?=EA=B2=A8=EC=B0=BE=EA=B8=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5,=20=EC=99=84=EC=A0=84=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/controller/ScheduleController.java | 14 +++----------- src/main/resources/templates/sidebar.html | 14 ++++++-------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java index 379d1d00..ce6f6bfb 100644 --- a/src/main/java/com/effourt/calenkit/controller/ScheduleController.java +++ b/src/main/java/com/effourt/calenkit/controller/ScheduleController.java @@ -50,22 +50,14 @@ public String main(Model model, HttpSession session) { model.addAttribute("alarmList", alarmList); } model.addAttribute("titleList", titleList); - for(int i=0;i scheduleList=myScheduleService.getMySchedule(loginId, null); model.addAttribute("scheduleList", scheduleList); //개인 즐겨찾기리스트 조회 List bookmarkList=myScheduleService.getBookmark(loginId, null); - model.addAttribute("bookmarkList", bookmarkList);*/ + model.addAttribute("bookmarkList", bookmarkList); return "main"; } diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 3e0c8c98..c4e1b5b0 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -42,10 +42,9 @@

    cat

    즐겨찾기
    @@ -54,10 +53,9 @@

    cat

    일정
    From 17514263b33f5853db27247b0a731e1bb17e4f4f Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:11:48 +0900 Subject: [PATCH 422/895] =?UTF-8?q?[FIX]DIV=20=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=95=88=EB=8B=AB=ED=9E=8C=EA=B1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 5be3c4f4..c0c93f16 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -88,6 +88,7 @@ + From 4933dc19ebe52affd0c6eea861338343a5523949 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Wed, 3 May 2023 17:52:29 +0900 Subject: [PATCH 423/895] =?UTF-8?q?[FEAT]=ED=9C=B4=EC=A7=80=ED=86=B5=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1,?= =?UTF-8?q?=20Status=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index c4e1b5b0..95221cfb 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -43,7 +43,9 @@

    cat

    @@ -54,7 +56,9 @@

    cat

    @@ -116,6 +120,15 @@
  • Separated link
  • +
    +
      + + +
    • ([[${schedule.getScNo}]])[[${schedule.getScSdate}]] ~ [[${schedule.getScEdate}]] / [[${schedule.getScTitle}]]
    • +
      +
      +
    +
    @@ -87,6 +88,7 @@ + diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 3e0c8c98..95221cfb 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -42,10 +42,11 @@

    cat

    즐겨찾기
    @@ -54,10 +55,11 @@

    cat

    일정
    @@ -118,6 +120,15 @@
  • Separated link
  • +
    +
      + + +
    • ([[${schedule.getScNo}]])[[${schedule.getScSdate}]] ~ [[${schedule.getScEdate}]] / [[${schedule.getScTitle}]]
    • +
      +
      +
    +
    -
    - 알림    +
    + 알림    4
    -
    + +
    @@ -74,6 +70,9 @@

    cat

    ->JF&PDC_h=V1bRVn+c~e3= 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ⅈJ*4&Zc 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 z%0D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⑬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 Qd+-l00b{`_eE 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

    N5?I+4TqHWLC{~#H7iBA3dOs z55@3qYt~t=B{AYR*>>EVgY)JMzjni1Iu|+c^t%S6wBDk#U-p67WR8-0Ahk2%<>Y=> zNH9;zYGV)AlTcR791DzPu4CtliZ6auGVVx%@MRngQW0lY5V1zs!uBgENUw9qK46cV zjEuVG?-pTu>b&Z2{I#)7-(g!X?r7o6=2&HmTAnYwlkC^Bkd4^g!4+hB_w8#GrBj0V zE-PS6U1-MGfG=_abiRwg=Rs;ddsr}w%-7YXfV;@|VoLX4esGw!>Vz^HSM4^|+gNi# zyfg1{3qH9b@017gEhl6?^DEeaHb>*rWb&ud+-2Gtev>_@EW!<5airde^muAToqO>d zVGzMO5GB`G>vc=%{nr)-N(z!Q^6?FxQwEPRZQsF!WEy5c{Gt8o2xG+JH)YA2Y#V_+ zfAjMaE{H$Ja=w-0-9Fi!=^ma|7pnofI*fIuT%Kw)6cq*(pYOMKZTTu zm8r1WoP~22gvIm=R<66*5CzvUse0$he`q%t-;_xpJyymH$BGtkRPIK(x5j-r zU&4n48ZwbC?1nuxUNIfL3X>P?A(BJw9(h`>^bX)`HP)P~R!#YlmD<9enO@>!?mQY$ zp0Os9sYvu?rKDY8*kRAT$pIJma+m*QnU;c4+<=m=lof!=6Y)^nY4X2z+@-0~|76EyLr_#fr z4nat>OxaAo@i}zRpLtJB!TZwtAVuhzT84ivkDf`d0;s1|%@eyv8O?zAR}eJ`=kIs4 z?yQa7N?l$`rO%vo- z;=SeTFr}XVB6UT;QvcrN8e>RD;^+He^r966rIdpGR*Nh7TmOgeetNv|rOLt#{k)~! zL^r+>SD2gxP81w!Ev+^0%C@sTCMG-cNKsltX4};z!!yhDVysQvVXm0Mz@|E{wuhH? zYFr|58@(|N{5PUcMd`R}JRzXw7egLclv!wOiD?~8X>6TL<-udlxn@`xf z!d+fZemZoGFuW=7UUq{U4wDn-23QHsvKRyYfFT+<2HGTC7 zK9DWFYdunXF5PPze6t2V=)G9y`f8^(mm_k$#g%;Ar}m-oO}(Y5)DK z_sdCZOk?#PzgpLphSYxrD2pwm9R^$kJz!J)B5CKAw(xu=MD~M=A9c6W5HIbj5i||( zCEn=^kFA`2+@YXwH>2xV3}2~sIE#oNPZi9eH=CtiI$Vv5pn6(yk07m{809t*2Tt

    ->JF&PDC_h=V1bRVn+c~e3= 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

    xKKa0~lCpQ~>+#BFRL`rtX$z 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�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 Date: Thu, 18 May 2023 15:02:53 +0900 Subject: [PATCH 835/895] =?UTF-8?q?[FIX]=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EC=8B=9C=20FeignException=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=20=EC=A7=80=EC=A0=90=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/effourt/calenkit/controller/MemberController.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index 93a82b8d..e9dc86cf 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -326,10 +326,6 @@ public String returnURI(HttpSession session) { public String logout(HttpSession session) { log.info("로그아웃 시작"); String id = (String) session.getAttribute("loginId"); - Integer authId = loginService.getMemberById(id).getMemAuthId(); - if (authId != null) { - loginService.expireToken(authRepository.findByAuthId(authId).getAuthAccess()); - } session.invalidate(); log.info("로그아웃 종료"); return "redirect:/login/form"; From e1cfec1b42a23b069bb0154809e1f9ba6f89d94d Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Thu, 18 May 2023 15:03:20 +0900 Subject: [PATCH 836/895] =?UTF-8?q?[FEAT]=20=EC=9D=B8=ED=84=B0=EC=85=89?= =?UTF-8?q?=ED=84=B0=20=EC=A0=81=EC=9A=A9=20=EB=B0=B0=EC=A0=9C=20url=20".i?= =?UTF-8?q?co"=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/config/InterceptorConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java index 442063c7..08f2f819 100644 --- a/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java +++ b/src/main/java/com/effourt/calenkit/config/InterceptorConfig.java @@ -24,16 +24,16 @@ public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) .order(1) .addPathPatterns("/**") - .excludePathPatterns("/css/**", "/js/**", "/img/**", "/library/**", "/login/**", "/member/logout", "/join/**", "/error"); + .excludePathPatterns("/css/**", "/js/**", "/img/**", "/library/**", "*.ico", "/login/**", "/member/logout", "/join/**", "/error"); //유저 권한 체크 인터셉터 registry.addInterceptor(userAuthInterceptor) .order(2) .addPathPatterns("/**") - .excludePathPatterns("/css/**", "/js/**", "/img/**", "/library/**", "/login/**", "/member/logout", "/join/**", "/error", "/members/admin/**"); + .excludePathPatterns("/css/**", "/js/**", "/img/**", "/library/**", "*.ico", "/login/**", "/member/logout", "/join/**", "/error", "/members/admin/**"); //관리자 권한 체크 인터셉터 registry.addInterceptor(adminAuthInterceptor) .order(3) .addPathPatterns("/members/admin/**") - .excludePathPatterns("/css/**", "/js/**", "/img/**", "/library/**", "/login/**", "/logout", "/join/**", "/error"); + .excludePathPatterns("/css/**", "/js/**", "/img/**", "/library/**", "*.ico", "/login/**", "/logout", "/join/**", "/error"); } } From 3f63dcb6fc0a2999534c59b331218a371dc33d35 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Thu, 18 May 2023 15:03:57 +0900 Subject: [PATCH 837/895] =?UTF-8?q?[FEAT]=20OAuth=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calenkit/exception/handler/FeignClientExceptionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/exception/handler/FeignClientExceptionHandler.java b/src/main/java/com/effourt/calenkit/exception/handler/FeignClientExceptionHandler.java index 4ed66875..ee2c1804 100644 --- a/src/main/java/com/effourt/calenkit/exception/handler/FeignClientExceptionHandler.java +++ b/src/main/java/com/effourt/calenkit/exception/handler/FeignClientExceptionHandler.java @@ -13,7 +13,7 @@ import java.io.IOException; @Slf4j -@ControllerAdvice("com.effourt.calenkit.client") +@ControllerAdvice(basePackages = {"com.effourt.calenkit.controller", "com.effourt.calenkit.client"}) public class FeignClientExceptionHandler { @ExceptionHandler(FeignException.class) From 7d0d7d66afea167dac5484ad2b7d639e78b7711c Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Thu, 18 May 2023 15:05:13 +0900 Subject: [PATCH 838/895] =?UTF-8?q?[ETC]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/controller/MemberController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/controller/MemberController.java b/src/main/java/com/effourt/calenkit/controller/MemberController.java index e9dc86cf..d1c2147b 100644 --- a/src/main/java/com/effourt/calenkit/controller/MemberController.java +++ b/src/main/java/com/effourt/calenkit/controller/MemberController.java @@ -325,7 +325,6 @@ public String returnURI(HttpSession session) { @GetMapping("/member/logout") public String logout(HttpSession session) { log.info("로그아웃 시작"); - String id = (String) session.getAttribute("loginId"); session.invalidate(); log.info("로그아웃 종료"); return "redirect:/login/form"; From 552d0d04c03772aba4b84a3f5858adba488c171b Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Fri, 19 May 2023 16:21:47 +0900 Subject: [PATCH 839/895] =?UTF-8?q?[ETC]=20email,=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=85=B8=EC=B6=9C=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index bcd07fed..33fadef0 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,8 +12,8 @@ spring.servlet.multipart.max-request-size=10MB #Google SMTP 설정 spring.mail.host=smtp.gmail.com spring.mail.post=587 -spring.mail.username=offlmuaa@gmail.com -spring.mail.password=vkzffrggvwdncqkk +spring.mail.username=${mail.username} +spring.mail.password=${mail.password} spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.timeout=5000 spring.mail.properties.mail.smtp.starttls.enable=true From 4585c857014bd952a497be7133f80349e320acc9 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Fri, 19 May 2023 16:22:28 +0900 Subject: [PATCH 840/895] =?UTF-8?q?[FEAT]=20=EC=9D=BC=EC=A0=95=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=8B=A4=EC=8B=9C=EA=B0=84=20=EA=B0=B1=EC=8B=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 51 ++++++++++++++++-------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 4326c20d..1b76b702 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -133,6 +133,14 @@

    const queryString = window.location.search; //?scNo=1 const scNo = new URLSearchParams(queryString).get('scNo'); //1 + const socket = new SockJS("/schedule"); + socket.onopen = function() { + console.log('WebSocket connection opened'); + }; + socket.onclose = function() { + console.log('WebSocket connection closed'); + } + // ~~~ CKEditor DB연동 파트 ~~~ $.ajax({ url: "load?scNo="+scNo, @@ -141,39 +149,50 @@ ClassicEditor .create(document.querySelector("#editor")) //CKEditor 입력창 생성 .then(editor => { //CKEditor 이벤트 감지 메소드 - //if(웹소켓 객체 받아온 게 있으면 - //editor.setData(받아온 웹소켓 객체); + let text = null; + let data = null; - //else ↓ - editor.setData(result/*받아온 웹소켓 객체*/);//DB값(scContent) 출력 + socket.onmessage = function(text) { + console.log("웹소켓 메시지 받기"); + editor.setData(text.data); + console.log("editor 사본"); + } + //else(default - DB값) + editor.setData(result); + console.log("editor 원본"); - //작성 + + //write - UPDATE editor.model.document.on('change:data', () => { //입력 감지 - var data = editor.getData(); //데이터 받아오기 - console.log('Editor data:', data); + data = editor.getData(); //입력데이터 받아오기 + text = { + "content":data, + "scNo":scNo + } + }) //data change + + editor.editing.view.document.on('keydown', (event, k) => { //enter event + if(k.keyCode==13) { + socket.send(JSON.stringify(text)); + console.log("웹소켓 전송") + console.log('Editor data:', data); - var timeout = null; - clearTimeout(timeout); - timeout = setTimeout(function () { $.ajax({ url: "write?scNo="+scNo, method: "patch", data: {"scContent": data}, //데이터 scContent로 전송 success: function (result) { if(result="success"){ - /* console.log("data = "+data); //data 사용 가능 */ console.log("content write SUCCESS status = " + result.status); - //보내는 웹소켓 로직 - } }, error: function (xhr) { console.log("content write ERROR status = " + xhr.status); } - }); - }, 1000); - }) //data change + });//ajax + } + }); //enter event }) .catch(error => { console.error(error.stack); From 55a8dbf128b943e495de4e3d0abf0a01cc75f4b6 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Fri, 19 May 2023 16:23:07 +0900 Subject: [PATCH 841/895] =?UTF-8?q?[FEAT]=20=EC=9D=BC=EC=A0=95=20=EC=9B=B9?= =?UTF-8?q?=EC=86=8C=EC=BC=93=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=A0=84?= =?UTF-8?q?=EC=86=A1=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../websockethandler/ScheduleHandler.java | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/src/main/java/com/effourt/calenkit/util/websockethandler/ScheduleHandler.java b/src/main/java/com/effourt/calenkit/util/websockethandler/ScheduleHandler.java index f2e797c0..ef71bacd 100644 --- a/src/main/java/com/effourt/calenkit/util/websockethandler/ScheduleHandler.java +++ b/src/main/java/com/effourt/calenkit/util/websockethandler/ScheduleHandler.java @@ -1,5 +1,108 @@ package com.effourt.calenkit.util.websockethandler; +import com.effourt.calenkit.domain.Team; +import com.effourt.calenkit.repository.TeamRepository; +import lombok.extern.slf4j.Slf4j; +import net.minidev.json.JSONObject; +import net.minidev.json.parser.JSONParser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j public class ScheduleHandler extends TextWebSocketHandler { + + private TeamRepository teamRepository; + + public ScheduleHandler(TeamRepository teamRepository) { + this.teamRepository = teamRepository; + } + + /** + * 1:1 매핑 + * key - String : 사용자의 이메일 + * value - WebSocketSession : 사용자의 WebSocket 세션 + */ + Map userSessionsMap = new ConcurrentHashMap<>(); + + + /** + * WebSocket 세션에서 사용자의 이메일을 가져오는 메서드 + * 세션의 속성에서 loginId라는 키로 저장된 사용자 정보를 확인하여 이메일을 반환하거나, 세션 ID를 반환 + */ + private String getEmail(WebSocketSession session) { + Map httpSession = session.getAttributes(); + String loginId = (String) httpSession.get("loginId"); + if (loginId == null) { + return session.getId(); + } + return loginId; + } + + /** + * 클라이언트가 WebSocket에 연결되었을 때 (서버 접속 성공) 호출되는 메서드 + */ + @Override + public void afterConnectionEstablished(WebSocketSession session) { + String email = getEmail(session); // 세션에 연결된 사용자의 이메일 + userSessionsMap.put(email, session); // 세션에 연결된 사용자의 이메일과 세션을 userSessionsMap에 저장 + log.info("email = {}", email); + log.info("session = {}", session); + } + + /** + * WebSocketSession 으로 메시지가 수신되었을 때 (소켓에 메세지를 보냈을때) 호출되는 메서드 + * 수신된 메시지를 처리 후 특정 사용자에게 메시지 전달 + */ + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + String msg = message.getPayload(); + Map httpSession = session.getAttributes(); + String loginId = (String) httpSession.get("loginId"); + log.info("msg = {}", msg); + + JSONParser parser = new JSONParser(); + JSONObject jsonObject = (JSONObject) parser.parse(msg); + Integer scNo = Integer.parseInt((String) jsonObject.get("scNo")); + String content = (String) jsonObject.get("content"); + log.info("scNo = {}", scNo); + log.info("data = {}", content); + + List teamList = teamRepository.findBySno(scNo); + + for(Team team : teamList) { + WebSocketSession loginSession = userSessionsMap.get(team.getTeamMid()); + if (loginId.equals(team.getTeamMid())) {//작성자에게는 미전송 + continue; + } + + //알람받는 이가 로그인해서 있다면 실시간 알림 + if(loginSession != null && loginSession.isOpen()) { + TextMessage tmpMsg = new TextMessage(content); + log.info("tmpMsg = {}", tmpMsg); + loginSession.sendMessage(tmpMsg); + } + } + } + + + + /** + * WebSocket 세션이 닫힐 때(연결 해제될때) 호출되는 메서드 + * @param session + * @param status + * @throws Exception + */ + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + log.info("afterConnectionClosed = {}, {}",session.getId(),status); + userSessionsMap.remove(session.getId()); + } } From c407c9da67c61290e4fc4913dd2fa094d0bf5a22 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Fri, 19 May 2023 16:24:27 +0900 Subject: [PATCH 842/895] =?UTF-8?q?[FEAT]=20ScheduleHandler=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EC=9B=B9=EC=86=8C=EC=BC=93=20tea?= =?UTF-8?q?mRepository=20=EC=9D=98=EC=A1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/effourt/calenkit/config/WebSocketConfig.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/effourt/calenkit/config/WebSocketConfig.java b/src/main/java/com/effourt/calenkit/config/WebSocketConfig.java index 4fee865a..e0102d06 100644 --- a/src/main/java/com/effourt/calenkit/config/WebSocketConfig.java +++ b/src/main/java/com/effourt/calenkit/config/WebSocketConfig.java @@ -1,7 +1,9 @@ package com.effourt.calenkit.config; +import com.effourt.calenkit.repository.TeamRepository; import com.effourt.calenkit.util.websockethandler.AlarmHandler; import com.effourt.calenkit.util.websockethandler.ScheduleHandler; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -13,8 +15,11 @@ @EnableWebSocket @Configuration +@RequiredArgsConstructor public class WebSocketConfig implements WebSocketConfigurer { + private final TeamRepository teamRepository; + @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(alarmHandler(), "/alarm") @@ -32,7 +37,7 @@ public WebSocketHandler alarmHandler() { @Bean public WebSocketHandler scheduleHandler() { - return new ScheduleHandler(); + return new ScheduleHandler(teamRepository); } } From 7cd523ec3be77af629c73089df2544f0e69113f1 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Fri, 19 May 2023 16:27:20 +0900 Subject: [PATCH 843/895] =?UTF-8?q?[FEAT]=20=EC=9D=BC=EC=A0=95=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=9B=B9=EC=86=8C=EC=BC=93=20=EC=88=98=EC=8B=A0=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=84=EC=86=A1=20=EA=B8=B0=EB=8A=A5(=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=86=A0=ED=83=80=EC=9E=85)=20javascript=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/websocket.js | 35 ----------------------- 1 file changed, 35 deletions(-) diff --git a/src/main/resources/static/js/websocket.js b/src/main/resources/static/js/websocket.js index 29bf5aad..1f748325 100644 --- a/src/main/resources/static/js/websocket.js +++ b/src/main/resources/static/js/websocket.js @@ -31,39 +31,4 @@ function sendAlarm(teamSno, teamMid, alCate) { console.log('connect close'); }; socket.onerror = function (err) {console.log('Errors : ' , err);}; -} - - -function receiveSchedule() { //웹소켓 수신 - let socket = new SockJS('/schedule'); - socket.onopen = function() { - console.log('info: connection opened.'); - }; - socket.onmessage = function(event) { - let data = event.data; - console.log("ReceiveMessage : " + data + "\n"); - // 모달 알림 - alert(data); - console.log(data); - }; - socket.onclose = function() { - console.log('connect close'); - }; - socket.onerror = function (err) {console.log('Errors : ' , err);}; -} -function sendSchedule(teamSno,teamMid,html) { - let socket = new SockJS('/schedule'); - socket.onopen = function() { - console.log('info: connection opened.'); - socket.send(html); - }; - const message = { - "scNo":teamSno, - "idList":[teamMid], - "html":html - }; - socket.onclose = function() { - console.log('connect close'); - }; - socket.onerror = function (err) {console.log('Errors : ' , err);}; } \ No newline at end of file From a1d8aff158605576a3611d16180d84a331430953 Mon Sep 17 00:00:00 2001 From: JERI Date: Sat, 20 May 2023 16:47:58 +0900 Subject: [PATCH 844/895] Update README.md --- README.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3fc03d37..fe3573ec 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,30 @@ - 일정을 등록하고 다른 사람들과 공유할 수 있는 실시간 일정 공유 웹프로그램 ### Skill -- Spring Boot -- MyBatis -- MySql -- JSP +

    + html5 + css3 + bootstrap + javascript + jQuery + thymeleaf +

    +

    + java + spring + springboot + springsecurity + springcloud + gradle +

    +

    + mysql + mybatis3 +

    +

    + apacheTomcat + github +

    ## Git Policy From 29a5b0f94eb17da8d32d3a0c5fc7859bf3f65102 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 20 May 2023 16:51:57 +0900 Subject: [PATCH 845/895] =?UTF-8?q?[STYLE]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/detail.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index 1b76b702..bceedbac 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -160,8 +160,6 @@ //else(default - DB값) editor.setData(result); - console.log("editor 원본"); - //write - UPDATE editor.model.document.on('change:data', () => { //입력 감지 From faae38167bb39c4d089d2b3b5389287bd1d88570 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 20 May 2023 16:52:24 +0900 Subject: [PATCH 846/895] =?UTF-8?q?[STYLE]=20=EB=A7=81=ED=81=AC=20CSS=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/main.html | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html index fe84ba85..c4383bf6 100644 --- a/src/main/resources/templates/main.html +++ b/src/main/resources/templates/main.html @@ -61,19 +61,9 @@ location.href="/error"; //에러페이지로 이동 } }); - - - }); From 3d81fd43ae3439558659a7a756e3b9aaa52cf652 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 20 May 2023 16:54:21 +0900 Subject: [PATCH 847/895] =?UTF-8?q?[STYLE]=20=EB=A7=81=ED=81=AC=20css=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20-=20=EC=BB=A4=EC=84=9C=20hover=EC=8B=9C=20?= =?UTF-8?q?=EB=B3=80=ED=99=94x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/css/sidebar.css | 4 ++-- src/main/resources/templates/sidebar.html | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/resources/static/css/sidebar.css b/src/main/resources/static/css/sidebar.css index 4c204698..2a759792 100644 --- a/src/main/resources/static/css/sidebar.css +++ b/src/main/resources/static/css/sidebar.css @@ -3,17 +3,17 @@ body { font-family: "Open Sans", Helvetica Neue, Helvetica, Arial, sans-serif; padding-left: 240px; } -li a { +li a, span span a, header a { color: #fff; text-decoration: none; outline: none } a:hover, a:active{ + !important; text-decoration: none; color:#fff; background-color:rgba(0,0,0,0.1); } - .myBtn{ color: black; } diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 6fa7cb44..64b306fe 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -11,17 +11,15 @@
    From ee4d0a4c573cebf065673d702f9f4675e25735e7 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Sat, 20 May 2023 17:38:12 +0900 Subject: [PATCH 848/895] =?UTF-8?q?[STYLE]a=ED=83=9C=EA=B7=B8=20CSS=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/css/sidebar.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/static/css/sidebar.css b/src/main/resources/static/css/sidebar.css index 2a759792..d0b24a62 100644 --- a/src/main/resources/static/css/sidebar.css +++ b/src/main/resources/static/css/sidebar.css @@ -4,7 +4,6 @@ body { padding-left: 240px; } li a, span span a, header a { - color: #fff; text-decoration: none; outline: none } From a76af4c3af07ff255ec79a182f00108f7838b303 Mon Sep 17 00:00:00 2001 From: mu-aa Date: Sat, 20 May 2023 18:52:27 +0900 Subject: [PATCH 849/895] =?UTF-8?q?[FIX]=EB=A1=9C=EB=94=A9=EB=B0=94=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 30 +++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 64b306fe..44bf038d 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -199,13 +199,13 @@ var scrollHeight = $(this).prop('scrollHeight'); //스크롤 높이 계산 if(scrollTop + innerHeight >= scrollHeight) { //스크롤 바닥에 닿을 때 - isLoading=true; //로딩 중으로 설정 - $(".bookmark_loading-Bar").show();//로딩창 출력 - if(bookmarkCurrentPage==[[${bookmarkTotalPageCount}]]) { //현재 마지막 페이지일 경우 return; //함수 끝 } + isLoading=true; //로딩 중으로 설정 + $(".bookmark_loading-Bar").show();//로딩창 출력 + bookmarkCurrentPage++; //현재 페이지 증가(다음 페이지 요청) //ajax로 받아올 페이지 요청 @@ -253,13 +253,13 @@ var scrollHeight = $(this).prop('scrollHeight'); //스크롤 높이 계산 if(scrollTop + innerHeight >= scrollHeight) { //스크롤 바닥에 닿을 때 - isLoading=true; //로딩 중으로 설정 - $(".schedule_loading-Bar").show();//로딩창 출력 - if(ScheduleCurrentPage==[[${totalPageCount}]]) { //현재 마지막 페이지일 경우 return; //함수 끝 } + isLoading=true; //로딩 중으로 설정 + $(".schedule_loading-Bar").show();//로딩창 출력 + ScheduleCurrentPage++; //현재 페이지 증가(다음 페이지 요청) //ajax로 받아올 페이지 요청 @@ -337,13 +337,13 @@ var scrollHeight = $(this).prop('scrollHeight'); //스크롤 높이 계산 if(scrollTop + innerHeight >= scrollHeight) { //스크롤 바닥에 닿을 때 - isLoading=true; //로딩 중으로 설정 - $(".search_loading-Bar").show();//로딩창 출력 - if(searchCurrentPage==[[${searchTotalPageCount}]]) { //현재 마지막 페이지일 경우 return; //함수 끝 } + isLoading=true; //로딩 중으로 설정 + $(".search_loading-Bar").show();//로딩창 출력 + searchCurrentPage++; //현재 페이지 증가(다음 페이지 요청) //ajax로 받아올 페이지 요청 @@ -398,13 +398,13 @@ var scrollHeight = $(this).prop('scrollHeight'); //스크롤 높이 계산 if(scrollTop + innerHeight >= scrollHeight) { //스크롤 바닥에 닿을 때 - isLoading=true; //로딩 중으로 설정 - $(".recyclebin_loading-Bar").show();//로딩창 출력 - if(recyclebinCurrentPage==[[${recyclebinTotalPageCount}]]) { //현재 마지막 페이지일 경우 return; //함수 끝 } + isLoading=true; //로딩 중으로 설정 + $(".recyclebin_loading-Bar").show();//로딩창 출력 + recyclebinCurrentPage++; //현재 페이지 증가(다음 페이지 요청) //ajax로 받아올 페이지 요청 @@ -485,13 +485,13 @@ var scrollHeight = $(this).prop('scrollHeight'); //스크롤 높이 계산 if(scrollTop + innerHeight >= scrollHeight) { //스크롤 바닥에 닿을 때 - isLoading=true; //로딩 중으로 설정 - $(".recyclebin_loading-Bar").show();//로딩창 출력 - if(recyclebinCurrentPage==[[${recyclebinTotalPageCount}]]) { //현재 마지막 페이지일 경우 return; //함수 끝 } + isLoading=true; //로딩 중으로 설정 + $(".recyclebin_loading-Bar").show();//로딩창 출력 + recyclebinCurrentPage++; //현재 페이지 증가(다음 페이지 요청) //ajax로 받아올 페이지 요청 From ce5212b955ba87c3177ba54ff7c3878488d4f353 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 20 May 2023 18:52:08 +0900 Subject: [PATCH 850/895] =?UTF-8?q?[FIX]=20=EC=8A=A4=EC=BC=80=EC=A5=B4?= =?UTF-8?q?=EC=9D=B4=20=EC=97=86=EC=9D=84=20=EB=95=8C,=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=EB=A5=BC=20=EC=9C=A0=EB=B0=9C=ED=95=98?= =?UTF-8?q?=EB=8D=98=20Mapper=20=EC=BF=BC=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../effourt/calenkit/mapper/ScheduleMapper.xml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml b/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml index 91135dbb..dd6039f5 100644 --- a/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml +++ b/src/main/resources/com/effourt/calenkit/mapper/ScheduleMapper.xml @@ -169,14 +169,16 @@ From a7a275fe216c4e3d17457f81f8fa28070b4bb098 Mon Sep 17 00:00:00 2001 From: BeefCutlet Date: Sat, 20 May 2023 18:58:04 +0900 Subject: [PATCH 851/895] =?UTF-8?q?[FIX]=20=EC=82=AC=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=EB=B0=94=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=82=AC=EC=A7=84=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EC=95=88=20=EB=90=98=EB=8D=98=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=EC=88=98=EC=A0=95=20-=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/sidebar.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/templates/sidebar.html b/src/main/resources/templates/sidebar.html index 44bf038d..20a45013 100644 --- a/src/main/resources/templates/sidebar.html +++ b/src/main/resources/templates/sidebar.html @@ -12,7 +12,8 @@
    - + \ No newline at end of file diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/login/register-form.html similarity index 96% rename from src/main/resources/templates/register.html rename to src/main/resources/templates/login/register-form.html index 771565e9..de669ff6 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/login/register-form.html @@ -5,7 +5,7 @@ Title - +
    @@ -542,6 +540,15 @@ /*]]>*/ + + //로그아웃 + $("#logoutBtn").click(function() { + location.href = "/member/logout" + }); + + $("#mypageBtn").click(function() { + location.href = "/members/myPage"; + });